Stable Video Diffusion が Diffusers から使えるようになりました

はじめに

Stable Diffusion を開発している Stability AI が公開した「Stable Video Diffusion」についての記事を以前書きました。
touch-sp.hatenablog.com
最近、Diffusersから使えるようになって環境構築など非常に簡単になりました。
github.com
さっそく使ってみました。

環境構築

Windows 11
CUDA 11.8
Python 3.11.5

Python環境構築は以下の手順です。

pip install torch==2.1.1+cu118 torchvision==0.16.1+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install diffusers[torch]
pip install transformers opencv-python

Pythonスクリプト

import torch
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video

pipe = StableVideoDiffusionPipeline.from_pretrained(
    #"stabilityai/stable-video-diffusion-img2vid-xt",
    "stable-video-diffusion-img2vid-xt",
    torch_dtype=torch.float16,
    variant="fp16"
)
pipe.to("cuda")

# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png?download=true")
image = image.resize((1024, 576))

generator = torch.manual_seed(42)
frames = pipe(
    image,
    decode_chunk_size=8,
    generator=generator
).frames[0]

export_to_video(frames, "generated.mp4", fps=7)

結果

結果はGoogle Bloggerに載せています。
support-touchsp.blogspot.com

VRAM消費について

上記スクリプトをそのまま実行すると以下のようなVRAM消費でした。



RTX 3080に載っているVRAM 16GBを超えて、共有GPUメモリを使っています。

以前は16GBを超えた時点でOOM(out of memory)のエラーが出たのですが、最近のNVIDA Driverを入れていると共有GPUメモリを使うのがデフォルトになっておりエラーは出なくなっています。

ただし共有GPUメモリを使いだすと極端に動作が遅くなるので可能な限り使わない方が良いです。

VRAM消費を減らす方法

ドキュメントに紹介されている方法を試してみました。

pipe.enable_model_cpu_offload()

途中の消費は減らせましたが最終的には16GBを超えました。

decode_chunk_sizeを下げる

decode_chunk_size=2まで下げると全行程が16GB以内におさまりました。

pipe.unet.enable_forward_chunking()

あまり効果を実感できず16GBを超えました。

上記すべて

上記すべてを使っても12GBまで抑えることはできませんでした。

今回使用した「stable-video-diffusion-img2vid-xt」以外に名前に「xt」 が付かない「stable-video-diffusion-img2vid」というのもあります。こちらはVRAM消費10GB未満に抑えることができました。


このエントリーをはてなブックマークに追加