ローカルの ComfyUI 動画生成を Google Colab の GPU で動かす:rclone と Colab CLI でつまずいたところ
参考: rclone: Google drive / googlecolab/google-colab-cli / Manage OAuth App Branding
まとめ
- Colab で Google Drive をマウントすると、ランタイムを確保するたびに人の許可が要り、Colab 側は依頼から約 2 分で諦める。自動で流すために、公式の Colab CLI の upload / download で VM と直接やり取りし、Drive は手元の rclone だけで触る構成にした
- rclone 用に自分で作る OAuth クライアントは、スコープを
driveの 1 つにし、公開ステータスは「テスト中」のまま使う(許可は 7 日で切れる)。2026 年 10 月の時点では、本番にするのに自分のドメインのホームページとプライバシーポリシーが要る - ローカルで動いているワークフローを持ち出すときは、全ノードが持ち出し先の ComfyUI にあるかを確かめる。省メモリ用のノードがカスタムノード(ComfyUI-KJNodes)のもので、課金中の 1 回目が HTTP 400 になった
- A100 40GB で、480p で 5 秒の i2v(画像から動画)の生成は 155 秒、セッション全体で 2.08 CU(約 25 円)だった
構成
手元の RTX 4080 SUPER 16GB では、MiniMax-H3 で 10 秒を超える動画を作るのに時間がかかり、VRAM が足りずに試せないモデルもある。 そこで Colab の Pay As You Go で A100 を使うことにした。 作業の大半は Claude Code に任せ、Google アカウントの認証と、課金のある実行の判断だけを自分でやった。
表1: 何をどこに置くか
| 場所 | 持つもの | 動かすもの |
|---|---|---|
| 手元の Ubuntu | rclone と Colab CLI の認証情報、ジョブを作る CLI | rclone で Drive を読み書きし、Colab CLI で VM を確保・実行・停止する |
| Google Drive | ジョブ(pending → processing → completed / failed)、入力画像、完成した動画、ログ | 置き場所なので、自分では動かない |
| Colab の VM | 版を固定した ComfyUI、Hugging Face から落としたモデル | ComfyUI を 127.0.0.1 で起動し、ワークフローを流す |
ComfyUI の画面は外に出さない。 規約がリモートプロキシを禁じている。 ngrok などのトンネルはこれに当たる恐れがある。 ジョブにはワークフローの JSON そのものを入れ、手元の CLI の dry-run で毎回作る(その CLI は入力画像の縦横比で解像度を決めるので、テンプレートの文字を差し替える作り方だと縦長の画像が歪む)。
rclone で Google Drive をつなぐ
rclone 共有の client_id は 2026 年中に廃止予定なので、自分の Google Cloud プロジェクトに OAuth クライアント(デスクトップ アプリ)を作り、rclone の公式手順どおりに進めたところ、次の 4 か所で止まった。
表2: rclone の設定で止まった所
| 表示 | 原因 | 対処 |
|---|---|---|
| 「次のスコープは無効なため、追加されませんでした。」 | 公式手順の例にある 3 つのスコープ(docs、drive、drive.metadata.readonly)をまとめて貼ると、通らないものが混ざる | drive の 1 つだけを登録する。rclone は scope = drive のとき auth/drive しか要求しない(backend/drive/drive.go で確認) |
| 「アプリを公開するには、[ブランディング] ページで構成を完了する必要があります。」 | 外部向けの本番アプリには、ホームページとプライバシーポリシーの URL と、そのドメインの承認済み登録が要る | テスト中のまま使い、7 日で切れたら rclone config reconnect aiws: で許可し直す |
ブラウザが開かずに config_token> で止まる | Edit advanced config? の直後に Use auto config? の y/n> が続く。前の質問の答えのつもりで n を入れていた | y を入れる。止まったら別のターミナルで rclone authorize を実行し、出たトークンを貼り戻す |
許可したのに empty token found | 設定ファイルにトークンが書かれていなかった。最後の質問に答える前に終えたと見ているが、確かめきれていない | 最後の Shared Drive? に答え、プロンプトに戻るまで待つ |
3 つ目の対処ではターミナルを 2 つ使う。 config_token> の画面はそのまま待たせておき、もう 1 つのターミナルで許可を取る。 手順書がこれを書き分けていなかったので、最初は 1 つのターミナルで済むと勘違いしていた。
rclone authorize "drive" "<長い文字列>" の長い文字列は、クライアント ID とシークレットを base64 で包んだだけのものだ。 私は一度、これを手順書のレビュー用コメントに貼ってしまった。 許可のあとに出るトークンと同じく、どこにも貼らないほうがいい。
Colab をターミナルから動かす
Colab のノートブックをブラウザで開いて全セルを実行するのは、ログインした本人の操作になる。 Google の Colab チームが 2026 年 6 月に公式の CLI(google-colab-cli)を出していて、ランタイムの確保から停止までをターミナルでできる。 認証は最初の 1 回だけで、表示された URL を開いて許可し、出たコードをターミナルに貼る。 あとは AI エージェントからも叩ける。
colab usage # CU の残高と消費レート
colab new -s gen --gpu A100 # ここから課金が始まる
colab upload -s gen job.json /content/aiws/jobs/pending/job.json
colab exec -s gen -f run.ipynb --timeout 2400
colab download -s gen /content/aiws/output/videos/<id>.mp4 ./
colab stop -s gencolab exec は出力が 30 秒止まると打ち切るので、何分も黙るモデルのダウンロードや生成の完了待ちに備えて --timeout を大きくした。 また -f でノートブックを渡すと、出力が元のファイルに書き戻るので、コピーを渡している。 colab usage で残高が取れるので、セッションの前後の差を、実際に使った CU として記録できる。
Drive の許可をどう扱うか
Colab の中から Drive をつなぐ colab drivemount は、ランタイムを確保するたびに Drive の許可 URL を出す。 Colab 側の drive.mount() は依頼から約 2 分で諦める(ValueError: mount failed)。 URL をチャットで受け取って許可し、その返事を受けてから Enter を送る段取りでは、2 回続けて間に合わなかった。 自分のターミナルで実行し、許可した直後に Enter を押したら通った。
表3: Drive とのやり取りの選び方
| 手順 | 判断すること | 結果 |
|---|---|---|
| 1 | 人がいなくても流せるか | Colab で Drive をマウントする方式は落ちる |
| 2 | 個人の Google アカウントの Drive に新しいファイルを作れるか | サービスアカウントは落ちる |
| 3 | Drive の許可を手元の PC から出さずに済むか | rclone の設定を VM に送る方式は落ちる |
| 4 | 残ったもの | Colab CLI の upload / download と、手元の rclone |
既定は Colab CLI の upload / download と手元の rclone。 Drive の許可が手元の PC から出ず、人の操作は最初の 1 回で済む。
サービスアカウントには保存容量の割り当てがなく、個人の Drive で共有されたフォルダにも新しいファイルを作れない。 書けるのは共有ドライブだが、共有ドライブは Google Workspace のアカウントでないと作れない。
表4: 判断の根拠
| 方式 | 人の操作 | 許可の置き場所 | 欠点 |
|---|---|---|---|
| Colab で Drive をマウント | ランタイムごとに 2 分以内 | Colab のランタイムごと | 人がいないと流せない |
| rclone の設定を VM に送る | 最初の 1 回 | 毎回 VM に置く | Drive 全体を書き換えられる許可が VM に残る |
| サービスアカウント | なし | 鍵ファイル | 個人の Drive に新しいファイルを作れない |
| Colab CLI の upload / download | 最初の 1 回 | 手元の PC だけ | 実行中は手元の PC を起こしておく。生成物は取ってくるまで VM にしかない |
選んだ方式の欠点は、1 本できるたびにすぐ取ってくることで小さくしている。
1 本目の結果
表5: GPU での 1 回目に出たもの
| 表示 | 原因 | 対処 |
|---|---|---|
Node 'MiniMaxLowVRAMAttention' not found(HTTP 400) | 省メモリ用ノードは ComfyUI 本体ではなく ComfyUI-KJNodes のもの。手元には入っていたので気づかなかった | dry-run で省メモリ用ノードを外す。A100 40GB では外しても生成できた |
HF_TOKEN を Colab のシークレットから読めないという警告 | CLI から実行すると、Colab のシークレットは読めない | モデルのリポジトリが公開なので、そのまま進めた |
| やり直しに Drive が使えない | ノートブックが最後に Drive をアンマウントしていた | colab upload で画像とジョブを置き直し、同じカーネルに残っていた ComfyUI のクライアントで流した |
1 つ目は課金中に出た。 ComfyUI の導入とモデル 42.5GB の準備を終え、ワークフローを送った時点だった。 設計の段階では、主要なノード(MiniMaxH3ImageToVideo など)が本体にあることだけを見て、全ノードがそうだと思い込んでいた。 持ち出すワークフローの class_type を全部列挙し、持ち出し先の ComfyUI に 1 つずつあるか確かめていれば、課金の前に分かった。
やり直した 2 回目で、1 本目ができた。
表6: 1 本目の実測
| 項目 | 値 |
|---|---|
| GPU | A100 40GB(--gpu A100 で付いたのは 40GB。消費レートは 5.30 CU/時) |
| モデル | 本体 pruned_int8_convrot、テキストエンコーダ nvfp4_awq。どちらも A100 で動いた |
| ComfyUI の導入 | 42.5 秒 |
| モデルの準備(約 42.5GB を Hugging Face から) | 145.5 秒 |
| 生成(480x832、124 フレーム、20 ステップ) | 154.7 秒(1 ステップ 3.58 秒) |
| 出力 | 5.17 秒、24fps、音声付き、約 318KB |
| 使った CU | 2.08 CU(約 25 円、買った 100 CU の約 2%)。確保していた約 28 分ぶんで、Drive の許可待ちとやり直しを含む |
円は 100 CU = 1,179 円で換算した。