WSL2(?)で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のダウンロード
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の説明書きに以下のようなお言葉がありますので、もう少し待ってみます。