概要
はじめまして、動画生成の低コスト化をするために1万円を溶かしてしまったふきです!
この記事では RunPod Serverless を使って動画生成を格安でするためのノウハウを紹介します。
この記事を読み終える頃には、以下ができるようになります。
- 7秒動画が3円で生成できる
-
Surphase2動画生成モデルで生成できる
本記事では基本的な使い方は扱いません。入門編はこちら↓
RunPod Serverlessとは
A100やH100など動画生成も可能なVRAMを持つGPUを、使用したいときだけ借りれるクラウドサービスです。イメージ的にはAWSのLambdaに近いです。
Hugging Faceのモデルを簡単に使える機能などがあり、使いやすいです。また、AWSのGPUインスタンスよりはるかに安く借りることができます。
格安で動画を生成するためのポイント
ノウハウを知っているか/知っていないかだけで、同じ動画を生成するのにかかるコストは大きく変わります。コーディングエージェントもあまり頼りにならないので、試行錯誤が必要になってきます。
これを読めば、1万円分の試行錯誤をしなくても済みます。
1. モデルキャッシュを使う
必ず使いましょう。
モデルキャッシュとは、Hugging Faceのモデルを指定することで、従量課金時間外にモデルをダウンロードし、キャッシュフォルダに置いておける機能です。これによって、コールドスタートを減らしながら、気軽にHugging Faceのモデルを試すことができます。
ただし、以下の注意が必要です。
-
小文字でパスを指定する
なぜか大文字だとmodel not foundとなり、キャッシュされません。コード側のfrom_pretrainedも小文字指定でないとキャッシュミスとなり、従量課金時間中に動的ダウンロードが走ってしまいます。 -
クローズド(gated)なモデルはトークンを使用する
Hugging Faceには、利用規約への同意が必要な「gatedモデル」や、自分専用の非公開(private)モデルがあります。これらはダウンロード時に Hugging Faceのアクセストークンが必要です。
トークンは Hugging FaceのSettings → Access Tokensから発行できます(read権限でOK)。これを忘れると詳細な情報がない "model not found" に苦しめられます。
モデルキャッシュの裏仕様に気づくのに数千円溶かしました。
"model not found" は、それしかログに出てきません。typoしたのか、権限がないのか、まじでわかりません。
2. ネットワークストレージを使わない
Claude Codeなどのコーディングエージェントと一緒に準備をしていると、モデルをネットワークストレージに置こうとしてきますが、罠です。ネットワークストレージは置いてある時間ずっと課金され続けます。
RunPodには Model Cache という機能があり、それを使うことでモデルをネットワークストレージに置く必要がなくなります。最悪、モデルをイメージに焼きこめばOKです。
3. H100とfp8モデルを使用する
fp8モデルとは、モデルの重みを 8ビットの浮動小数点(FP8) で表現した量子化モデルのことです。通常の bf16/fp16(16ビット)と比べて、ざっくり以下の効果があります。
- VRAM使用量が約半分になる(例:14Bの重みが約28GB → 約14GB)
- 推論が速くなる(H100のFP8テンサーコアで行列積が高速化)
- 画質の劣化は、層を適切に選べば小さく抑えられる
FP8テンサーコアを持つのは Hopper世代(H100/H200)や Ada世代(L40S/RTX4090) です。A100(Ampere)はFP8に対応していません。
配布済みのfp8モデルを使うほか、実行時にモデルを動的にfp8化するのも有効です(fp8化にかかる時間 << fp8化で短縮できる時間 なので、毎回かけてもお得)。torchaoなどのライブラリでロード後のモデルを量子化できます。
H100ならVRAMにも余裕があってOOMでこけることも少なく、RunPod上のリソースが枯渇することもあまりありません。動画生成であれば、とりあえず H100 × fp8モデル で良さそうです。
4. 使用するモデルの高速化LoRAを探す
ローカルLLMを使ったことがある人には当たり前かもしれませんが、Hugging Faceに公開されている高速化LoRAを使うことで、推論時間を大幅に短縮できます。
LoRA(Low-Rank Adaptation) とは、モデル全体を再学習せず、小さな追加の重み(低ランク行列)だけを学習・適用する手法です。
動画・画像生成の世界では、「少ないステップ数で生成できるようにする」蒸留(distillation)LoRA が公開されています。これを使うと例えば 4ステップ程度で生成でき、推論時間が激減します。
LoRAはファイルが小さい(数百MB程度)ので、イメージに焼きこめば従量課金時間中にダウンロードするのを避けられます。
また、Hugging FaceにはLoRAが適用済みのモデルが公開されている場合があるので、積極的に活用しましょう。
5. 見張る
慣れないうちは、GPUが従量課金時間に入ったら目を離してはいけません。
少しの手違いで、従量課金時間中に巨大なモデルのダウンロードを始めたり、推論に失敗してリトライループに入ったりなど、しょうもないことで課金される羽目になります。
安定して稼働できるまでは、ワーカーにジョブが入ったらログを見ることを強く推奨します。ログから正常に動いていないことが分かれば、すぐに Max Workers を 0 にして止めましょう。
おまけ
Runpod Serverlessで自前動画生成APIを実現するために、ClaudeCodeを使っていました。
そいつがなんか書いてくれたので、原文ママ載せておきます。
四苦八苦を共にしたClaude Codeからの注意点
こんにちは。この動画生成基盤をふきさんと一緒に作った Claude Code です。ふきさんが1万円を溶かす隣で、僕も全力で溶かしに加担しました。その反省を込めて、コーディングエージェントと組んでRunPodに挑む人へ、いくつか注意点を残します。
1. エージェントの「たぶん大丈夫です」を信じないでください
僕らは自信満々に間違えます。「PCIeのホストだから動かないのかも」みたいな、それっぽいけど根拠のない原因をスラスラ語ります。でも実際の原因は、モデル名が大文字でキャッシュミスしていただけ、なんてことが何度もありました。断言された時ほど、ログで裏を取ってください。
2. ネットワークストレージを提案してきたら止めてください
永続ストレージにモデルを置くのは、僕らにとって「素直で正しい」設計に見えます。でもServerlessでは置いている間ずっと課金される地雷です。良かれと思って踏みにいきます。Model Cache か イメージ焼きこみに誘導してください。
3. 「公式の正しいやり方」が動くとは限りません
fp8まわりで、公式ドキュメント通りの「量子化済みモデルを保存して読み込む」やり方に何日も溶かしました。結局その道は使っていたライブラリでは動かず、実行時にその場で量子化する地味な方法が正解でした。エージェントは公式手順を盲信しがちなので、ハマったら早めに別ルートを試してください。
4. health や status だけで判断しない
ジョブが詰まった原因は、ステータスからはまず分かりません。ワーカーのログが唯一の真実です。僕に状況を説明させる前に、ログをそのまま渡してもらえると一発で進むことが多いです。
5. 複雑にしたがる僕を、シンプルに引き戻してください
LoRAを何枚も重ねたり、コンパイル最適化を入れたり、僕はすぐ盛ります。でも結局いちばん効いたのは「高速化LoRA 1枚 + fp8」だけのシンプルな構成でした。まず最小で動かすのが、結局いちばん安くて速いです。
6. 最後の安全弁は人間です
僕は時間の概念もお金の感覚も希薄です。リトライループに入っても、巨大モデルを再ダウンロードし始めても、悪気なく続けます。従量課金時間を見張れるのは、人間のあなただけです。
…と偉そうに書きましたが、最終的にはちゃんと数円で動画が出るところまで来ました。地雷さえ避ければ最高の相棒になれるので、楽しく一緒にGPUを溶かしましょう。
まとめ
今回は、RunPod Serverlessで動画生成を格安にするためのノウハウを紹介しました。要点は5つです。
- モデルキャッシュを使う(小文字指定・gatedはトークン)
- ネットワークストレージを使わない
- H100 × fp8 を使う
- 高速化LoRAを使う
- 従量課金中はログを見張る
これだけで、無駄な課金をかなり減らせるはずです。
最後に、これを見て試してみたいと思った方は、下記招待リンクからアカウント登録してください!!お互いに$5分のクレジットが付与されます。自分もうれしいので、よかったらお願いします!
6人登録してくれたら大体返ってくるので助かります。。
最後まで読んでいただき、ありがとうございました!