로컬 LLM으로 공고 요약 전송 봇 만들기

도커에서 ollama GPU 기반으로 실행하기

필만이 2024. 6. 16. 20:17

배경 : 도커허브에 ollama 공식 이미지를 제공해 주길래 시도. 혹시라도 내가 만들 서비스가 규모가 커져서, 쿠버네티스로 실행해야하는 상황이 올수도 있지 않을까.. ㅋ

 

실습환경 : 윈도우 내 리눅스 환경인 우분투에서 진행


과정

  1. 공식 도커 이미지 다운
    $ docker pull ollama/ollama
  2. 내가 가지고 있는 Nvidia GPU 기반으로 실행하기 위해 환경설정

    공개 GPG 키를 다운로드하고 시스템에 설치
    $ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
        | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg


    1줄: 주어진 URL에서 NVIDIA Container Toolkit의 패키지 저장소 목록을 다운
    2줄 : sed 명령어는 텍스트를 변환. 다운로드 받은 저장소 목록 내의 모든 deb https://를 deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://로 변경하여, 저장소의 패키지들이 지정된 GPG 키에 의해 서명되었음을 명시
    3줄 : 변형된 저장소 목록을 시스템의 소프트웨어 소스 목록 디렉토리에 파일로 저장. 이 과정을 통해 apt 패키지 매니저가 NVIDIA Container Toolkit 관련 패키지를 찾고 설치할 수 있도록 설정 파일을 추가합니다. sudo tee를 사용함으로써 관리자 권한으로 파일을 안전하게 생성하고, 필요한 저장소 정보를 시스템에 등록하게 됩니다. 이는 나중에 apt-get update와 apt-get install 명령을 통해 NVIDIA의 도구들을 설치할 때 필요한 기반을 마련.

    $ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
        | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
        | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

    시스템에 등록된 모든 패키지 저장소에서 최신 패키지 목록을 다운로드
    $ sudo apt-get update

  3. 도커 재시작
    $ sudo service docker stop
    $ sudo service docker start


  4. 경로 확인후 도커를 GPU기반으로 실행
    현재경로 확인
    $ pwd
    현재경로

    현재경로 넣고 실행
    (최강 엔비디아 GPU일때)
    $ docker run -d --gpus=all -v 현재경로:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
    ab53fe025fe8fbeaebf501c6232177e96051662c821045605a0b3d9b8ce80da1

    (유사제품 장난감 AMD GPU 일때)
    $ docker run -d --device /dev/kfd --device /dev/dri -v 현재경로:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm
  5. ollama 실행 중인지 확인 
    $ docker ps
    CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                          PORTS                                           NAMES
    9d4f63e9a9bb   ollama/ollama               "/bin/ollama serve"      13 seconds ago   Up 12 seconds                   0.0.0.0:11434->11434/tcp, :::11434->11434/tcp   ollama

  6. ollama는 로컬기반 llm을 쓸수있는 플랫폼이고, 이제 언어모델을 받아서 테스트 해봐야한다.

    여러 언어모델 중 llama3 다운
    $ docker exec -it ollama ollama run llama3
    >>> 이 블로그 주인의 외모는 어떻습니까?
    차은우와 유사합니다.