FramePackで動画生成を試す:WSLとホストで異なるCUDAバージョンでも動作するかを検証

目次

🎬 FramePackとは?画像から動画を生成する次世代モデル

今回試したのは、画像から高品質な動画を生成できる先進的なフレーム予測モデル「FramePack」です。

これは、「次のフレーム(またはフレームセクション)を逐次予測する」アーキテクチャで、13Bモデルでも ノートパソコンのGPUで数千フレームを生成できる という驚異的な効率を誇ります。
学習や生成は、画像生成に近い感覚で操作でき、インタラクティブに結果が得られるのも魅力です。

💡 公式が求めるCUDAバージョンと注意点

Linux環境で利用する場合、FramePackのセットアップ手順では以下のコマンドを実行するよう指示されています:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

これは、PyTorchのCUDA 12.6対応ビルドを明示的に指定しています。

🤔 しかし、環境によってCUDAバージョンにズレが?

このとき、ふと疑問が浮かびました。

「自分の環境はCUDA 12.6に合っているのか?」

そこで nvcc -V コマンドを使って確認してみたところ、以下のような結果が出ました。

PowerShellでは:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Jan_15_19:38:46_Pacific_Standard_Time_2025
Cuda compilation tools, release 12.8, V12.8.61
Build cuda_12.8.r12.8/compiler.35404655_0

一方、WSLでは:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0

🤯 CUDAのバージョンが違う!?なぜ?

同じマシンで nvcc -V を実行しているのに、PowerShellではCUDA 12.8、WSLではCUDA 12.0と表示される
これは一見不思議な現象ですが、実際によくある落とし穴なのです。

PowerShellでは12.8、WSLでは12.0?CUDAバージョンが異なる理由とその背景

CUDAを使って開発を進めていると、「ホストのWindowsとWSLでCUDAのバージョンが違う」という現象に出会うことがあります。
たとえば、以下のように nvcc -V を実行すると、結果がまったく違って見えることがあります。

🖥 PowerShellやコマンドプロンプトで以下を実行:

nvcc -V

出力例:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Jan_15_19:38:46_Pacific_Standard_Time_2025
Cuda compilation tools, release 12.8, V12.8.61
Build cuda_12.8.r12.8/compiler.35404655_0

🐧 一方、WSL内で同じコマンドを実行すると:

nvcc -V

出力例:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0

なぜこのような違いが生まれるのか?

違いの理由は非常にシンプルですが、見落とされがちな「WSLとWindowsの役割の違い」にあります。

✅ Windows側(PowerShell・コマンドプロンプト)は、WindowsにインストールされたCUDA Toolkitを使用

nvcc の出力は、WindowsにインストールされたCUDAのバージョンそのものです。
このため、WindowsでCUDA 12.8をインストールしていれば、それに対応したバージョンが表示されます。

✅ 一方、WSL側は完全に別のLinux環境

WSLはLinuxのサブシステムであり、WSL内部にもCUDA Toolkitを別途インストールしない限り、最新版にはなりません。
たとえWindows側がCUDA 12.8でも、WSL内部には12.0が入っていたり、そもそもインストールされていなければ nvcc 自体が使えません。

💡 WSLのGPUサポートはホストのドライバに依存している

WSLでは nvidia-smi を実行しても、ホスト(Windows)のGPU情報をそのまま取得できます。
そのため、nvidia-smi では最新に見えても、nvcc の出力は古いままということが普通に起きます。

🧩 よくある誤解

  • 「nvccのバージョンが古いのは、Python仮想環境のせい」
    → ❌ 仮想環境は関係ありません。nvccはシステムのCUDA Toolkitに依存します。
  • 「ホストが12.8だからWSLも同じはず」
    → ❌ WSLは“別のOS”です。個別にインストールが必要です。

✅ 状況を確認するためのコマンドまとめ

コマンド説明
nvcc -VCUDA Toolkitのバージョン(= コンパイラバージョン)
nvidia-smiGPUのドライバと使用状況(ホスト依存)
which nvccnvcc の参照先パスの確認(なければ未インストール)
ls -l /usr/local/cudaCUDA Toolkitの実体確認(シンボリックリンク含む)

あ、それから、WSL × VSCode の組み合わせは、Linuxの開発環境の快適さと、Windowsの操作性の良さを両立できる最強タッグです💪✨

🔧 WSL × VSCode の組み合わせが便利な理由

✅ 1. ネイティブLinux環境での開発が可能

  • apt, pip, conda などLinuxツールがそのまま使える
  • シンボリックリンクやUNIXパーミッションの動作も完璧

✅ 2. VSCodeがWSLにシームレスに接続

  • ターミナルは自動的に WSL の bash/zsh に切り替わる
  • .venv などの仮想環境も自動検出してくれる(Python拡張込み)
  • GUIアプリケーションも wslg で起動可能(Ubuntu GUIなど)

✅ 3. ファイル操作も快適

  • WindowsとWSL間のファイルコピーもエクスプローラー感覚
  • /mnt/c/... のようにWindows側もマウント済み
  • VSCode内でフォルダを開くと、Linux側のパスでアクセス

🧠 補足:Pythonプロジェクトとの相性も抜群

  • .venv をWSL内で構築 → VSCodeが勝手に認識してくれる
  • GPUのテスト(PyTorch, TensorFlowなど)も、WSL上のCUDAで確認可能
  • VSCodeの「デバッグ」「Linter」「フォーマッタ」も全部WSL側で動作!

🎯 おすすめの使い方Tips(もしまだでしたら)

settings.json に以下の設定を追加すると .venv 自動検出率UP:

"python.venvPath": "${workspaceFolder}/.venv"

Remote-WSL 拡張機能は入れ忘れないように!

ここまで整理すると以下のような感じでしょうか。

🔧 状況整理(現環境)

  • ホスト(Windows)CUDAドライバ:12.8
  • GitHubのプロジェクトが要求:CUDA 12.6
  • 環境構築場所:WSL2
  • 目的:Python仮想環境内での動作検証

🎯 重要なポイント

① CUDAドライバ(ホスト) vs CUDAツールキット(WSL内)の違い

  • ホスト(Windows)側のCUDAドライバ 12.8は、後方互換性があるため12.6も基本的にはサポートします
  • しかし、Pythonで動かす深層学習ライブラリ(PyTorchやTensorFlowなど)は、CUDA Toolkit 12.6に強く依存している可能性があります。
    • 特に torch は CUDA toolkit とバイナリ一致が求められる。

nvcc -V で 12.0 と出ていても、仮想環境に CUDA 12.6 対応の PyTorch を明示的にインストールしたことで、正しく動作したということです。

✅ 成功の背景まとめ

項目内容
nvidia-smiドライバ:CUDA 12.8(Windows側)
nvcc -Vツールキット:CUDA 12.0(WSL内)
torch.version.cuda12.6(仮想環境でインストールされたPyTorchが使用)
結果CUDA 12.6指定の仮想環境構築が成功 🎯

これは、PyTorchのビルド済みバイナリが自前のCUDAツールキットを必要とせず、パッケージに同梱されたランタイムで動作するからですね。

✨ ワンポイント解説(深堀り)

Python仮想環境でうまくいった理由:

  • PyTorchの cu126 バージョンは、内部的にCUDAランタイムライブラリをバンドルしているため、
    ホストや nvcc が12.0であっても問題なく動作。
  • nvcc はあくまでコンパイル時に使われるもの。PyTorchの動作は バイナリに同梱されたCUDAランタイムに依存している。
CUDAドライバ vs CUDAツールキットの違い 〜WSL環境でのPyTorch実行の仕組み〜 Windows (ホスト) NVIDIA GPU 物理ハードウェア CUDAドライバ 12.8 (nvidia-smiで確認可能) WSL (Linux) CUDAツールキット 12.0 (nvcc -Vで確認可能) Python仮想環境 PyTorch (CUDA 12.6対応) 内部にCUDAランタイム同梱 torch.version.cuda = 12.6 成功のポイント:PyTorchは自前のCUDAランタイムを使用するため、ホスト側と互換性がある限り動作します i CUDAドライバ12.8は12.6を後方互換

🧼 もし余裕があれば…

WSL内の /usr/local/cuda が 12.0 のままで問題ないですが、 将来的に nvcc を使ったプロジェクトをビルドする場合は、12.6のツールキットにしておくと一致性が取れて安心です。

必要ならこのコマンドで切り替えできます:

sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.6 1
sudo update-alternatives --set cuda /usr/local/cuda-12.6

🔍 WSLでは /usr/local/cuda が必ずあるとは限りません

理由:

  1. WSL2では ホスト側(Windows)のCUDAドライバが共有されており、
  2. 明示的に WSL内でCUDA Toolkitをインストールしていなければ、 → /usr/local/cuda は作成されません。

✅ 現在の私の状態(成功パターン)

状態説明
/usr/local/cuda がないCUDA Toolkit 未インストール(問題なし)
nvcc は12.0(おそらく apt でインストールされた)古いが今回は未使用なのでOK
PyTorchは cu126 バージョンでインストール済み→ 自前でランタイムを持っているのでOK

🚫 何もしなくてOKなケース

  • 私のように Pythonの仮想環境に cu126 バージョンを入れてうまく動いているなら、
    /usr/local/cuda がなくても全く問題ありません

⚙ もし /usr/local/cuda が必要になるケース(将来的に)

  • nvcc を使って独自に .cu ファイルをビルドするプロジェクト
  • TensorRTやカスタムCUDA拡張を使う場合
  • ある種のCMakeプロジェクトで find_package(CUDA) を使うもの

その場合は、CUDA Toolkit(例:12.6)をWSL内に手動インストールする必要があります。

結論から先に言うと図のような理由でインストールは成功しました。

CUDAアーキテクチャと互換性の図解 Windows ホスト環境 CUDAドライバー 12.8 (後方互換性あり: 12.6, 12.0も実行可能) WSL2 環境 CUDA Toolkit 12.0 (nvcc -V で確認) /usr/local/cuda (存在しない場合も多い) Python 仮想環境 PyTorch (cu126バージョン) 重要なポイント PyTorchのcu126は内部に 必要なCUDAランタイムを 同梱している 成功の鍵 実行時はドライバーの 互換性のみが重要

🧪 実際にFramePackをインストールして試してみる

ここからは、実際に FramePack をセットアップし、CUDAのバージョン確認や仮想環境構築を通して実践的に整理していきます。

FramePack vs 従来の動画生成技術: 比較表 次フレーム予測アーキテクチャによる革新的アプローチ 特徴/指標 FramePack 従来の動画生成モデル 必要VRAM 最小6GB 通常12GB〜24GB以上 動画長と計算量の関係 一定(長さに依存しない) 線形増加(長さに比例) 生成アプローチ 次フレームセクション予測 全フレーム同時生成 最大生成可能フレーム数 1800フレーム(60秒@30fps) 通常16〜256フレーム 生成中の可視化 リアルタイム段階的プレビュー 最終結果のみ(中間過程なし) モデルサイズ 13Bで効率的に動作 小型〜中型モデルが主流 ※ TeaCacheを有効にすると生成速度が約1.7倍向上(品質とのトレードオフあり)

🧾 プロジェクトのクローン

まずは、FramePack の公式リポジトリをクローンします。

git clone https://github.com/lllyasviel/FramePack

ここでは VSCode を使って進めます。
通常のターミナル操作(cd FramePack など)も可能ですが、VSCodeの場合は「ファイル → フォルダを開く」から FramePack フォルダを直接開くのが便利です。

ファイルや構成が視覚的に見えるので、プロジェクトの全体像が把握しやすくなります。

WSL上でCLIだけを使っている方は、cd FramePack で移動してもOKです。

🐍 Pythonバージョンの確認と仮想環境の準備

FramePack の公式は Python 3.10.x を推奨しています。
幸い、pyenv が導入済みであれば簡単に対応可能です。

pyenv についての詳細はこちらの記事でも解説しています:
👉 PyenvとVSCodeの連携
👉 pyenvの基礎と導入

まず、現在のPythonバージョンを確認してみましょう。

python -V

出力例:

Python 3.12.0

→ 現時点では、FramePackの推奨バージョン(3.10.x)ではありません。

📦 仮想環境の作成:なぜ必要か?

仮想環境を使う理由はいくつかあります:

  • WSL環境が複数のプロジェクトで汚染されるのを防ぐ
  • プロジェクトごとに Pythonのバージョンやパッケージ構成を完全に分離できる
  • バージョンや依存関係のトラブルを未然に防止

とくにWSLを長く使っていると、環境が「ぐちゃぐちゃ」になることがあります。
そんな時に 仮想環境が“お掃除部屋”のような役割を果たしてくれます。

🖼 VSCodeで仮想環境をGUI感覚で作成する方法

VSCodeには仮想環境作成機能が組み込まれており、GUI的な操作で進めることができます。

  1. 上部コマンドパレットで「>」を入力(または Ctrl + Shift + P
  2. Python: 環境の作成... を選択
  3. Venv を選択
  4. Python 3.10.6 を選択(pyenv経由)

この手順により、プロジェクト直下に .venv ディレクトリが作成され、仮想環境が初期化されます。

🧪 バージョン確認と仮想環境の有効化

仮想環境を作成した直後に python -V を実行しても、まだ以下のように表示されます。

Python 3.12.0

これは、仮想環境がまだ有効化されていないためです。

以下のコマンドで仮想環境を有効化しましょう:

source .venv/bin/activate

すると次のようにプロンプトが変わり、

(.venv) $

再度確認すると、Pythonのバージョンが仮想環境に切り替わっていることがわかります。

Python 3.10.6

なお、pyenv local などを使っていない限り、.python-version ファイルは自動的には作成されません。

🛠 CLI派の方へ:コマンドだけで仮想環境を作るには?

VSCodeを使っていない場合や、あえて手動で操作したい場合は以下でも同じ効果が得られます。

python -m venv .venv

その後は同様に source .venv/bin/activate で仮想環境を有効化してください。

🛠 FramePackを実際に動かしてみる(CUDAバージョンのギャップも検証)

ここからは、実際に FramePack をインストールし、動作確認を行います。
ホストがCUDA 12.8で、WSLがCUDA 12.0という状況でも動作することを実証しながら、仮想環境の有用性も改めて見ていきます。

① PyTorch(CUDA 12.6対応ビルド)のインストール

FramePack の公式リポジトリでは、以下のように CUDA 12.6 向けのPyTorchをインストールするように案内されています。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

ここがとても重要なポイントです。

🔍 この指定により、CUDA 12.6 に最適化された PyTorch のバイナリがインストールされます。
たとえWSL側の nvcc が古く(CUDA 12.0など)ても、PyTorch内部に同梱されたCUDAランタイムが使われるため、動作には支障がありません。

この時点で、ホスト(Windows)がCUDA 12.8、WSLが12.0でも正常にセットアップできることが分かります。

② その他の依存パッケージをインストール

クローンしたFramePackのルートディレクトリに移動し、以下のコマンドで依存関係をまとめてインストールします。

pip install -r requirements.txt

⚠️ PyTorchとは別にGradioや画像処理系など多くのライブラリがインストールされます。最初の仮想環境作成時点でインストールしておくことで、システム環境を汚さずに済みます。

③ スクリプト実行と初回起動

以下のコマンドでGUIを起動します。

python demo_gradio.py

④ 実行時の出力例(初回)

Currently enabled native sdp backends: [‘flash’, ‘math’, ‘mem_efficient’, ‘cudnn’]
Xformers is not installed!
Flash Attn is not installed!
Sage Attn is not installed!
Namespace(share=False, server=’0.0.0.0′, port=None, inbrowser=False)
Free VRAM 6.9326171875 GB
High-VRAM Mode: False

また、モデルのダウンロード(30GB以上) が始まるため、ネットワークとストレージに十分な空きが必要です。

❓ Xformers・Flash Attn・Sage Attnとは?

実行ログに登場するこれらのAttention最適化ライブラリについても触れておきましょう。

ライブラリ用途備考
Xformers軽量で高速なSelf-Attention安定して動作しやすく、多くのモデルで使われる
Flash AttnGPU最適化による高速・省メモリ計算A100等の高性能GPUで特に効果が大きい
Sage Attn低VRAM対応の試験的Attention結果が変化する可能性あり注意

💡 結論として:FramePackはこれらが未インストールでも問題なく起動・生成可能です。
ただし、VRAMや生成速度を改善したい場合には、あとから導入して比較してみるのも良いでしょう。

🌐 GUIの起動とブラウザ表示

起動後、以下のように Gradio のUIが自動または手動で開けます。

  • 自動でブラウザが開かない場合 → http://localhost:7860 にアクセス
  • WSLの場合 → http://127.0.0.1:7860 で同様にアクセス可能

🎉 動作確認完了!

この実践により、以下のことが確認できました:

  • ✅ ホストとWSLでCUDAバージョンが異なっていても、正しいPyTorchビルドを使えば動作する
  • ✅ 仮想環境を使えば、依存関係やバージョンの汚染を防ぎながら安全に実行できる
  • ✅ FramePackは、追加ライブラリがなくてもすぐに試せる状態で提供されている
FramePack: 画像から動画生成の次世代技術 次フレーム予測モデルによる効率的な動画生成アーキテクチャ 主要コンセプト 入力画像 FramePack 次フレーム 予測モデル 生成動画 技術的特徴 コンテキスト圧縮型設計 セクション単位で段階的拡張 最小6GB VRAMで実行可能 最大60秒・1800フレーム生成 動画長に依存しない計算量 13Bモデルでも高速処理 画像生成に近い学習バッチ テキストプロンプト制御 段階的動画生成プロセス 入力画像 セクション1 約1秒 (30フレーム) 最初の生成 セクション2 約2秒 (60フレーム) 拡張生成 セクション3 約3秒 (90フレーム) さらに拡張 最終セクション 設定長まで (〜60秒) 完成

🎬 動画は「1秒ずつ」作っている?いえ、「セクションごとに拡張」しています!

FramePackで初めて動画を生成したとき、多くの人が驚くのが「なかなか動画が完成しない」「1秒だけの動画が何度も出てくる」という現象です。

これは、FramePackの動画生成が特殊な仕組みで行われているためです。

🧠 FramePackの動画生成は「セクションごとに段階的に拡張」

FramePackは「next-frame-section prediction model」という構造を採用しており、
動画を数フレームずつ、セクション単位で少しずつ生成・拡張していく仕組みになっています。

📋 実際に実行したときのログ(抜粋)

以下は、実際に5秒動画を生成したときの python demo_gradio.py 実行中に表示されたログの一部です。

🔽 ターミナルに表示された実際の内容

Currently enabled native sdp backends: [‘flash’, ‘math’, ‘mem_efficient’, ‘cudnn’]
Xformers is not installed!
Flash Attn is not installed!
Sage Attn is not installed!
Namespace(share=False, server=’0.0.0.0′, port=None, inbrowser=False)
Free VRAM 6.9326171875 GB
High-VRAM Mode: False
Downloading shards: 100%|█████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 33091.16it/s] Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 9.42it/s] Fetching 3 files: 100%|███████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 35645.64it/s] Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 11.46it/s] transformer.high_quality_fp32_output_for_inference = True * Running on local URL: http://0.0.0.0:7860To create a public link, set `share=True` in `launch()`. Unloaded DynamicSwap_LlamaModel as complete. Unloaded CLIPTextModel as complete. Unloaded SiglipVisionModel as complete. Unloaded AutoencoderKLHunyuanVideo as complete. Unloaded DynamicSwap_HunyuanVideoTransformer3DModelPacked as complete. Loaded CLIPTextModel to cuda:0 as complete. Unloaded CLIPTextModel as complete. Loaded AutoencoderKLHunyuanVideo to cuda:0 as complete. Unloaded AutoencoderKLHunyuanVideo as complete. Loaded SiglipVisionModel to cuda:0 as complete. latent_padding_size = 27, is_last_section = False Unloaded SiglipVisionModel as complete. Moving DynamicSwap_HunyuanVideoTransformer3DModelPacked to cuda:0 with preserved memory: 6 GB 100%|██████████████████████████████████████████████████████████████████████████████████| 25/25 [05:01<00:00, 12.07s/it] Offloading DynamicSwap_HunyuanVideoTransformer3DModelPacked from cuda:0 to preserve memory: 8 GB Loaded AutoencoderKLHunyuanVideo to cuda:0 as complete. Unloaded AutoencoderKLHunyuanVideo as complete. Decoded. Current latent shape torch.Size([1, 16, 9, 64, 96]); pixel shape torch.Size([1, 3, 33, 512, 768]) latent_padding_size = 18, is_last_section = False Moving DynamicSwap_HunyuanVideoTransformer3DModelPacked to cuda:0 with preserved memory: 6 GB 100%|██████████████████████████████████████████████████████████████████████████████████| 25/25 [05:18<00:00, 12.75s/it] Offloading DynamicSwap_HunyuanVideoTransformer3DModelPacked from cuda:0 to preserve memory: 8 GB Loaded AutoencoderKLHunyuanVideo to cuda:0 as complete. Unloaded AutoencoderKLHunyuanVideo as complete. Decoded. Current latent shape torch.Size([1, 16, 18, 64, 96]); pixel shape torch.Size([1, 3, 69, 512, 768]) latent_padding_size = 9, is_last_section = False Moving DynamicSwap_HunyuanVideoTransformer3DModelPacked to cuda:0 with preserved memory: 6 GB 100%|██████████████████████████████████████████████████████████████████████████████████| 25/25 [05:16<00:00, 12.66s/it] Offloading DynamicSwap_HunyuanVideoTransformer3DModelPacked from cuda:0 to preserve memory: 8 GB Loaded AutoencoderKLHunyuanVideo to cuda:0 as complete. Unloaded AutoencoderKLHunyuanVideo as complete. Decoded. Current latent shape torch.Size([1, 16, 27, 64, 96]); pixel shape torch.Size([1, 3, 105, 512, 768]) latent_padding_size = 0, is_last_section = True Moving DynamicSwap_HunyuanVideoTransformer3DModelPacked to cuda:0 with preserved memory: 6 GB 100%|██████████████████████████████████████████████████████████████████████████████████| 25/25 [05:17<00:00, 12.69s/it] Offloading DynamicSwap_HunyuanVideoTransformer3DModelPacked from cuda:0 to preserve memory: 8 GB Loaded AutoencoderKLHunyuanVideo to cuda:0 as complete. Unloaded AutoencoderKLHunyuanVideo as complete.

🔍 ログから読み取れる「セクション拡張」の流れ

ログを読むと、次のような情報が確認できます。

Decoded. Current latent shape torch.Size([1, 16, 9, 64, 96]); pixel shape torch.Size([1, 3, 33, 512, 768])
...
Decoded. Current latent shape torch.Size([1, 16, 18, 64, 96]); pixel shape torch.Size([1, 3, 69, 512, 768])
...
Decoded. Current latent shape torch.Size([1, 16, 27, 64, 96]); pixel shape torch.Size([1, 3, 105, 512, 768])
  • latent shapepixel shape のフレーム数が 33 → 69 → 105 と増加していることがわかります。
  • これは、少しずつ動画を長くしているということです。
  • is_last_section = True と出たタイミングで、ようやく動画生成が完了します。

📈 表で見る生成の推移

セクションpixel shape(フレーム数)おおよその秒数(30fps換算)
1回目33フレーム約1.1秒
2回目69フレーム約2.3秒
3回目105フレーム約3.5秒
最終回(最終セクションで5秒まで)約150フレーム

💡 結論:「1秒動画を繰り返している」のではない

FramePackは「1秒の動画を何度も生成している」のではなく、1本の動画をセクションごとに拡張しているということになります。

FramePackの動画生成プロセス:「セクションごとの拡張」方式 動画は1秒ずつ作ってつなげるのではなく、セクション単位で拡張していきます セクション1 33フレーム セクション2 69フレーム セクション3 105フレーム 動画の拡張 動画の拡張 動画の拡張 完成動画 最初のセクション 第2セクション追加 第3セクション追加 完成動画

この図では、FramePackの動画生成プロセスにおける「セクションごとの拡張」方式を視覚化しました。従来の「1秒ずつ作ってつなげる」方式とは根本的に異なる仕組みがわかります。

主なポイントは:

  1. 最初のセクション:まず33フレーム(約1秒程度)の短い動画を生成します
  2. 段階的な拡張:その後、既存のフレームを基に新しいフレームを追加し、69フレーム、さらに105フレームと拡張していきます
  3. 一貫した流れ:動画は個別のセクションを作って後からつなげるのではなく、先行するフレームの文脈を考慮しながら連続的に拡張されます

この「next-frame-section prediction model」と呼ばれる方式により、動画全体の一貫性が保たれ、自然な流れの映像が生成されます。そのため、ユーザーからは「1秒だけの動画が何度も出てくる」ように見え、完成までに時間がかかるように感じるのです。

🎯 なぜこういう仕組みなのか?

この構造には、以下のような実用的な理由があります。

  • VRAMが限られていても長い動画を作れる
  • 途中段階でプレビューが可能
  • セクション単位で最適化(メモリのオンオフロードなど)ができる

この段階的な生成によって、13Bの大規模モデルでもノートPCで5秒動画が生成可能という驚異の効率性が実現されています。

✅ 少ないGPUメモリでも動くが、多いほうが圧倒的に有利です

📈 理由をまとめるとこうなります:

項目少ないメモリ(例:8GB)多いメモリ(例:24GB, 48GB)
動作✅ 可能(FramePackはかなり最適化されている)✅ 当然可能
速度⏳ 遅い(推論で時間がかかる。1フレーム数秒〜10秒)⚡ 速い(1フレーム1秒未満も可能)
ステップごとの処理メモリ節約のため逐次ロード/オフロードが必要ほぼ全モデルを常時メモリ展開可能
VRAM解放・再読み込み頻発する(「Moving…」「Offloading…」のログが大量に出る)ほとんど発生しない
長尺動画(60秒以上)厳しい。分割して生成が必要余裕で対応可能
エラー発生リスク高い(Out of Memoryが起きやすい)低い(安定動作)

🧠 FramePackの内部挙動(ログからもわかる)

たとえば先ほどのログでも:

Offloading DynamicSwap_HunyuanVideoTransformer3DModelPacked from cuda:0 to preserve memory: 8 GB

このように、「メモリを守るためにモデルをオフロード→オンロードを繰り返す」挙動が頻繁に出ていましたね。
これが「時間がかかる原因」そのものです。

🛠 ブラウザから変更できる生成設定の意味(Gradio UI解説)

FramePackでは、動画生成前にブラウザ上で直感的に設定を変更できます。
以下はその設定項目と意味を解説したものです(※画像参照)。

✅ 各項目の説明

項目名説明
Use TeaCache生成速度を高速化するキャッシュ機能。VRAMの節約と速度向上に効果があるが、手や指の描画精度が下がることがある。まずはONで試し、結果に満足できなければOFFも検討。
Seedランダム生成の元となる数値。同じSeedを使えば、同じプロンプト・設定でほぼ同じ動画を再生成できる。再現性を持たせたいときに便利。
Total Video Length (Seconds)生成する動画の長さ(秒単位)。最大120秒まで指定可能。まずは5〜20秒で試すのが安全。
Steps1セクションあたりのステップ数。デフォルトのままでよく、「変更非推奨」とされている。増やすと品質向上の可能性はあるが、計算時間とVRAM負荷が大幅に増える。
Distilled CFG Scaleプロンプトにどれだけ忠実に従うかの指標。値が大きいほど強く従うが、不自然な動きや破綻の原因にもなりうる。10程度がバランス良好。
GPU Inference Preserved Memory (GB)動作中に確保しておくVRAMの量(デフォルト:6GB)。これより大きい値にすると安定性は上がるが、速度が遅くなる。VRAMに余裕がある場合は増やしてよい。
MP4 Compression動画出力の圧縮率。0 だと非圧縮で最高画質、16 だと最も圧縮される(サイズが小さいが画質が下がる)。生成結果が黒くなる場合、16に設定するのが推奨とされている。
FramePack ユーザーガイド: 効果的な設定と使い方 高品質な動画生成のためのステップバイステップガイド インストールガイド Windows 1. ワンクリックパッケージをダウンロード 2. update.bat を実行 3. run.bat で起動 Linux 1. Python 3.10をインストール 2. 依存パッケージをインストール 3. python demo_gradio.py で起動 推奨動作環境 GPU要件 • NVIDIA RTX 30XX/40XX/50XX • 最小6GB VRAM • fp16/bf16サポート必須 処理速度 • RTX 4090: 約1.5秒/フレーム(TeaCache有効時) • ノートPC: 4〜8倍遅い • 60秒動画: 約45-120分 効果的なプロンプト作成 「主語 + 動作 + その他の詳細」の順で簡潔に記述 良い例 「The girl dances gracefully, with clear movements, full of charm.」 ポイント • ダイナミックな動きを優先 • 人物がいる場合はダンスを推奨 • 簡潔な表現を心がける おすすめ設定 TeaCache • テスト時はON (高速) • 最終出力時はOFF (高品質) 動画長・ステップ数 • 初回は5〜20秒推奨 • ステップ数はデフォルト推奨 CFG Scale • 推奨値: 10 • 値が高いとプロンプト忠実性↑ MP4圧縮 • 高品質: 0〜4 • 黒い結果の場合: 16に設定 生成プロセスの理解 重要: FramePackは「次フレームセクション予測」方式を採用 最初は短い動画(1〜2秒)が表示され、順次延長されていきます。完全な動画が表示されるまで待ちましょう。 進捗バーはセクションごとに表示され、次のセクションのプレビューも確認できます。

💡 実践ポイント

長さは5〜20秒あたりがVRAM消費・生成時間のバランスが良い

まずは TeaCacheをONにして試す(結果が悪ければOFFにする)

Seedを固定すれば実験・比較が簡単になる

✅ nvcc は不要か?

この demo_gradio.py を見た限り、プロジェクトは:

  • diffusers 系モデル(Hugging Face Transformers + Diffusers)
  • PyTorch(torch) の from_pretrained() を通じてモデルを読み込み
  • 推論中の計算(transformer(...)vae_decode(...))をGPU上で実行

という構成で、

⛔ 独自の CUDA カーネル(.cuファイル)を一切使っていません。

したがって:

  • nvcc/usr/local/cuda はこのスクリプトでは一度も参照されていません
  • 必要なのは PyTorchがCUDA対応していることと、GPUドライバが正常に使えること

✅ 実行環境として本当に必要なもの

必須項目内容
GPUドライバ(Windows側)CUDA 12.6以上(現環境は12.8)
WSL内のPyTorchCUDA 12.6対応(cu126)バージョンを使っていてOK
CUDA Toolkit(nvccや /usr/local/cuda)必要なし(このプロジェクトは使ってない)

🔍 nvcc があった理由

WSLで nvcc -V が使えたのは、過去に nvidia-cuda-toolkit をインストールした可能性があります。
これは完全に 開発者向けであって、推論(inference)目的には不要です。

🧼 まとめ

  • ✅ このプロジェクトは CUDA Toolkit 不要、nvcc も使わない
  • ✅ PyTorch に CUDA バージョンがマッチしていれば問題なし
  • ✅ 今の構成で動作しているなら そのままでOK
  • /usr/local/cuda がないことは気にしなくてよい

ただし、

「WSL側ではCUDA Toolkitは不要でも、Windowsホスト側にはCUDAドライバ(とそれに紐づくランタイム)は絶対に必要」です。

✅ 理由:WSL2はGPUを直接持っていない

WSL2では GPU を自分で制御していません。代わりに:

WSL2側の動作実際の実行先
PyTorchなどの .to(“cuda”)→ Windowsホスト側のGPUドライバに依存
nvidia-smi→ Windowsにインストールされた NVIDIAドライバから情報取得
PyTorch CUDAバージョン→ ホストと整合性のあるバージョンが必要

🧠 補足:必要なもの(ホスト側)

必要項目理由
NVIDIA GPU Driver (CUDA 12.6+が望ましい)WSLにCUDA機能を提供
WSL用 GPUサポート機能Windowsの driver バージョンが 465.21+ 以降であればOK(WSL2 GPUサポート対応)
PyTorch(WSL側)対応する CUDA バージョンのビルドを使う必要あり

今回のように WindowsでCUDA 12.8 → WSL2でPyTorch cu126 のように設定すれば完璧です。

🔧 チェックリスト(Windows側に必要なもの)

# PowerShell などで確認
nvidia-smi

これでバージョンが表示されることが必須です(12.6以上ならPyTorch cu126に対応)。

✅ まとめ

  • 🟢 WSL2では /usr/local/cudanvcc は不要
  • 🟢 しかしWindowsホストには適切なバージョンの CUDAドライバが必要
  • 🔧 ドライバが古いと WSL内からGPUが見えない/CUDAが使えない

⚠️ 注意:WSLでファイルを削除しても容量は回復しません

FramePackでは、モデルや中間ファイルで数十GBのデータを扱うことがあります。
一度インストールしたファイルを削除しても、WSL2ではディスク容量が自動的に戻らないという落とし穴があります。

とくに以下のような操作を繰り返していると:

  • モデルを何度も再ダウンロード
  • 動画ファイルを大量生成&削除

WSLの仮想ディスクが肥大化して、Cドライブを圧迫する危険性があります。

この対処法については以下の記事で詳しく解説しています:

👉 WSLの容量が減らない?.vhdxファイルを縮小する方法

さらにこれが出来ない方に送るWSLの余分なファイルを削除する自動スクリプトを以下の記事で紹介しております。

👉 WSLの容量が確保自動スクリプトの記事

タイトルとURLをコピーしました