こんにちは、ネットアシスト運用チームのhaokiです。
今回はさくらインターネットのGPUコンテナサービス「高火力 DOK」で、OSSの画像生成モデル SDXL 1.0 と FLUX.1-dev のベンチマークを取ってみました。
ただし今回は普通にスクリプトを書いて回すのではなく、ローカルで動かしているAIエージェント「Hermes」に自然言語で指示して、APIのつなぎこみからトラブル対応まで任せる、という形でやってみました。その顛末と実測結果を紹介します。
高火力 DOKとは
高火力 DOKは、Dockerイメージとコマンドを渡すと、GPU付きの環境でタスクとして実行してくれるマネージドなコンテナ型GPUクラウドです。実行が終わればコンテナは破棄されるので、GPUサーバーを借りっぱなしにする必要がありません。
今回使った範囲での特徴をまとめるとこんな感じです。
- GPUプランは V100(32GB)と H100(80GB)。今回は H100 に統一しました(FLUX.1-dev は V100 だと VRAM 不足で動きません。V100 プランは 2027 年 2 月で提供終了予定でもあります)
- 成果物はコンテナ終了時に
/opt/artifact配下が tar.gz で回収され、後から API でダウンロードできます - コンテナ内ディスクは実測で 930GB ほど空きがあり、57GB の FLUX モデルを展開しても余裕でした
料金が安い
個人的に一番推したいのがここです。料金は秒単位の従量課金で、初期費用はかかりません。
| プラン | 単価 | 1時間あたり | 最低利用時間 |
|---|---|---|---|
| V100(32GB) | 0.016円/秒 | 57.6円 | 1秒 |
| H100(80GB) | 0.28円/秒 | 1,008円 | 60秒 |
H100 が 1 時間 1,000 円ちょっと、と聞くとピンとこないかもしれませんが、DOK はタスクが終わればそこで課金も終わりです。今回の FLUX 成功タスクは実行 641 秒だったので、1 回あたり約 180 円。後述するように今回は 6 回失敗しているのですが、その失敗分を全部足しても 860 円程度でした。H100 で試行錯誤し放題でこの金額なら、かなり気軽に使えると思います。
しかも新規利用だと 3,000 円分の無料枠が付いてくるので、今回程度の検証なら実質タダで一通り試せてしまいます。
とはいえ、API直叩きはハードルが高い
高火力 DOK は API ですべて操作できます。裏を返すと、自動化しようとすると API を叩くコードを書く必要があるということです。今回必要だったものを並べると、
- タスク作成 API への認証(トークン + シークレットの Basic 認証)
- モデル置き場としてのオブジェクトストレージと、署名付き URL の発行(boto3)
- コンテナに渡す
commandの組み立て。これが曲者で、["/bin/sh", "-c", cmd]として渡るため、シェルのクオート問題と正面から向き合うことになります - 失敗時のログ回収と原因調査
一つひとつは難しくないのですが、組み合わせると試行錯誤の回数がかさみます。ベンチを取りたいだけなのに、その前の配管工事が長い、というのが正直なところです。
AIエージェント「Hermes」に丸投げしてみた
そこで今回は、この配管工事をローカルの AI エージェント Hermes に任せました。人間がやったのは、おおよそ次のような指示だけです。
高火力 DOK で SDXL と FLUX のベンチを取って。お題は「猫とさくら」、5 シードで、速度と品質を比較して
Hermes はここから、ランチャースクリプトの作成、オブジェクトストレージへのモデル配置、DOK API へのタスク投入、結果の回収とレポート作成までを自律的に進めます。
6回失敗して、6回自分で直した
正直に書くと、最初から成功したわけではありません。FLUX のタスクは 6 回連続で失敗しました。ただ面白いのは、その原因調査と修正もエージェントが自分で回した点です。失敗の時系列がこちらです。
| # | 結果 | exit | 原因 |
|---|---|---|---|
| 1 | error | 1 | V100 指定 / クオートバグ(初期) |
| 2 | error | 1 | PROMPT のシングルクォートが sh と衝突 |
| 3 | error | 2 | /bin/sh -c '...' を二重にネストして即死 |
| 4 | error | 127 | ubuntu 最小イメージに wget がなかった |
| 5 | error | 1 | 生成スクリプトの torch import 順序バグ(NameError) |
| 6 | done | 0 | wget 追加 + スクリプト修正で成功 |
タスク投入 → 失敗 → ログ回収 → 原因特定 → コード修正 → 再投入、というループを人間の介入なしに回してくれます。こちらは進捗を眺めていただけでした。
これを成立させるコツが一つあります。コマンド末尾に > /opt/artifact/run.log 2>&1 を付けて、失敗しても必ずログを成果物として残すことです。DOK は成果物を tar.gz で回収できるので、失敗時も run.log さえあれば NameError などの正確な原因まで辿れます。これがないと exit code しか手がかりがなく、ループが回りません。
ハマりどころ:sh のクオート問題
失敗の大半はシェルのクオート問題でした。DOK に限らず「コンテナに sh -c でコマンドを渡す」あらゆる場面で踏む罠なので、正解パターンを載せておきます。
# OK: シングルクォートで囲む(中のダブルクォートが Python にそのまま渡る)
python3 -c 'import zipfile;zipfile.ZipFile("/m.zip").extractall("/model")'
# NG: sh のダブルクォート内に生の " を入れるとクオートが崩壊する
python3 -c "import zipfile;zipfile.ZipFile("/m.zip").extractall("/model")"
また、command はすでに ["/bin/sh", "-c", cmd] として実行されるので、cmd の中にさらに /bin/sh -c '...' を書いてはいけません(二重ネストで即死します)。ubuntu:22.04 の最小イメージには wget も python3 も入っていないので、冒頭の apt-get install -y python3 python3-pip wget もお忘れなく。
ベンチマーク結果:SDXL vs FLUX.1-dev
環境は H100(h100-80gb)に統一、解像度は 1024×1024 です。お題は 2 つ用意しました。
- 猫とさくら(5 シード):
a small cat sitting under cherry blossom (sakura) trees, soft pink petals falling, sunlight through branches, photorealistic, high detail - 女性ポートレート(10 シード):
a beautiful woman portrait, detailed face, studio lighting, photorealistic, 35mm lens
お題A:猫とさくら(5シード)
| モデル | ロード(秒) | 1枚平均(秒) | プロンプト遵守 | steps / dtype |
|---|---|---|---|---|
| SDXL 1.0 | 5.76 | 2.27 | ○ 猫+桜 | 30 / float16 |
| FLUX.1-dev | 9.51 | 6.73 | ○ 猫+桜(映画的) | 28 / bfloat16 |
お題B:女性ポートレート(10シード)
| モデル | ロード(秒) | 1枚平均(秒) | プロンプト遵守 | steps / dtype |
|---|---|---|---|---|
| SDXL 1.0 | 4.59 | 2.15 | ○ | 30 / float16 |
| FLUX.1-dev | 8.48 | 6.56 | ○ | 28 / bfloat16 |
傾向まとめ
- 速度は SDXL が優勢。モデルが軽い分ロードも生成も速く、1 枚 2 秒強で安定していました
- FLUX は 2〜3 倍遅いものの、質感と照明の映画的な仕上がりは一段上。品質重視なら FLUX です
- 参考として、SDXL を V100 で回した旧実測はロード 12.38 秒 / 1 枚 9.23 秒でした。H100 移行で生成が約 4 倍速くなっています。V100 の提供終了も踏まえると、今から始めるなら H100 で良いと思います
実際の生成画像(お題:猫とさくら)
数字だけではピンとこないので、実際に生成された画像を並べます。シードだけ変えた 5 枚ずつです。
SDXL 1.0(1枚平均 2.27秒)





5 シードすべてで「猫 + 桜」を安定して生成。2 秒強でこの画が出てくるなら十分実用的です。
FLUX.1-dev(1枚平均 6.73秒)





こちらも 5/5 で遵守。逆光気味の柔らかい光の回り方や被写界深度の表現など、映画のワンカットのような仕上がりが FLUX の持ち味です。
まとめ
- 高火力 DOK は「タスクを投げたら GPU で実行して成果物を返してくれる」シンプルなサービスで、ベンチや一括生成のようなバッチ型ワークロードと相性が良いです
- H100 が秒課金で使えて、今回のベンチは失敗 6 回分を含めても 1,000 円未満。3,000 円の無料枠もあるので試すハードルはかなり低いです
- API のつなぎこみや試行錯誤は AI エージェントに丸投げすると、失敗 → ログ解析 → 修正 → 再実行のループまで自動で回してくれました
- モデルの傾向は「速さの SDXL、画の FLUX」でした
今回の構築でハマりやすいポイントをまとめると:
commandはsh -c経由で実行される。中でさらにsh -cをネストしない- zip 展開などの Python ワンライナーはシングルクォートで囲む
- ubuntu 最小イメージには wget / python3 がない。apt で最初に入れる
- コマンド末尾の
> /opt/artifact/run.log 2>&1は必須。失敗調査が段違いに楽になります
なお、今回はモデルをオブジェクトストレージから毎回ダウンロードする方式にしたため、コールドスタートに数分〜十数分かかっています。モデルをコンテナイメージに焼き込めばここは消せるはずなので、続編で試してみたいところです。ランチャーは --seeds 1..1000 と指定するだけで 1 タスク 1,000 枚生成にも対応しているので、大量生成デモも続編候補です。
後片付けも忘れずに。オブジェクトストレージに置いた flux.zip(約 58GB)と sdxl.zip(35GB)は使い終わったら削除してストレージ課金を止め、DOK のトークンも失効させておきましょう。
さくらのクラウドを使ったサーバーの監視・運用体制の整備についてご相談がある方は、ぜひネットアシストにご連絡ください。
それではまた!