perf-test-flagos について
vLLM サーバーを起動し、5 つのプロファイルで性能ベンチマークを実行するスキルです。FlagEval が利用可能になるまでは精度テストをスキップし、実行中のコンテナでモデルスタックを測定して JSON 結果と概要を出力します。
主な機能
- 01vLLM サーバーの起動と確認
- 025 つのプロファイルで測定
- 03個別の失敗後も続行
- 04個別・統合 JSON の保存
- 05状態と性能指標の報告
活用シーン
- 01コンテナ内のモデルを測定
- 02プロファイル間の性能比較
- 03スループットとレイテンシの収集
- 04失敗またはタイムアウトしたプロファイルの特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ flagos-ai/ skills --skill perf-test-flagosインストール後、Claude Code で/perf-test-flagosを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/benchmark-profiles.mdscripts/run_all_benchmarks.pyrun_benchmark.py詳細
精度+パフォーマンステスト
対象モデルで vLLM を起動し、複数のプロファイルで精度ベンチマーク(FlagEval が利用可能な場合)とパフォーマンスベンチマーク(vllm bench serve)を実行します。
スキルの構成要素
perf-test/
├── SKILL.md # This file — execution flow
├── scripts/
│ ├── run_benchmark.py # Run single benchmark profile (JSON output)
│ └── run_all_benchmarks.py # Run all 5 profiles, collect + summarize (JSON)
└── references/
└── benchmark-profiles.md # Profile definitions, metrics, vllm bench usage
env-verify から再利用:
env-verify/scripts/test_serve_mode.py— ベンチマーク前にサーバーが正常かどうかを確認するために使用できます(任意の事前チェック)
前提条件
- ソフトウェアスタックがインストールされたコンテナが実行中であること
- model-verify が完了していること — 使用するスタック(
fullとbaseのどちらか)が判明していること - model-verify から取得したモデルパス、TP サイズ、推奨スタック
単独で呼び出された場合は、コンテナ名、モデルパス、TP サイズ、スタック構成を確認してください。
/flagrelease から呼び出された場合は、これらがコンテキストとして渡されます。
実行フロー
ステップ 1:vLLM サーバーを起動
model-verify で推奨されたスタックを使用します。vllm serve のコマンドパターンについては、references/benchmark-profiles.md を参照してください。
docker exec -d <CONTAINER> bash -c '
export USE_FLAGGEMS=<0|1>
export FLAGCX_PATH=<path_or_unset>
export VLLM_PLUGINS=<fl_or_unset>
vllm serve <MODEL_PATH> \
--tensor-parallel-size <TP_SIZE> \
--max-num-batched-tokens 4096 \
--max-num-seqs 256 \
--trust-remote-code \
--port 8000 \
<EXTRA_ARGS>
'
サーバーの起動完了を待ちます(/health をポーリング、タイムアウト 300s):
docker exec <CONTAINER> bash -c '
for i in $(seq 1 150); do
if curl -s http://localhost:8000/health 2>/dev/null | grep -qE "ok|200|\{\}"; then
echo "SERVER_READY"; break
fi
sleep 2
done
'
サーバーが起動しない場合は、エラーを報告して終了します。
ステップ 2:サーバーからモデル名を取得
docker exec <CONTAINER> bash -c '
curl -s http://localhost:8000/v1/models | python3 -c "
import json, sys; print(json.load(sys.stdin)[\"data\"][0][\"id\"])"
'
パート A:精度テスト(FlagEval)— プレースホルダー
ステータス: FlagEval テストクライアントはまだ利用できません。
FlagEval が利用可能になったら、このセクションを以下の内容で更新してください。
- Docker イメージの URL または pip パッケージ名
- 対応するベンチマーク(MMLU、GSM8K、HumanEval など)
- 必須の引数と構成
- 想定される出力形式
- 合格/不合格の基準(精度のしきい値)
現在の動作: 精度テストを SKIPPED として報告します。
パート B:パフォーマンスベンチマーク
ステップ 3:すべてのベンチマークプロファイルを実行
スクリプトをコンテナにコピーして実行します。
docker cp <SKILL_DIR>/scripts/run_benchmark.py <CONTAINER>:/tmp/
docker cp <SKILL_DIR>/scripts/run_all_benchmarks.py <CONTAINER>:/tmp/
docker exec <CONTAINER> python3 /tmp/run_all_benchmarks.py \
--model <MODEL_NAME> \
--tokenizer <MODEL_PATH> \
--port 8000 \
--output-dir /data/results/perf
このスクリプトはデフォルトの 5 つのプロファイルをすべて実行し(references/benchmark-profiles.md を参照)、プロファイルごとの JSON を /data/results/perf/ に保存して、サマリーテーブルを含む統合 JSON レポートを出力します。
重要: 1 つのプロファイルで失敗しても、残りのプロファイルはスキップされません。
ステップ 4:サーバーを停止
docker exec <CONTAINER> bash -c 'pkill -f "vllm serve" || true'
ステップ 5:レポートを作成
{
"status": "PASS | PARTIAL | FAIL",
"stage": "perf-test",
"model": "<MODEL_PATH>",
"tensor_parallel_size": 8,
"flags": {"USE_FLAGGEMS": "1|0", "FLAGCX_PATH": "..."},
"accuracy": {
"status": "SKIPPED",
"reason": "FlagEval test client not yet available"
},
"performance": {
"status": "PASS | PARTIAL | FAIL",
"profiles_passed": "5/5",
"profiles": [ "...per-profile results..." ],
"summary_table": "...markdown table..."
}
}
サマリーテーブルをユーザーに提示します。
| Profile | Input | Output | Prompts | Req/s | Tok/s | TTFT(ms) | TPOT(ms) | P99(ms) | Status |
|---------|-------|--------|---------|-------|-------|----------|----------|---------|--------|
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
ステータスの判定ロジック:
PASS— すべてのプロファイルが完了PARTIAL— 一部は成功し、一部は失敗FAIL— サーバーが起動しなかった、またはすべてのプロファイルが失敗
エラー処理
| 失敗 | 動作 |
|---|---|
| サーバーの起動に失敗 | エラーを報告して終了 |
vllm bench serve が見つからない | vllm のバージョンに関する問題を報告 |
| 1 つのプロファイルが失敗 | エラーを報告し、残りのプロファイルを続行 |
| 1 つのプロファイルがタイムアウト | 600s 後に停止し、部分的な結果を報告して続行 |
| ベンチマーク中にサーバーがクラッシュ | ログを取得し、クラッシュの原因となったプロファイルを報告 |
| 高い並行実行数で OOM が発生 | 報告し、num_prompts を減らすよう提案 |
タイムアウトのルール
| 操作 | タイムアウト |
|---|---|
| サーバーの起動 | 300s |
| プロファイルごとのベンチマーク | 600s |