Docker로 간편하게 Llama3.2 셋업하기 (Feat. Ollama를 곁들인)

Docker로 간편하게 Llama3.2 셋업하기 (Feat. Ollama를 곁들인)

Llama3.1 이 나온 지 얼마나 됐다고, 또 Llama3.2 모델이 출시됐다. 엣지 디바이스에서도 사용할 수 있을 정도로 경량화된 모델로, 1B과 3B 모델을 각각 공개했다. 심지어 이미지 입력과 같은 멀티 모달도 가능하다.

오늘은 llama를 쉽게 세팅할 수 있는 ollama 라이브러리를 이용해서 구현을 해보기로 한다.

Docker 용 Nvidia container는 이미 설치되어 있으니 넘어간다. 혹시 설치가 안 되어 있으면 링크를 참조해서 설치를 먼저 하고 오면 된다.

사실 Nvidia container만 셋업 했다면 llama 구동은 매우 간편하다. 아래와 같이 터미널에서 ollama를 실행해 주자.

docker run -d --gpus=all -v ollama:<local path> -p 11434:11434 --name ollama -it ollama/ollama /bin/bash

# <local path>에는 ollama 도커 컨테이너와 데이터를 공유할 절대 경로로 넣어주자.
ollama run llama3.2
# docker container에서 llama3.2를 실행하면 디폴트로 3B 모델이 실행된다.

확실히 3B 모델이라 대답하는 속도가 매우 빠르다. 그런데 라마를 사용할 때마다 터미널에 들어가는 건 불편하다. API로 사용이 가능하다. 공식 블로그 글을 보면 openai library에 통합해서 사용도 가능한 것처럼 보인다. 하지만, 오늘은 JSON을 통해서 사용하는 방법으로 구현했다.

import requests
import json

url = 'http://127.0.0.1:11434/api/chat'
data = {
        "model": "llama3.2", # llama3.2:3b model
        "messages": [{'role': 'user',
                      'content': 'hello how are you?'} ]
        }

with requests.post(url, json=data) as resp:
  for line in resp.iter_lines():
      if line:
          line=line.decode('utf-8')
          line = json.loads(line)
          print(line['message']['content'], end='', flush=True)
  resp.close()

이런 식으로 json 을 통해서 api로도 사용이 가능하다. 이 기능을 통해 ollama를 직접 실행하지 않고도, 여러 가지 응용이 가능하다. 아래처럼 streamlit 을 사용해서 챗봇 AI 서비스처럼 사용도 가능하다.