1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

llama.cppとは

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


こちらの記事もおすすめ

なぜ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の環境構築がより簡単になることを願っています。質問やフィードバックがあれば、お気軽にコメントしてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?