投稿

ローカルの ComfyUI 動画生成を Google Colab の GPU で動かす:rclone と Colab CLI でつまずいたところ

ローカルの 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 gen

colab 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 円で換算した。