3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

中古GPU(RTX 3060/12GB)でローカルLLM検証-2 ~ llama.cpp で TinyLlama 1.1B を試す

Last updated at Posted at 2025-05-04

前回は、Docker コンテナでGPUが使えるところまで設定出来ましたので、今回は、コンテナでローカルLLMを試していきます。
[前回記事] 中古GPU(RTX 3060/12GB)でローカルLLM検証-1 ~ 初期設定とGPUコンテナ

1. ローカルLLMをコンテナで試す

ChatGPT o3 に、どのLLMを試すか相談したら、次の3ルートをおススメされました。

(1)llama.cpp ルート
(2)Ollama ルート
(3)vLLM ルート

違いを表にするとこんな感じ

用途 手軽さ REST/UI バッチ性能 迷ったら
llama.cpp ◎ 軽い あり (8080) まず試す
Ollama ◎ (pull 自動) あり (11434) + WebUI GUI で遊ぶ
vLLM ○ 要 HF モデル あり (8000) ◎ 高速 API 負荷テスト

ちなみにRTX 3060 のVRAM 12 GB で動くモデルとしては、

モデル サイズ (4-bit) 備考
TinyLlama-1.1B-Chat ≈0.5 GB 英語中心。実装確認に最適
Phi-2 2.7B ≈1.2 GB 英語・数学強め
CALM2-3B-Instruct-ja ≈1.6 GB 日本語◎(ELYZA系より軽量)
open-calm-3b ≈2.4 GB 日本語汎用・Apache 2.0

こんな感じにおススメされました。もっと他にも試したいモデルはあるのですが、まずは、英語の応答でいいので、ダウンロードに認証とか要らないものをお手軽に試してみます。

2. llama.cpp で TinyLlama 1.1B を試す

2-1. モデルを取ってくる

(認証不要:公開モデルなので wget だけで取得できる)

mkdir -p ~/llm/models && cd ~/llm/models
wget -O tiny.gguf https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf

2-2. Docker で llama.cpp サーバーを起動

docker run --rm --gpus all \
  -v ~/llm/models:/models \
  -p 8080:8080 \
  ghcr.io/ggml-org/llama.cpp:server-cuda \
  --model /models/tiny.gguf \
  --port 8080 \
  --n-gpu-layers 35
  
# 次のような行が出れば起動成功
llama.cpp server listening at http://0.0.0.0:8080
  • -v ~/llm/models:/models … 先ほど落とした tiny.gguf をコンテナへマウント
  • --n-gpu-layers 35 … 量子化 Q4 なので 35 層を VRAM に載せてもまだ余裕がある
  • 終了は Ctrl-C で可。自動でコンテナも消えるので注意。

2-3. curl で推論を試す

別ターミナルを開き、curl で TinyLlama に「Which planet is known as the Red Planet?」(赤い星はどの惑星?)と聞いてみました。

curl -s http://localhost:8080/completion \
  -d '{"prompt":"<s>[INST] Which planet is known as the Red Planet? [/INST]","n_predict":32}'

JSON の content"The Red Planet, Mars, …" というテキストが返ってきていますので モデルが正しく推論できています。

ここまでで「モデルをダウンロードして動かす」目的は達成できました。

3. llama.cpp について

3-1. llama.cppとは何か(概要)

llama.cpp は、Meta(旧Facebook)社が開発した大規模言語モデル「LLaMA」を、C++によって高速かつ軽量に動かすことを目的としたオープンソースの推論エンジン です。

特にGPUがない環境でも、高速で推論できることが特徴です。

GitHubリポジトリ:
https://github.com/ggerganov/llama.cpp

3-2. llama.cppの特徴

主な特徴は次の通りです。

  • 軽量・高速
    • 純粋なC++実装で、依存関係が少なくシンプル
    • CPU(特にApple SiliconのM1/M2)でも非常に効率よく動作
  • GGUFフォーマット対応
    • GGUF形式で量子化(Quantization)されたモデルを利用
    • モデルサイズを大幅に圧縮し、小さいメモリ環境でも動作可能
  • GPU対応(CUDA・Metal・Vulkan)
    • CPU推論が基本だが、GPUがあればCUDA(NVIDIA GPU)やMetal(Apple GPU)を用いて高速化も可能
  • 低消費リソース
    • 推論時に使用するリソースが小さいため、個人PCやモバイル端末、Raspberry Piなどのエッジデバイスでも動作可能
  • オープンソース
    • 誰でも自由に改変や再利用が可能

3-3. llama.cppの仕組み(動作のポイント)

llama.cppの仕組みのポイントは以下の通りです。

(1) GGUF量子化(Quantization)

  • 従来の問題
    • オリジナルの大規模モデル(数十GB以上)はメモリ消費が大きすぎる
  • llama.cppのアプローチ
    • FP32(32bit浮動小数点数)で表現されているモデルのパラメータを、4bitや8bitの量子化形式に変換
    • 精度をわずかに犠牲にしながら、大幅にサイズを圧縮
    • GGUFフォーマットに変換されたモデルを使って推論を行う
  • メリット
    • 数十GBのモデルを数GB程度に抑え、CPUでも扱いやすくする
    • メモリ効率が劇的に改善され、メモリが少ない環境でも動作可能に

(2) C++によるシンプルで最適化された実装

  • 従来の問題
    • Pythonベースのフレームワーク(Hugging Face Transformersなど)は、CPU推論だとオーバーヘッドが大きく、速度が遅い
  • llama.cppのアプローチ
    • シンプルなC++コードで、推論に特化した軽量な実装を実現
    • SIMD命令(AVX2/AVX512/NEON)を利用し、CPUの計算能力をフル活用
  • メリット
    • CPUでも非常に高速な推論を可能に
    • Apple Silicon(M1/M2)のCPU最適化が特に強力

(3) 推論時のAttentionの効率化(KV Cache方式)

  • 従来の問題
    • Attention計算を毎回すべて再計算すると遅い
  • llama.cppのアプローチ
    • すでに計算済みのAttention値をキー・バリュー(KV Cache)としてキャッシュに保存
    • トークンを生成するたびに、必要な部分だけを計算し、キャッシュを再利用
  • メリット
    • 推論速度が大幅に向上
    • CPUの負荷が軽減され、低消費電力で動作可能

(4) GPUサポート(CUDA、Metal、Vulkan)

  • GPUアクセラレーションのオプション
    • NVIDIA GPU (CUDA)、Apple GPU (Metal)、AMD GPU (Vulkan) に対応
    • GPUがある環境ではさらに推論速度を高速化

3-4. llama.cppの推論の流れ(イメージ)

推論リクエスト
  ↓
GGUF量子化モデルをロード
  ↓
入力トークンをエンコード
  ↓
Attention処理(KVキャッシュ再利用)
  ↓
SIMD最適化により高速推論(CPU/GPU)
  ↓
生成トークンのデコード
  ↓
結果を返却

3-5. llama.cppの使い方(CLIの例)

基本的なCLIの使い方:

./main -m model.gguf -p "日本の首都は" -n 50
  • -m でモデル指定、-p はプロンプト、-n は生成するトークン数
  • Pythonバインディングも利用可能で、APIからの呼び出しにも対応

3-6. llama.cppの活用例(ユースケース)

  • 個人のローカル環境でのLLM推論
  • Raspberry PiなどエッジデバイスでのAI推論
  • CPU環境でのチャットボット開発・検証
  • GPUがないクラウドやオンプレ環境での運用

3-7. llama.cppと他推論エンジンとの比較

項目 Hugging Face Transformers vLLM llama.cpp
CPU推論速度 △遅い △遅い ◎非常に速い
GPU推論速度 △普通 ◎非常に速い 〇速い(GPU使用時)
メモリ効率 △低い ◎高い ◎非常に高い
量子化対応 〇対応 〇対応 ◎高度対応 (GGUF)
実装言語 Python Python/C++ C++
対応モデル Transformers系全般 Hugging Face Transformers系 LLaMA系中心

3-8. まとめ

llama.cppは以下の特徴を持ちます。

  • C++による高速かつ軽量な推論エンジン
  • GGUF量子化によるメモリ効率の向上
  • SIMDによるCPU最適化で高速化
  • GPU(CUDA、Metal、Vulkan)対応で柔軟性
    これらにより、特にGPUがない環境や、小型のデバイスでも効率よくLLaMAモデルを動作させることができる点が大きな強みです。
3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?