LLaMA.cppをDockerで使う方法：初心者向け完全ガイド

## はじめに

こんにちは！今回は、LLaMA.cppをDockerで使用する方法について、初心者の方にも分かりやすく解説していきます。AI技術の進歩により、大規模言語モデル（LLM）を手軽に使えるようになりました。その中でもLLaMA.cppは、効率的で使いやすいツールとして注目を集めています。

この記事では、Dockerを使ってLLaMA.cppを簡単にセットアップし、利用する方法を step by step で説明します。技術的な知識が少ない方でも、この記事を読めば自信を持ってLLaMA.cppを使いこなせるようになりますよ！

それでは、順番に見ていきましょう！

---

こちらの記事もおすすめ

https://hamaruki.com/llama-cpp-wandb-gemma-2-9b-elyza-tasks-performance/

https://hamaruki.com/llama-cpp-wandb-karakuri-lm-elyza-tasks-performance/

## Dockerとは？初心者向け解説

Dockerは、アプリケーションを開発・配布・実行するためのオープンプラットフォームです。簡単に言えば、アプリケーションとその動作に必要なすべての部品を一つの箱（コンテナ）にまとめて、どんな環境でも同じように動かせるようにするツールです。

### Dockerのメリット

1. **環境の一貫性**: 開発環境と本番環境の違いによるトラブルを防げます。
2. **簡単な配布**: アプリケーションを簡単に他の人と共有できます。
3. **リソースの効率的な使用**: 仮想マシンよりも軽量で、素早く起動できます。

Dockerを使うことで、「自分のパソコンでは動くのに、他の人のパソコンでは動かない」というストレスから解放されるのです。

## LLaMA.cppについて知ろう

LLaMA.cppは、Meta AI（旧Facebook AI Research）が開発した大規模言語モデルLLaMAを、C++で実装したものです。オリジナルのPython実装よりも高速で、メモリ使用量も少ないのが特徴です。

### LLaMA.cppの主な特徴

1. **軽量**: 一般的なパソコンでも動作可能。
2. **高速**: C++で書かれているため、処理速度が速い。
3. **カスタマイズ性**: モデルの量子化や最適化が可能。

LLaMA.cppを使えば、個人のパソコンでも高度な自然言語処理タスクを実行できるのです。

## 必要な準備：環境設定

LLaMA.cppをDockerで使用するには、以下の準備が必要です：

1. **Dockerのインストール**: 公式サイト（https://www.docker.com/）からダウンロードしてインストールしてください。
2. **モデルファイルの保存場所の作成**: 例えば、`/llama/models`というフォルダを作成します。
3. **GPUサポート（オプション）**: CUDA対応版を使用する場合は、NVIDIA GPUとnvidia-container-toolkitが必要です。

これらの準備ができたら、次のステップに進みましょう。

## Docker イメージの種類と選び方

LLaMA.cppには、用途に応じて異なるDockerイメージが用意されています。主なものは以下の3種類です：

1. **full**: メイン実行ファイルとモデル変換ツールを含む
2. **light**: メイン実行ファイルのみを含む
3. **server**: サーバー実行ファイルのみを含む

さらに、それぞれにCUDAやROCm対応版があります。

### イメージの選び方

- 初めて使う方や、モデルの変換も行いたい方は **full** がおすすめです。
- 単純に実行だけしたい場合は **light** で十分です。
- APIサーバーとして使用したい場合は **server** を選びましょう。
- GPUを使用したい場合は、対応する**CUDA版**や**ROCm版**を選択してください。

## LLaMA.cppのDockerイメージを使ってみよう

では、実際にLLaMA.cppのDockerイメージを使ってみましょう。ここでは、`full`イメージを使用する例を紹介します。

### モデルのダウンロードと変換

まず、モデルをダウンロードし、ggml形式に変換します：

```bash
docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --all-in-one "/models/" 7B
```

このコマンドは、指定したパスにモデルをダウンロードし、ggml形式に変換します。`/path/to/models`は、実際のモデル保存場所のパスに置き換えてください。

### モデルの実行

変換が完了したら、以下のコマンドでモデルを実行できます：

```bash
docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --run -m /models/7B/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 512
```

このコマンドは、指定したプロンプトに基づいてテキストを生成します。

## CUDA対応版の使い方

NVIDIA GPUを使用している場合、CUDA対応版を使うことでパフォーマンスが向上します。

### CUDA対応版の実行例

```bash
docker run --gpus all -v /path/to/models:/models local/llama.cpp:full-cuda --run -m /models/7B/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 512 --n-gpu-layers 1
```

`--gpus all`オプションでGPUを使用可能にし、`--n-gpu-layers 1`でGPUを使用するレイヤー数を指定しています。

## 実践：日本語で質問に答えるAIを動かしてみよう

ここでは、実際に日本語で質問に答えるAIを動かす例を紹介します。以下のDocker Compose設定と、curlコマンドを使用します。

### Docker Compose設定

```yaml
version: '3.8'
services:
  llama-cpp:
    image: ghcr.io/ggerganov/llama.cpp:full-cuda
    volumes:
      - ./models:/models
    ports:
      - "8000:8000"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [ gpu ]
    tty: true
    command: >
      --server
      -m /models/Llama-3-ELYZA-JP-8B-q4_k_m.gguf
      --port 8000
      --host 0.0.0.0
      -n 512
      --n-gpu-layers 1
```

この設定では、日本語対応モデル（Llama-3-ELYZA-JP-8B）を使用し、サーバーモードで起動しています。

### curlコマンドで質問する

サーバーが起動したら、以下のcurlコマンドで質問できます：

```bash
curl --request POST \
    --url http://llama-cpp:8000/completion \
    --header "Content-Type: application/json" \
    --data '{"prompt": "User:日本語で回答してください。富士山の高さは？ Assistant: ","n_predict": 128}'
```

このコマンドは、「富士山の高さは？」という質問を日本語で投げかけ、AIからの回答を受け取ります。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">取り敢えずLLaMA.cppが必要とのことなので、Dockerで動かす準備をしました！ <a href="https://t.co/VQlQzj4HNh">https://t.co/VQlQzj4HNh</a> <a href="https://t.co/0ENq02YjVJ">pic.twitter.com/0ENq02YjVJ</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1811327504977891709?ref_src=twsrc%5Etfw">July 11, 2024</a></blockquote> 


## トラブルシューティング：よくある問題と解決方法

LLaMA.cppを使用する際によくある問題とその解決方法を紹介します：

1. **メモリ不足エラー**: モデルサイズを小さくするか、スワップ領域を増やしてみてください。
2. **GPUが認識されない**: nvidia-container-toolkitが正しくインストールされているか確認してください。
3. **応答が遅い**: `--n-gpu-layers`の値を調整したり、より軽量なモデルを使用してみてください。

## まとめと次のステップ

この記事では、LLaMA.cppをDockerで使用する方法について、初心者の方にも分かりやすく解説しました。Dockerを使うことで、環境設定の煩わしさから解放され、簡単にAI技術を試すことができます。

次のステップとして、以下のことにチャレンジしてみてはいかがでしょうか？

1. 異なるモデルサイズや言語モデルを試してみる
2. プロンプトエンジニアリングを学び、より良い結果を得る
3. APIを使って自分のアプリケーションに組み込んでみる

LLaMA.cppとDockerを使いこなせば、あなたもAI技術を身近に感じられるはずです。ぜひ、様々な可能性を探ってみてください！

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>