DockerでOllamaを動かす

 Nvidia製のGPUを搭載したPC(Ubuntu)でOllamaをDockerで動かす方法について書いていきます。  これらを実行することで最近話題のCommand-Rとかを動かせます。

DockerでOllamaを動かす方法

Dockerfileを作成する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FROM nvidia/cuda:11.3.1-runtime-ubuntu20.04

ENV TZ Asia/Tokyo

RUN apt update

RUN apt install curl wget tzdata -y \
    cuda-toolkit-11-3 \
    cuda-command-line-tools-11-3 \
    cuda-compiler-11-3 \
    cuda-cudart-dev-11-3 \
    cuda-libraries-dev-11-3 \
    cuda-minimal-build-11-3
RUN rm -rf /var/lib/apt/lists/*

RUN wget -O - https://ollama.com/install.sh | sh

# RUN curl -fsSL https://ollama.com/install.sh | sh

RUN apt update

EXPOSE 11434

ENV OLLAMA_HOST 0.0.0.0:11434

CMD ["/bin/bash", "-c", "ollama serve"]

compose.ymlファイルを作成する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
services:
  ollama:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "11434:11434"
    environment:
      - NVIDIA_VISIBLE_DEVICES=all  # すべてのGPUを使う場合
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            count: 'all'  # 使用するGPUの数を指定します。すべてを使う場合は'all'と指定できます。
            capabilities: [gpu]
    volumes:
      - ollama:/root/.ollama
volumes:
  ollama:

実行する

※一応言っておきますが、ビルドにすごい時間がかかります。もしかするとDockerfile内に不必要なパッケージがあるかもしれません。その際はお知らせいただくと嬉しいです。

1
docker compose up -d

Ollamaを起動する

1
2
3
docker compose exec ollama bash
ollama pull $MODEL_NAME
ollama run $MODEL_NAME

以上です。

注意点

  • CUDA等のバージョンの不一致によりエラーが発生する場合があります。コンテナ内部でGPUは使える状態になっていることはnvidia-smiコマンドで確認できます。ですが、ollama serveコマンドを実行した際にログにGPU関連のエラーが発生している場合があります。その場合は、DockerfileのFROMのバージョンを変更するか、Ollamaのバージョンを変更することで解決できる場合があります。

GPU使ってくれない問題

 ここからは詰まった時のメモです。(今も詰まってる)

 どうもGPUの使用率が上がらないし、GPUを使ってるプロセスが無い(nvidia-smiで確認)ので、GPUを使ってくれてないっぽいです。

 どうしてかと考えた末にDockerのコンテナ内のCUDAのバージョンとOllamaで使ってるバージョンが違ってるから使ってくれなさそうだとollama serveのログを見て気づきました。

 解決策としてDockerfileのFROM句のバージョンをnvidia/cuda:11.3.1-runtime-ubuntu20.04に変えました。すると!ついにollama serve実行時に使ってくれるようになりました。ですが、ollama run $MODEL_NAMEを実行すると、ollamaが落ちてしまいました。

 この原因としてDockerのコンテナのCUDAのバージョンとUbuntu(本体)のバージョンが違うためではないかと探り、以下を実施しました。

  1. とりあえずCUDAのバージョンを確認する
1
nvcc -V
  1. CUDAのバージョンを下げるためにCUDAをアンインストール
1
sudo apt-get --purge remove "cuda*"
結論:必要なパッケージが無かった

nvidiaのcudaのDockerイメージ内にCUDA関連の必要なパッケージが無かった…!(Nvidiaさんよ!イメージの中に入れておいてくれよ!)

Built with Hugo
Theme Stack designed by Jimmy