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)
これで、以下のコマンドで動画が四つ生成されます。
$ bash inference.sh
configs/test.txtを変更すると違うプロンプトで動画作成することができます。
2BモデルはVRAM消費量は20GBくらいなので4090でも生成ができそうです。
ただし最終的にはファインチューニングすることが目標なので学習時にはもっとVRAMが必要になるでしょう。
Comentários