Re Reference AI

インフラ

llama.cppとは

C/C++で実装された、CPUでも動作する軽量なLLM推論ライブラリ

推論C++

ひとことで言うと

パソコンのCPUだけでも動く、軽量なAIモデル実行用のプログラム。

概要

llama.cpp(ラマ・シーピーピー)とは、Georgi GerganovによってC/C++で実装された、LLMの推論に特化した軽量なライブラリ。 Pythonの機械学習フレームワークに依存せず、量子化により4bit程度までモデルサイズを圧縮することで、GPUを持たない一般的なノートPCやスマートフォンでもLLMを動作させられるようにした点で、ローカルLLM実行の普及に大きく貢献した。 モデルの重み・量子化情報を1ファイルにまとめたGGUF形式は、llama.cppプロジェクトが定義したフォーマットであり、OllamaLM Studio等、多くのローカルLLMツールの基盤技術として採用されている。

背景

当初のLLM推論はPyTorch等のPythonフレームワークとGPUを前提とすることが多く、一般的なノートPCでの実行は難しかった。 llama.cppは、C/C++による軽量な実装と積極的な量子化により、GPUなしでも実用的な速度でLLMを動かせるよう開発された。

歴史

2023年3月: Georgi GerganovがMeta LLaMAのCPU上での推論を可能にするllama.cppを公開。 以降、量子化フォーマット(GGML、後のGGUF)の整備や対応モデルの拡大が進み、多くのローカルLLMツールの基盤技術として採用されるようになった。

アーキテクチャ

モデルの重みを4bit等の低ビット精度に量子化したGGUF形式のファイルとして扱い、CPUの命令セットを活用した行列演算により推論する。 GPUが利用可能な環境では、一部の計算をGPUへオフロードすることも可能。

コード例

llama-cpp-pythonでの読み込み(概念例)

from llama_cpp import Llama

llm = Llama(model_path="./model.Q4_K_M.gguf", n_ctx=2048)
output = llm("Q: 日本の首都はどこですか? A:", max_tokens=100)
print(output["choices"][0]["text"])

利点

  • GPUがなくても、一般的なノートPCやCPUのみの環境でLLMを実行できる
  • 軽量な実装により、様々なOS・ハードウェアへの移植がしやすい
  • 多くのローカルLLMツールの基盤として採用されており、開発が活発に続けられている

欠点

  • CPUのみでの実行は、GPUを用いる場合と比べ生成速度が遅くなりやすい
  • 大規模なモデルを動かすには、量子化してもなお相応のメモリ(RAM)を要する
  • vLLM等のGPU向けサービングエンジンと比べ、大量の同時リクエスト処理には向かない

比較

  • OllamaOllamaは、内部でllama.cppを推論エンジンとして利用している
  • 量子化llama.cppは、GGUF形式による量子化を通じてモデルサイズを圧縮し、CPUでの実行を可能にしている
  • GPUllama.cppはGPUがなくても動作する一方、GPUがあれば一部の計算をオフロードして高速化できる
  • ローカルLLMllama.cppは、ローカルLLMを実際に動作させる推論エンジンの代表例の1つ
  • GGUFGGUFは、llama.cppプロジェクトが定義したモデル配布フォーマット

関連用語

OllamaLM Studio量子化GPUGGUF

よくある質問

GGUFとは?

llama.cppプロジェクトが定義した、量子化されたモデルの重みとメタデータを1つのファイルにまとめたフォーマット。 OllamaLM Studio等、多くのローカルLLMツールで標準的に使われている。

llama.cppはPythonからも使える?

llama-cpp-python等のPythonバインディングが提供されており、Pythonのコードから直接呼び出すこともできる。

参考文献

関連Zenn記事