Skip to content

Sana Video クイックスタート

この例では、Sana Video 2B 480pモデルをトレーニングします。

ハードウェア要件

Sana VideoはWanオートエンコーダを使用し、デフォルトで480pの81フレームシーケンスを処理します。メモリ使用量は他のビデオモデルと同等であることを予想してください。Gradient Checkpointingを早めに有効にし、VRAMの余裕を確認した後にのみtrain_batch_sizeを増やしてください。

前提条件

Pythonがインストールされていることを確認してください。SimpleTunerは3.10から3.12で正常に動作します。

以下のコマンドを実行して確認できます:

python --version

Ubuntuでpython 3.12がインストールされていない場合は、以下を試してください:

apt -y install python3.13 python3.13-venv

コンテナイメージの依存関係

Vast、RunPod、TensorDock(など)の場合、CUDA 12.2-12.8イメージでCUDA拡張のコンパイルを有効にするには以下が機能します:

apt -y install nvidia-cuda-toolkit

インストール

SimpleTunerをpip経由でインストール:

pip install 'simpletuner[cuda]'

# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130

手動インストールまたは開発セットアップについては、インストールドキュメントを参照してください。

環境のセットアップ

SimpleTunerを実行するには、設定ファイル、データセットとモデルのディレクトリ、およびデータローダー設定ファイルをセットアップする必要があります。

設定ファイル

実験的なスクリプトconfigure.pyを使用すると、インタラクティブなステップバイステップの設定を通じて、このセクションを完全にスキップできる可能性があります。これには、一般的な落とし穴を回避するのに役立つセーフティ機能が含まれています。

注意: これはデータローダーを設定しません。後で手動で設定する必要があります。

実行するには:

simpletuner configure

⚠️ Hugging Face Hubに容易にアクセスできない国にいるユーザーは、使用している$SHELLに応じて、~/.bashrcまたは~/.zshrcにHF_ENDPOINT=https://hf-mirror.comを追加する必要があります。

手動で設定したい場合:

config/config.json.exampleをconfig/config.jsonにコピー:

cp config/config.json.example config/config.json

そこで、以下の変数を変更する必要がある可能性があります:

  • model_type - fullに設定します。
  • model_family - sanavideoに設定します。
  • pretrained_model_name_or_path - Efficient-Large-Model/SANA-Video_2B_480p_diffusersに設定します。
  • pretrained_vae_model_name_or_path - Efficient-Large-Model/SANA-Video_2B_480p_diffusersに設定します。
  • output_dir - チェックポイントと検証ビデオを保存するディレクトリに設定します。ここではフルパスを使用することをお勧めします。
  • train_batch_size - ビデオトレーニングでは低く始め、VRAM使用量を確認した後にのみ増やしてください。
  • validation_resolution - Sana Videoは480pモデルとして出荷されています。832x480または検証したいアスペクトバケットを使用してください。
  • validation_num_video_frames - デフォルトのサンプラー長に合わせて81に設定します。
  • validation_guidance - Sana Videoの推論時に選択する通常の値を使用します。
  • validation_num_inference_steps - 安定した品質のために約50を使用します。
  • framerate - 省略した場合、Sana Videoはデフォルトで16 fpsになります。データセットに合わせて設定してください。

  • optimizer - 慣れ親しんだオプティマイザを使用できますが、この例ではoptimi-adamwを使用します。

  • mixed_precision - 最も効率的なトレーニング設定にはbf16に設定することをお勧めします。またはno(ただし、より多くのメモリを消費し、遅くなります)。
  • gradient_checkpointing - VRAM使用量を制御するためにこれを有効にします。
  • use_ema - trueに設定すると、メインのトレーニング済みチェックポイントと一緒により滑らかな結果を得るのに大いに役立ちます。

マルチGPUユーザーは、使用するGPUの数を設定する方法についてこのドキュメントを参照してください。

最終的な設定は以下のようになるはずです:

設定例を表示
{
  "resume_from_checkpoint": "latest",
  "quantize_via": "cpu",
  "data_backend_config": "config/sanavideo/multidatabackend.json",
  "seed": 42,
  "output_dir": "output/sanavideo",
  "max_train_steps": 400000,
  "checkpoint_step_interval": 1000,
  "checkpoints_total_limit": 5,
  "tracker_project_name": "video-training",
  "tracker_run_name": "sanavideo-2b-480p",
  "report_to": "wandb",
  "model_type": "full",
  "pretrained_model_name_or_path": "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
  "pretrained_vae_model_name_or_path": "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
  "model_family": "sanavideo",
  "train_batch_size": 1,
  "gradient_checkpointing": true,
  "gradient_accumulation_steps": 1,
  "caption_dropout_probability": 0.1,
  "resolution_type": "pixel_area",
  "resolution": 480,
  "validation_seed": 42,
  "validation_step_interval": 200,
  "validation_resolution": "832x480",
  "validation_negative_prompt": "worst quality, inconsistent motion, blurry, jittery, distorted",
  "validation_guidance": 6.0,
  "validation_num_inference_steps": 50,
  "validation_num_video_frames": 81,
  "validation_prompt": "A short video of a small, fluffy animal exploring a sunny room with soft window light and gentle camera motion.",
  "mixed_precision": "bf16",
  "optimizer": "adamw_bf16",
  "learning_rate": 0.00005,
  "max_grad_norm": 0.0,
  "grad_clip_method": "value",
  "lr_scheduler": "cosine",
  "lr_warmup_steps": 400000,
  "base_model_precision": "bf16",
  "vae_batch_size": 1,
  "compress_disk_cache": true,
  "use_ema": true,
  "ema_validation": "ema_only",
  "ema_update_interval": 2,
  "delete_problematic_images": "true",
  "framerate": 16,
  "validation_prompt_library": false,
  "strict_epoch_limit": false
}

オプション: CREPA temporal regularizer

ビデオでちらつきやサブジェクトのドリフトが見られる場合は、CREPAを有効にしてください: - Training → Loss functionsでCREPAをオンにします。 - 推奨デフォルト: Block Index = 10、Weight = 0.5、Adjacent Distance = 1、Temporal Decay = 1.0。 - VRAMを節約するためにより小さいオプション(dinov2_vits14 + 224)が必要でない限り、デフォルトエンコーダー(dinov2_vitg14、サイズ518)を使用してください。 - 初回実行時にtorch hub経由でDINOv2をダウンロードします。オフラインの場合はキャッシュまたは事前取得してください。 - キャッシュされたlatentsから完全にトレーニングする場合にのみDrop VAE Encoderを切り替えてください。まだピクセルをエンコードしている場合はオフのままにしてください。

高度な実験的機能

高度な実験的詳細を表示 SimpleTunerには、トレーニングの安定性とパフォーマンスを大幅に向上させることができる実験的機能が含まれています。 * **[Scheduled Sampling (Rollout)](../experimental/SCHEDULED_SAMPLING.md):** トレーニング中にモデルが独自の入力を生成できるようにすることで、露出バイアスを減らし、出力品質を向上させます。 > ⚠️ これらの機能はトレーニングの計算オーバーヘッドを増加させます。 #### 検証プロンプト `config/config.json`内には「プライマリ検証プロンプト」があり、これは通常、単一のサブジェクトまたはスタイルに対してトレーニングしているメインのinstance_promptです。さらに、検証中に実行する追加のプロンプトを含むJSONファイルを作成できます。 サンプル設定ファイル`config/user_prompt_library.json.example`には以下の形式が含まれています:
{
  "nickname": "the prompt goes here",
  "another_nickname": "another prompt goes here"
}
ニックネームは検証のファイル名なので、短く、ファイルシステムと互換性のあるものにしてください。 トレーナーをこのプロンプトライブラリに指定するには、`config.json`の末尾に新しい行を追加してTRAINER_EXTRA_ARGSに追加します:
  "--user_prompt_library": "config/user_prompt_library.json",
多様なプロンプトのセットは、モデルがトレーニング中に崩壊しているかどうかを判断するのに役立ちます。この例では、``という単語をサブジェクト名(instance_prompt)に置き換える必要があります。
{
    "anime_<token>": "a breathtaking anime-style video featuring <token>, capturing her essence with vibrant colors, dynamic motion, and expressive storytelling",
    "chef_<token>": "a high-quality, detailed video of <token> as a sous-chef, immersed in the art of culinary creation with captivating close-ups and engaging sequences",
    "just_<token>": "a lifelike and intimate video portrait of <token>, showcasing her unique personality and charm through nuanced movement and expression",
    "cinematic_<token>": "a cinematic, visually stunning video of <token>, emphasizing her dramatic and captivating presence through fluid camera movements and atmospheric effects",
    "elegant_<token>": "an elegant and timeless video portrait of <token>, exuding grace and sophistication with smooth transitions and refined visuals",
    "adventurous_<token>": "a dynamic and adventurous video featuring <token>, captured in an exciting, action-filled sequence that highlights her energy and spirit",
    "mysterious_<token>": "a mysterious and enigmatic video portrait of <token>, shrouded in shadows and intrigue with a narrative that unfolds in subtle, cinematic layers",
    "vintage_<token>": "a vintage-style video of <token>, evoking the charm and nostalgia of a bygone era through sepia tones and period-inspired visual storytelling",
    "artistic_<token>": "an artistic and abstract video representation of <token>, blending creativity with visual storytelling through experimental techniques and fluid visuals",
    "futuristic_<token>": "a futuristic and cutting-edge video portrayal of <token>, set against a backdrop of advanced technology with sleek, high-tech visuals",
    "woman": "a beautifully crafted video portrait of a woman, highlighting her natural beauty and unique features through elegant motion and storytelling",
    "man": "a powerful and striking video portrait of a man, capturing his strength and character with dynamic sequences and compelling visuals",
    "boy": "a playful and spirited video portrait of a boy, capturing youthful energy and innocence through lively scenes and engaging motion",
    "girl": "a charming and vibrant video portrait of a girl, emphasizing her bright personality and joy with colorful visuals and fluid movement",
    "family": "a heartwarming and cohesive family video, showcasing the bonds and connections between loved ones through intimate moments and shared experiences"
}
> ℹ️ Sana Videoはフローマッチングモデルです。短いプロンプトでは、モデルが良い仕事をするのに十分な情報がない可能性があります。できるだけ説明的なプロンプトを使用してください。 #### CLIPスコアトラッキング 現時点では、ビデオモデルトレーニングではこれを有効にすべきではありません。

安定した評価損失

モデルのパフォーマンスをスコアリングするために安定したMSE損失を使用したい場合は、評価損失の設定と解釈に関する情報についてこのドキュメントを参照してください。

検証プレビュー

SimpleTunerは、Tiny AutoEncoderモデルを使用した生成中の中間検証プレビューのストリーミングをサポートしています。これにより、Webhookコールバックを介してリアルタイムで段階的に生成される検証ビデオを確認できます。

有効にするには:

設定例を表示
{
  "validation_preview": true,
  "validation_preview_steps": 1
}

要件:

  • Webhook設定
  • 検証が有効

Tiny AutoEncoderのオーバーヘッドを削減するには、validation_preview_stepsをより高い値(3または5など)に設定します。validation_num_inference_steps=20およびvalidation_preview_steps=5の場合、ステップ5、10、15、20でプレビューフレームを受け取ります。

フローマッチングスケジュール

Sana Videoはチェックポイントからの正規フローマッチングスケジュールを使用します。ユーザー提供のシフトオーバーライドは無視されます。このモデルではflow_schedule_shiftとflow_schedule_auto_shiftを未設定のままにしてください。

量子化モデルトレーニング

精度オプション(bf16、int8、fp8)は設定で利用可能です。ハードウェアに合わせて調整し、不安定性が発生した場合はより高い精度にフォールバックしてください。

データセットの考慮事項

データセットサイズには、処理とトレーニングにかかる計算と時間以外の制限はほとんどありません。

データセットがモデルを効果的にトレーニングするのに十分な大きさであることを確認する必要がありますが、利用可能な計算量に対して大きすぎないようにしてください。

最小データセットサイズはtrain_batch_size * gradient_accumulation_stepsであり、vae_batch_sizeより多い必要があることに注意してください。データセットが小さすぎると使用できません。

ℹ️ サンプルが十分に少ない場合、no samples detected in datasetというメッセージが表示される可能性があります - repeats値を増やすとこの制限を克服できます。

持っているデータセットに応じて、データセットディレクトリとデータローダー設定ファイルを異なる方法でセットアップする必要があります。

この例では、データセットとしてvideo-dataset-disney-organizedを使用します。

以下を含む--data_backend_config(config/multidatabackend.json)ドキュメントを作成します:

設定例を表示
[
  {
    "id": "disney-black-and-white",
    "type": "local",
    "dataset_type": "video",
    "crop": false,
    "resolution": 480,
    "minimum_image_size": 480,
    "maximum_image_size": 480,
    "target_downsample_size": 480,
    "resolution_type": "pixel_area",
    "cache_dir_vae": "cache/vae/sanavideo/disney-black-and-white",
    "instance_data_dir": "datasets/disney-black-and-white",
    "disabled": false,
    "caption_strategy": "textfile",
    "metadata_backend": "discovery",
    "repeats": 0,
    "video": {
        "num_frames": 81,
        "min_frames": 81,
        "bucket_strategy": "aspect_ratio"
    }
  },
  {
    "id": "text-embeds",
    "type": "local",
    "dataset_type": "text_embeds",
    "default": true,
    "cache_dir": "cache/text/sanavideo",
    "disabled": false,
    "write_batch_size": 128
  }
]

caption_strategyオプションと要件については、DATALOADER.mdを参照してください。

  • videoサブセクションには、設定できる以下のキーがあります:
  • num_frames(オプション、int)は、トレーニングするデータのフレーム数です。
  • min_frames(オプション、int)は、トレーニングに考慮されるビデオの最小長を決定します。
  • max_frames(オプション、int)は、トレーニングに考慮されるビデオの最大長を決定します。
  • is_i2v(オプション、bool)は、データセットでi2vトレーニングを行うかどうかを決定します。
  • bucket_strategy(オプション、string)は、ビデオがバケットにグループ化される方法を決定します:
    • aspect_ratio(デフォルト): 空間的アスペクト比のみでグループ化(例: 1.78、0.75)。
    • resolution_frames: 解像度とフレーム数でWxH@F形式でグループ化(例: 832x480@81)。混合解像度/期間データセットに便利です。
  • frame_interval(オプション、int)resolution_framesを使用する場合、フレーム数をこの間隔に丸めます。

次に、datasetsディレクトリを作成します:

mkdir -p datasets
pushd datasets
    huggingface-cli download --repo-type=dataset sayakpaul/video-dataset-disney-organized --local-dir=disney-black-and-white
popd

これにより、すべてのDisneyビデオサンプルがdatasets/disney-black-and-whiteディレクトリにダウンロードされ、自動的に作成されます。

WandBとHuggingface Hubにログイン

特に--push_to_hubと--report_to=wandbを使用している場合は、トレーニングを開始する前にWandBとHF Hubにログインする必要があります。

Git LFSリポジトリに手動でアイテムをプッシュする場合は、git config --global credential.helper storeも実行する必要があります

以下のコマンドを実行します:

wandb login

および

huggingface-cli login

指示に従って両方のサービスにログインします。

トレーニング実行の実行

SimpleTunerディレクトリから、トレーニングを開始するいくつかのオプションがあります:

オプション1(推奨 - pipインストール):

pip install 'simpletuner[cuda]'

# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
simpletuner train

オプション2(Gitクローン方式):

simpletuner train

オプション3(レガシー方式 - まだ機能します):

./train.sh

これにより、テキスト埋め込みとVAE出力のディスクへのキャッシングが開始されます。

詳細については、データローダーおよびチュートリアルドキュメントを参照してください。

注意事項とトラブルシューティングのヒント

検証デフォルト

  • 検証設定が提供されていない場合、Sana Videoはデフォルトで81フレームと16 fpsになります。
  • Wanオートエンコーダパスはベースモデルパスと一致する必要があります。ロード時エラーを回避するためにそれらを揃えておいてください。

マスク損失

被写体またはスタイルをトレーニングしていて、一方または他方をマスクしたい場合は、Dreamboothガイドのマスク損失トレーニングセクションを参照してください。