top of page
スクリーンショット 2024-01-25 15.42.00.png
  • 執筆者の写真Ryo Shimizu

CogVideoXによる動画生成

CogVideoはオープンソースで非常に安定した出力をする動画生成AIです。



これを弊社の社長で動作させれば、弊社の社長は動画生成する能力を身につけることができます。


また、将来的には動画そのものを生成する能力を獲得することかできるようになるでしょう。


そこで、ファインチューニングを前提に、まずは動画生成をする方法を試してみました。


CogVideoによる動画生成はオフィシャルに日本語の解説もありますが、いくつか罠がありました。



まずは、CogVideoのリポジトリをクローンします。ここは公式通りです。


$ git clone https://github.com/THUDM/CogVideo.git
$ cd CogVideo/sat
$ pip install -r requirements.txt
$ 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
$ cd ..

さらに、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

問題は次です。

configs/cogvideox_2b.yamlを改造するのですが、公式ドキュメントだとどこを改造するのか分かりにくくなっています。


具体的にはパスだけです。


  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: "{absolute_path/to/your/t5-v1_1-xxl}/t5-v1_1-xxl" # Absolute path to the CogVideoX-2b/t5-v1_1-xxl weights folder
            max_length: 226

  first_stage_config:
    target: vae_modules.autoencoder.VideoAutoencoderInferenceWrapper
    params:
      cp_size: 1
      ckpt_path: "{absolute_path/to/your/t5-v1_1-xxl}/CogVideoX-2b-sat/vae/3d-vae.pt" # Absolute path to the CogVideoX-2b-sat/vae/3d-vae.pt folder
      ignore_keys: [ 'loss' ]

変更が必要なのは黄色で示した部分のパスだけです。

続いてconfigs/inference.yamlの変更点もパスだけです。


args:
  latent_channels: 16
  mode: inference
  load: "{absolute_path/to/your}/transformer" # Absolute path to the CogVideoX-2b-sat/transformer folder

これも先ほどダウンロードしたtransformerのディレクトリのパスを指定します。


今回はまず練習なので2Bモデルをやります。

2Bモデルの場合、実はinference.shが5Bモデル用なのでこれを改造する必要があります。


#! /bin/bash

echo "CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"

environs="WORLD_SIZE=1 RANK=0 LOCAL_RANK=0 LOCAL_WORLD_SIZE=1"

run_cmd="$environs python sample_video.py --base configs/cogvideox_2b.yaml configs/inference.yaml --seed $RANDOM"

echo ${run_cmd}
eval ${run_cmd}

echo "DONE on `hostname`"

cogvideox_5b.yamlをcogvideox_2b.yamlに変更するだけです。


次に、そのままのコードでは(なぜか)エラーが出て動画が生成できませんでした。 CUDAデバイスとCPUのデータが混じってしまうというエラーです。

根本的な原因追求は面倒なので、とりあえず本体を改造して解決します。


CogVideo/sat/sgm/modules/encoders/modules.pyの276行以降を以下のように変更します。

        tokens = batch_encoding["input_ids"].to(self.device)
276         with torch.autocast("cuda", enabled=False):
277             self.transformer=self.transformer.to("cuda")
288             
289             outputs = self.transformer(input_ids=tokens)
290         z = outputs.last_hidden_state
291         return z
292
293     def encode(self, text):
294         return self(text)

これで、以下のコマンドで動画が四つ生成されます。






configs/test.txtを変更すると違うプロンプトで動画作成することができます。








2BモデルはVRAM消費量は20GBくらいなので4090でも生成ができそうです。

ただし最終的にはファインチューニングすることが目標なので学習時にはもっとVRAMが必要になるでしょう。






閲覧数:116回

最新記事

すべて表示

Comments


bottom of page