見出し画像

WSL2(?)でOpenSoraを試してみる

「高品質のビデオを効率的に制作し、モデル、ツール、コンテンツに誰もがアクセスできるようにすることに特化した取り組み」であるOpenSoraを試してみます。

オープンソースの原則を採用することで、OpenSora は高度なビデオ生成技術へのアクセスを民主化するだけでなく、ビデオ制作の複雑さを簡素化する合理化されたユーザーフレンドリーなプラットフォームも提供します。

使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)
・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。
※一部、このPCを使用せずに推論している箇所があります。


1. 準備

venv環境の構築です。

python3 -m venv opensora
cd $_
source bin/activate

続いて、環境変数PATHを変更します。CUDA(nvccコマンド)のバージョンが12.1ではない場合、apexのビルド時にエラーとなるためです。

export PATH=/usr/local/cuda-12.1/bin:$PATH

パッケージをインストールします。

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

pip install wheel
pip install packaging ninja
pip install flash-attn --no-build-isolation

# apex
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext
cd ..

# xformers
pip install -U xformers --index-url https://download.pytorch.org/whl/cu121

プロジェクトをクローンして、インストールです。

git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
pip install -v .
cd ..

2. 推論

提供された重みを使用して推論を実行するには、まず T5 重みを pretrained_models/t5_ckpts/t5-v1_1-xxl にダウンロードします。次に、モデルの重みをダウンロードします。

README.mdより

T5のダウンロード

pythonを立ち上げて、以下を流し込みます。

from huggingface_hub import snapshot_download

REPO_ID = "DeepFloyd/t5-v1_1-xxl"
snapshot_download(
	repo_id=REPO_ID,
	revision="main",
	local_dir="./pretrained_models/t5_ckpts/t5-v1_1-xxl",
	local_dir_use_symlinks=True	
)

./pretrained_models/t5_ckpts/t5-v1_1-xxl ディレクトリにファイルがダウンロードされます。なお、ファイルの実体は $HF_CACHE のディレクトリ(~/.cache/huggingface)の下にあります。

モデルのダウンロード

ここでは ./ckpt ディレクトリにダウンロードします。

wget -P ./ckpt https://huggingface.co/hpcai-tech/Open-Sora/resolve/main/OpenSora-v1-16x256x256.pth
wget -P ./ckpt https://huggingface.co/hpcai-tech/Open-Sora/resolve/main/OpenSora-v1-HQ-16x256x256.pth
wget -P ./ckpt https://huggingface.co/hpcai-tech/Open-Sora/resolve/main/OpenSora-v1-HQ-16x512x512.pth

推論 - 16x256x256

モデル OpenSora-v1-16x256x256(16フレーム、サイズ256x256) を使用して生成します。

# Sample 16x256x256 (5s/sample)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/16x256x256.py --ckpt-path ./ckpt/OpenSora-v1-16x256x256.pth

設定ファイル configs/opensora/inference/16x256x256.py をみるに、
モデル: 引数で指定したチェックポイントファイル
vae: stabilityai/sd-vae-ft-ema
text_encoder: t5_ckpts
という指定でした。

生成されたサンプル(10ファイル)のひとつがこちら。

推論 - HQ-16x256x256


# Sample 16x256x256 (5s/sample)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/16x256x256.py --ckpt-path ./ckpt/OpenSora-v1-HQ-16x256x256.pth

設定ファイルは先ほどと同じ。指定するモデルだけが異なります。

推論 - HQ-16x512x512

# Sample 16x512x512 (20s/sample, 100 time steps)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/16x512x512.py --ckpt-path ./ckpt/OpenSora-v1-HQ-16x512x512.pth

VRAMは溢れ、オフロードしたメモリも溢れそう…。

何度か再試行しましたが、オフロードしたメモリの確保に失敗していて処理が停止しているようです。ざんねん。

A100 80GBで試したところ、53,441MiBまでvram消費していました。

0, 2024/03/20 02:14:26.404, 100 %, 33 %, 81920 MiB, 23211 MiB, 84, NVIDIA A100 80GB PCIe
0, 2024/03/20 02:14:27.404, 100 %, 43 %, 81920 MiB, 53441 MiB, 83, NVIDIA A100 80GB PCIe

これはとてもいい感じ。

推論 - HQ-64x512x512

RTX 4090(24GB)では歯が立たないことが分かっているので、最初からA100 80GBを投入です。

64フレームのモデルが提供されていませんので、16フレームのもので試します。

# Sample 64x512x512 (40s/sample, 100 time steps)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./ckpt/OpenSora-v1-HQ-16x512x512.pth

68,805MiBまでvram消費していました。

0, 2024/03/20 02:34:41.564, 100 %, 16 %, 81920 MiB, 25773 MiB, 84, NVIDIA A100 80GB PCIe
0, 2024/03/20 02:34:42.564, 100 %, 11 %, 81920 MiB, 52419 MiB, 84, NVIDIA A100 80GB PCIe
0, 2024/03/20 02:34:43.564, 100 %, 22 %, 81920 MiB, 68805 MiB, 84, NVIDIA A100 80GB PCIe

やはり、学習時と推測時とでパラメータが違うため上手くいかず。

3. 学習

READMEに記載されている内容と、提供されているプログラムの内容とがアンマッチのようなので、うまく学習できませんでした。
このため、以下は試したところまでのメモです。

データセットのダウンロード

(1) HD-VG-130M : ダメでした

GoogleDrive HD-VG-130M からダウンロード。metafilesディレクトリをダウンロードしようとすると、複数のzipファイルに圧縮されてダウンロードが開始します。このzipファイルを以下のように dataset ディレクトリに展開します。

mkdir dataset
cd $_
for f in /path/to/metafiles-*.zip; do unzip $f -d ./; done

ところが展開されたファイルはJSON形式。CSV形式というか書式も単純コンパートできなさそう。諦めが肝心なので、別のデータセットで試みます。

(2) UCF101 : ダメでした

ダウンロードして、

wget https://www.crcv.ucf.edu/datasets/human-actions/ucf101/UCF101.rar --no-check-certificate

rarファイルを展開します。

unrar x UCF101.rar

が、こちらもREADMEのData Processingに記載の内容では、うまく行かず。

4. まとめ

推論

・RTX 4090(24GB)でも短く粗い動画であれば生成可能。
・HQかつサイズ大きめ、尺長め、となるとVRAM 80GBはないと無理。

学習

提供されているデータセットHD-VG-130Mの説明書きに以下のようなお言葉がありますので、もう少し待ってみます。

For OpenSora 1.0, we use the first split. We plan to use the whole dataset and re-process it.
(Google翻訳)OpenSora 1.0 の場合、最初の分割を使用します。データセット全体を使用して再処理する予定です。

Open-Sora/docs/datasets.md

いいなと思ったら応援しよう!