llama.cppをDocker-composeでビルドから構築する方法

チュートリアル

はじめに

llama.cppとは

llama.cppは、Meta(旧Facebook)が開発したLLaMA(Large Language Model Meta AI)モデルを、C/C++で実装したオープンソースプロジェクトです。このプロジェクトは、高性能な言語モデルを様々なハードウェアで動作させることを目的としています。


こちらの記事もおすすめ

Llama.cpp + WandBで始める日本語AI評価:Gemmaモデル(gemma-2-9b-it-Q4_K_M.gguf)のELYZA-tasks-100パフォーマンス分析
はじめにこんにちは!この記事では、Google Colab上でGemmaモデル(gemma-2-9b-it-Q4_K_M.gguf)を使用して、ELYZA-tasks-100データセットの評価を行う方法をご紹介します。この記事は、大規模言語...
Llama.cpp + WandBで始める日本語AI評価:KARAKURI-LMモデル(karakuri-lm-8x7b-instruct-v0.1-Q4_K_M.gguf)のELYZA-tasks-100パフォーマンス分析
はじめにこんにちは!今回は、Google Colab上でkarakuri-lm-8x7b-instruct-v0.1-Q4_K_M.ggufモデルを使って、ELYZA-tasks-100データセットの評価を行う方法をご紹介します。この記事は...

なぜDocker-composeを使うのか

Docker-composeを使用することで、llama.cppの環境構築を簡単に行うことができます。複雑な依存関係や環境設定を、簡単に再現可能な形で管理できるのが大きな利点です。

準備

必要なツール

  • Docker
  • Docker-compose
  • Git(ソースコードの取得に使用)

ディレクトリ構造の作成

まず、プロジェクトのディレクトリを作成しましょう。

mkdir llama-cpp-project
cd llama-cpp-project

Docker-compose.ymlの作成

基本構成

docker-compose.ymlファイルを作成し、以下の内容を記述します。

version: '3.8'
services:
  app:
    build: .
    volumes:
      - .:/app
    tty: true
    env_file:
      - .env
    extra_hosts:
      - "host.docker.internal:host-gateway"

  llama-cpp:
    build: 
      context: .
      dockerfile: Dockerfile.llama
    volumes:
      - ./models:/models
    ports:
      - "8080:8080"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [ gpu ]
    tty: true
    command: >
      ./llama-server
      -m /models/mixtral-8x7b-v0.1.Q4_K_M.gguf
      -c 32000
      --port 8080
      --host 0.0.0.0
      -n -1
      --n-gpu-layers 10

各設定の説明

  • appサービス: 開発環境用のコンテナです。
  • llama-cppサービス: llama.cppを実行するためのコンテナです。
  • volumes: ホストとコンテナ間でファイルを共有します。
  • ports: ホストの8080ポートをコンテナの8080ポートにマッピングします。
  • deploy: NVIDIAのGPUを使用するための設定です。
  • command: llama-serverを起動するコマンドです。

Dockerfileの作成

Dockerfile.llamaの内容

Dockerfile.llamaという名前でファイルを作成し、以下の内容を記述します。

ARG CUDA_IMAGE="12.5.0-devel-ubuntu22.04"
FROM nvidia/cuda:${CUDA_IMAGE}

ENV HOST 0.0.0.0

RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y git build-essential \
    python3 python3-pip gcc wget \
    ocl-icd-opencl-dev opencl-headers clinfo \
    libclblast-dev libopenblas-dev \
    && mkdir -p /etc/OpenCL/vendors && echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd

WORKDIR /app

RUN git clone https://github.com/ggerganov/llama.cpp.git
WORKDIR /app/llama.cpp

ENV CUDA_DOCKER_ARCH=all
ENV LLAMA_CUBLAS=1

RUN python3 -m pip install --upgrade pip pytest cmake scikit-build setuptools fastapi uvicorn sse-starlette pydantic-settings starlette-context

RUN mkdir build && cd build && \
    cmake .. -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=all

RUN cd build && \
    make VERBOSE=1 -j4 || \
    (echo "Make failed. Retrying with more details..." && \
    make VERBOSE=1 && \
    echo "If make succeeded this time, there might be a concurrency issue.") && \
    cp bin/* ..

CMD ["/bin/bash"]

Dockerfileの説明

  • CUDA対応のUbuntuイメージを使用
  • 必要なパッケージのインストール
  • llama.cppリポジトリのクローン
  • ビルド環境の設定
  • CMakeとmakeによるビルド

ビルドと実行

Docker-composeによるビルド

以下のコマンドでDocker-composeによるビルドを実行します。

docker-compose build

コンテナの起動

ビルドが完了したら、以下のコマンドでコンテナを起動します。

docker-compose up

llama.cppの使用

モデルの準備

llama.cppを使用するには、適切なモデルファイルが必要です。modelsディレクトリに配置してください。

サーバーの起動

コンテナ起動時に自動的にllama-serverが起動します。http://localhost:8080でアクセス可能です。

APIの利用

RESTful APIを通じて、モデルとやり取りができます。例えば、以下のようなcURLコマンドで利用できます。

curl -X POST http://localhost:8080/v1/completions \
     -H "Content-Type: application/json" \
     -d '{"prompt": "Once upon a time", "max_tokens": 50}'

トラブルシューティング

GPUが認識されない場合

  • NVIDIAドライバーが正しくインストールされているか確認
  • nvidia-smiコマンドでGPUの状態を確認

ビルドエラーが発生する場合

  • Dockerfileのmakeコマンドのオプションを調整
  • 必要に応じて-jオプションの数値を減らす

まとめ

本記事では、llama.cppをDocker-composeを使ってビルドから構築する方法を解説しました。この方法を使えば、環境に依存せず、簡単にllama.cppを利用することができます。大規模言語モデルの実験や開発に、ぜひ活用してみてください。

参考リンク

この記事を通じて、llama.cppの環境構築がより簡単になることを願っています。質問やフィードバックがあれば、お気軽にコメントしてください。

コメント

タイトルとURLをコピーしました