OpenLLM を採用する前に確認すべきこと: モデルカタログと OpenAI 互換 API の実際
Run any open-source LLMs, such as DeepSeek and Llama, as OpenAI compatible API endpoint in the cloud.
ひと目でわかる
- これは何?
- OpenLLM は任意のオープンソース LLM を OpenAI 互換 API として起動する CLI と、モデル定義を配布するリポジトリ機構を提供する。本稿は README とリポジトリ構成から読み取れる範囲で、その仕組みと導入判断の境界を整理する。
- 誰に向いている?
- 自前の GPU 上で OpenAI 互換エンドポイントを立て、クライアント側のコードを変えずにモデルを差し替えたいチームに向く。モデルリポジトリに載っていないモデルや、量子化形式を自分で細かく管理したい場合は、openllm model get で定義を確認したうえでカスタムリポジトリを書く前提の作業が発生する。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 1 日前です。
- 何の言語で書かれている?
- 主に Python です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
OpenLLM が埋めるのはモデル配布とサービングの継ぎ目
オープンソース LLM を自前で動かすとき、作業は大きく二つに割れる。重みの取得とロード、そして推論結果をアプリから呼べる形で外に出す部分である。OpenLLM が引き受けるのは主に後者で、README は「run any open-source LLMs as OpenAI-compatible APIs with a single command」と説明している。対象読者は、アプリ側がすでに OpenAI SDK や LlamaIndex で書かれていて、接続先だけを自前のサーバーに差し替えたい開発者である。base_url を http://localhost:3000/v1 に向け、model 名を指定すれば、それ以外のクライアントコードは変更されない。モデルごとのトークナイザやプロンプトテンプレートの差異を吸収する層を CLI 側に寄せた設計だと読める。
openllm serve が起動するもの
起動は openllm serve <モデル>:<バージョン> の一形式に統一されている。README の表では llama3.2:1b、qwen2.5:7b、phi4:14b などが並び、それぞれ必要 GPU が併記されている。サーバーは既定で http://localhost:3000 に立ち、/v1 配下が OpenAI 互換 API、/chat がブラウザ用のチャット UI になる。CLI 内で対話したい場合は openllm serve ではなく openllm run llama3:8b を使う。ここで注意したいのは、OpenLLM 自身は重みを保存しないという README の明記である。ゲート付きモデルでは Hugging Face 側でアクセス申請を行い、export HF_TOKEN=<your token> を設定しておく必要がある。トークンが無い場合の挙動は README に記述がなく、確認できない。
モデルはコードではなくリポジトリから解決される
OpenLLM のモデル一覧は本体に焼き込まれていない。既定のモデルリポジトリが bentoml/openllm-models として GitHub 上に置かれ、CLI はそこから定義を取得する。手元の一覧は openllm model list、単体の情報は openllm model get llama3.2:1b で確認でき、リポジトリ側の更新を取り込むには openllm repo update を実行する。この分離は実務上効いていて、新しいモデルが出たときに OpenLLM 本体をアップグレードしなくてもカタログ側の追従で対応できる可能性がある。README はカスタムモデル用に独自リポジトリを追加する手順にも触れているが、本文中では節の途中で切れており、追加コマンドの詳細は確認できない。
必要 GPU の欄は導入可否を最初に判定させる
README のモデル表で最も実用的なのは Required GPU の列である。llama3.2:1b は 24G、gemma3:3b は 12G、llama3.3:70b と jamba1.5:mini-ff0a は 80Gx2、deepseek:r1-671b は 80Gx16 と書かれている。注目したいのはパラメータ数と必要 GPU が単純比例していない点で、1b の llama3.2 に 24G が割り当てられている一方、3b の gemma3 は 12G で済むとされている。これはモデルごとの推論バックエンドや重み精度の違いを反映した表だと推測されるが、README に内訳の説明はない。手元の GPU で動くかどうかは、パラメータ数ではなくこの列で判断するのが素直である。
量子化とバックエンド選択は表の外側にある
README は state-of-the-art inference backends という表現を使うが、どのバックエンドをどの条件で選ぶか、量子化形式をどう指定するかは記述されていない。つまり、VRAM に収まらないモデルを 4bit で動かすといった調整は、この README の範囲では方法が分からない。同じモデルをより少ないメモリで動かしたい場合、量子化済み重みを配布する側のリポジトリや、別のサービングツールを検討する方が早いことがある。OpenLLM が向くのは、表に載っている構成をそのまま再現したい場合と、対応バックエンドの既定値で性能が足りている場合である。
vLLM との違いはモデル定義の置き場所
比較対象として vLLM を挙げる。vLLM は PagedAttention を軸にした推論エンジンで、利用者は Hugging Face のモデル ID をそのまま指定してサーバーを起動する。モデル固有の設定はモデル側のリポジトリに置かれ、サービングツールはそれを読むだけである。OpenLLM は逆で、モデルをどう読むかの定義を openllm-models リポジトリ側に集約し、CLI はそのカタログを引いて起動する。差が出るのは新しいモデルへの追従速度と、社内専用モデルの扱いである。前者ではカタログ更新待ちが発生しうる。後者ではカスタムリポジトリを自分で書く必要があり、その分の管理コストが利用者側に移る。
Apache-2.0 と依存の分離
OpenLLM 本体は Apache-2.0 で提供される。商用利用や改変を含む利用が可能な条項だが、これはあくまで OpenLLM のコードに対する条件である。実際に動かすモデルの重みは別のライセンスで配布されており、Llama 系のように利用条件が独自に定められるものもある。README がゲート付きモデルへのアクセス申請を求めているのは、その境界が利用者側にあることの表れだと読める。ライセンスの解釈は個別の状況に依存するため、ここでは条項の内容そのものには踏み込まない。
更新頻度とメンテナンスの見え方
直近のリリースは v0.6.28 から v0.6.30 までが 2025 年 4 月に集中しており、パッチ番号が小刻みに進む運用が見える。0.6 系が続いていることから、破壊的な変更を伴う大型更新よりも修正の積み重ねが中心だと推測される。ただし README にはアップグレード手順やバージョン間の互換性に関する記述がなく、モデルリポジトリの更新と本体の更新をどう組み合わせるべきかは読み取れない。運用に組み込む場合は、openllm repo update の実行タイミングと、本体のバージョンを固定するかどうかを別々に決める必要がある。
編集部の結論
自前の GPU 上で OpenAI 互換エンドポイントを立て、クライアント側のコードを変えずにモデルを差し替えたいチームに向く。モデルリポジトリに載っていないモデルや、量子化形式を自分で細かく管理したい場合は、openllm model get で定義を確認したうえでカスタムリポジトリを書く前提の作業が発生する。導入前に確認すべきは、対象モデルの必要 GPU が README の表と一致するか、そして HF_TOKEN が必要なゲートモデルかどうかの2点である。
コミュニティノート