OpenAI代替API機能の比較:llama.cpp / koboldcpp / Text generation web UI

OpenAI APIを使った各種アプリケーションをローカルLLMに置き換えるためのOpenAI代替API機能についてのメモです。

いずれも、パッケージ標準のAPI機能に追加してOpenAIスタイルのAPIに対応させたものです。ChatGPT互換にこだわらない場合はそれぞれの標準APIを使うほうが機能性がよいと思います。

1. llama.cpp

github.com

llama.cppはGGUFフォーマットを使ってLLMの量子化や推論・学習を行うためのパッケージです。APIサーバー機能も実装されていて、そこでOpenAI型APIも一応対応しています。

  • Windowsの場合、server.exeでモデルを立ち上げるだけで使える。
  • OpenAI型APIで利用する場合、 OpenHermes, OpenChat-3.5などChatMLテンプレート(<|im_start|>system\n...)で追加学習したモデルが推奨されている。
  • llama.cpp serverの通常APIはコンテキストキャッシュ(cache_prompt)に対応しているが、OpenAI型APIでは未対応?
    • どうやらllama.cpp本体の開発の速さに対してserverのサポートが色々と追い付いていない感があり、こちらでserver改善/保守のためのヘルプが出されています。
  • なお、llama.cppのPythonラッパーであるlama-cpp-pythonも独自にOpenAI型APIを提供しています。

2. koboldcpp

github.com

koboldcppはllama.cppをベースに、ウェブUIなどに独自の機能拡充を施したパッケージです。

  • Windowsの場合、prebuildのexeファイルを実行するだけでAPIも利用可。ソースからのインストールは非推奨。
  • llama.cppと同じくGGUF量子化にのみ対応(一応旧形式のGGMLも対応)。
  • 公開URL(Cloudflare)に対応。
  • ContextShiftという独自のコンテキストキャッシュ機能がデフォルトで有効。コンテキストのオーバーフローにも自動で対応。
  • koboldcppのOpenAI型APIはどちらかというと簡易的なもので、内部的にはChatMLテンプレート(<|im_start|>system\n...)ではなくAlpacaテンプレート(###Instruction\n...)で処理。

3. Text generation web UI

github.com

ローカルLLMの老舗UI、Text generation web UIにもOpenAI型API機能があります。llama.cppやkoboldcpp のOpenAI APIよりも少し手が込んだ実装になっています。

  • モデルのチャットテンプレート情報を読み込み、自動で判定したテンプレートを適用。
  • prebuildの.exeファイルではなくone-clickインストーラーを使ってセットアップする。やや手間だがコードの修正は容易。
  • コンテキストキャッシュはデフォルトで有効。
  • 公開URL(Cloudflare)に対応。
  • --verbose フラグでコンソールに入力プロンプト全体が表示できる。
  • llama.cpp(GGUFフォーマット)だけでなく、TransformersやGPTQ、Exllamav2など複数のローダー/バックエンドに対応。
    • ただGGUFによる推論はllama-cpp-python経由となっていて、直接llama.cppを使ったほうがやや速いと言われています。

4. その他

  • GPTQ/Exl2/AWQの量子化を使う場合、text-generation-webUI以外に、tabbyAPI、Aphroditeなどの選択肢もあるようです。
  • 対応はMacOS/Linuxのみですが、最近人気のOllamaもAPI機能を提供しています。