はじめに
pin したコミット
affd5beで検証。コマンドは Go 1.26 と動作する Docker または Kubernetes 環境を想定。
前提
- ソースからビルドするなら Go 1.26 (
go.modはgo 1.26.0を宣言)。 - ローカル一発起動パスにはコンテナランタイム。クラスタはスクリプトが用意する。
- 実デプロイには Volcano スケジューラを入れた Kubernetes クラスタ。
ModelServingSpec.SchedulerNameのデフォルトがvolcanoだから (pkg/apis/workload/v1alpha1/model_serving_types.go:47)。
インストール
クラスタ不要の最短は一発起動スクリプト (README.md:77):
bash
./hack/local-up-kthena.sh--help でオプションを確認できる。ソースからビルドする場合:
bash
make buildコンテナイメージは make docker-build-all で、router / controller / downloader / runtime の 4 イメージが作られる。
最初の動く構成
中核機能は、1 モデルを立てて router 経由の OpenAI 互換 API で叩くこと。
Kthena をローカルで起動する。
bash./hack/local-up-kthena.shModelBooster(またはModelServing) を 1 つ apply し、controller にモデルをServingGroupとして立てさせる。ModelBackend.ModelURIは許可されたスキーム、例えばhf://を指定する (許可はhf:///s3:///pvc:///ms://のみ。pkg/apis/workload/v1alpha1/model_booster_types.go:59)。マニフェストは クイックスタートガイド に従う。pod が ready になったら OpenAI 互換リクエストを router へ送る。
bashcurl http://<router-address>/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "<your-model>", "messages": [{"role": "user", "content": "hello"}]}'
動作確認
- 提供中モデルの一覧。router が直接応答する (
pkg/kthena-router/router/router.go:216-220):
bash
curl http://<router-address>/v1/modelsServingGroupの pod がスケジュールされたか確認する。Volcano を入れていれば Volcano PodGroup を通じて gang として配置される (pkg/model-serving-controller/controller/model_serving_controller.go:194)。/v1/chat/completionsが補完を返せば端から端までの経路が確認できる。
次に読むもの
- 完全なマニフェストは公式 クイックスタートガイド。
- エンジン別デプロイは vLLM の Kthena 連携 と Ascend NPU ガイド。
- スケーリングはリポの
examples/keda-autoscalingとexamples/prometheus-autoscaler、gang / network-topology-aware 配置は Volcano スケジューラのドキュメント。