CogVideo/sat/README_ja.md
2024-08-13 12:01:46 +08:00

7.8 KiB

SAT CogVideoX-2B

Read this in English.

中文阅读

このフォルダには、SAT ウェイトを使用した推論コードと、SAT ウェイトのファインチューニングコードが含まれています。

このコードは、チームがモデルをトレーニングするために使用したフレームワークです。コメントが少なく、注意深く研究する必要があります。

推論モデル

  1. このフォルダに必要な依存関係が正しくインストールされていることを確認してください。
pip install -r requirements.txt
  1. モデルウェイトをダウンロードします

まず、SAT ミラーにアクセスして依存関係をダウンロードします。

mkdir CogVideoX-2b-sat
cd CogVideoX-2b-sat
wget https://cloud.tsinghua.edu.cn/f/fdba7608a49c463ba754/?dl=1
mv 'index.html?dl=1' vae.zip
unzip vae.zip
wget https://cloud.tsinghua.edu.cn/f/556a3e1329e74f1bac45/?dl=1
mv 'index.html?dl=1' transformer.zip
unzip transformer.zip

次に解凍し、モデル構造は次のようになります:

.
├── transformer
│   ├── 1000
│   │   └── mp_rank_00_model_states.pt
│   └── latest
└── vae
    └── 3d-vae.pt

次に、T5 モデルをクローンします。これはトレーニングやファインチューニングには使用されませんが、使用する必要があります。

git clone https://huggingface.co/THUDM/CogVideoX-2b.git
mkdir t5-v1_1-xxl
mv CogVideoX-2b/text_encoder/* CogVideoX-2b/tokenizer/* t5-v1_1-xxl

上記の方法に従うことで、safetensor 形式の T5 ファイルを取得できます。これにより、Deepspeed でのファインチューニング中にエラーが発生しないようにします。

├── added_tokens.json
├── config.json
├── model-00001-of-00002.safetensors
├── model-00002-of-00002.safetensors
├── model.safetensors.index.json
├── special_tokens_map.json
├── spiece.model
└── tokenizer_config.json

0 directories, 8 files
  1. configs/cogvideox_2b_infer.yaml ファイルを変更します。
load: "{your_CogVideoX-2b-sat_path}/transformer" ## Transformer モデルパス

conditioner_config:
  target: sgm.modules.GeneralConditioner
  params:
    emb_models:
      - is_trainable: false
        input_key: txt
        ucg_rate: 0.1
        target: sgm.modules.encoders.modules.FrozenT5Embedder
        params:
          model_dir: "google/t5-v1_1-xxl" ## T5 モデルパス
          max_length: 226

first_stage_config:
  target: sgm.models.autoencoder.VideoAutoencoderInferenceWrapper
  params:
    cp_size: 1
    ckpt_path: "{your_CogVideoX-2b-sat_path}/vae/3d-vae.pt" ## VAE モデルパス
  • 複数のプロンプトを保存するために txt を使用する場合は、configs/test.txt を参照して変更してください。1行に1つのプロンプトを記述します。プロンプトの書き方がわからない場合は、最初に このコード を使用して LLM によるリファインメントを呼び出すことができます。
  • コマンドラインを入力として使用する場合は、次のように変更します。
input_type: cli

これにより、コマンドラインからプロンプトを入力できます。

出力ビデオのディレクトリを変更したい場合は、次のように変更できます:

output_dir: outputs/

デフォルトでは .outputs/ フォルダに保存されます。

  1. 推論コードを実行して推論を開始します。
bash inference.sh

モデルのファインチューニング

環境の準備

ご注意ください、現在、SATを正常にファインチューニングするためには、ソースコードからインストールする必要があります。 これは、まだpipパッケージバージョンにリリースされていない最新の機能を使用する必要があるためです。この問題は、今後の安定版で解決する予定です。

git clone https://github.com/THUDM/SwissArmyTransformer.git
cd SwissArmyTransformer
pip install -e .

データセットの準備

データセットの形式は次のようになります:

.
├── labels
│   ├── 1.txt
│   ├── 2.txt
│   ├── ...
└── videos
    ├── 1.mp4
    ├── 2.mp4
    ├── ...

各 txt ファイルは対応するビデオファイルと同じ名前であり、そのビデオのラベルを含んでいます。各ビデオはラベルと一対一で対応する必要があります。通常、1つのビデオに複数のラベルを持たせることはありません。

スタイルファインチューニングの場合、少なくとも50本のスタイルが似たビデオとラベルを準備し、フィッティングを容易にします。

設定ファイルの変更

Lora と 全パラメータファインチューニングの2つの方法をサポートしています。これらのファインチューニング方法は transformer 部分にのみ適用されます。VAE 部分は変更されません。T5 はエンコーダーとしてのみ使用されます。

configs/cogvideox_2b_sft.yaml (全量ファインチューニング用) を次のように変更します。

  # checkpoint_activations: True ## using gradient checkpointing (設定ファイル内の2つのcheckpoint_activationsを両方Trueに設定する必要があります)
  model_parallel_size: 1 # モデル並列サイズ
  experiment_name: lora-disney  # 実験名 (変更しないでください)
  mode: finetune # モード (変更しないでください)
  load: "{your_CogVideoX-2b-sat_path}/transformer" # Transformer モデルパス
  no_load_rng: True # ランダムシードをロードするかどうか
  train_iters: 1000 # トレーニングイテレーション数
  eval_iters: 1 # 評価イテレーション数
  eval_interval: 100 # 評価間隔
  eval_batch_size: 1 # 評価のバッチサイズ
  save: ckpts # モデル保存パス
  save_interval: 100 # モデル保存間隔
  log_interval: 20 # ログ出力間隔
  train_data: [ "your train data path" ]
  valid_data: [ "your val data path" ] # トレーニングセットと検証セットは同じでもかまいません
  split: 1,0,0 # トレーニングセット、検証セット、テストセットの比率
  num_workers: 8 # データローダーのワーカースレッド数
  force_train: True # ckpt をロードする際に missing keys を許可するかどうか (T5 と VAE は独立してロードされます)
  only_log_video_latents: True # VAE デコーダーを使用しないようにしてメモリを節約します

Lora ファインチューニングを使用する場合は、次のように変更する必要があります:

model:
  scale_factor: 1.15258426
  disable_first_stage_autocast: true
  not_trainable_prefixes: [ 'all' ] ## コメント解除
  log_keys:
    - txt'

  lora_config: ## コメント解除
    target: sat.model.finetune.lora2.LoraMixin
    params:
      r: 256

ファインチューニングと検証

  1. 推論コードを実行してファインチューニングを開始します。
bash finetune_single_gpu.sh # Single GPU
bash finetune_multi_gpus.sh # Multi GPUs

Huggingface Diffusers サポートのウェイトに変換

SAT ウェイト形式は Huggingface のウェイト形式と異なり、変換が必要です。次のコマンドを実行してください:

python ../tools/convert_weight_sat2hf.py

注意:この内容は LORA ファインチューニングモデルではまだテストされていません。