見出し画像

クラウドサーバーRunPodを利用して、HunyuanVideo LoRAを作ろう!

(1月27日 改定)

■御挨拶

雀士の阿佐田哲也にちなんで、(あさかよるか)って当て字でテキトーに名づけた麻加夜香といいます! よろしくです。
今注目しているのは、動画AIの最前線、HunyuanVideoなんです。これについて調べたことを記事にしますよ?

■動画AIの現状を見渡してみよう

去年2024年にはOpenAIのSoraが注目されました。春先にすごいデモを出してきて、期待を持たせてくれましたね。
しかし公開が長引き、2024年の暮れにようやくリリース。その間に中華系動画AIが台頭してきました。具体的にはKLing AI、MiniMax Hailuo、Viduなどです。そして2024年は動画AIがとんでもなく進化を遂げた1年となりましたね。
KLingは私も課金して使っているのですが、最新モデル1.6のクオリティには驚愕です。実写なのかAIなのか区別がつかなくなってきました。

■動画AIの最先端、HunyuanVideoに刮目せよ!

動画AI花盛りの今、ひとつ懸念があります。それは、Webサービス上の動画AIには漏れなくなんらかのフィルタリングがある、ということです。
英語では Censored, Uncensored って表現しますが、NSFW系コンテンツを生成できないように制限するような仕組み(フィルター)ですね。
変態紳士のみなさん! 困ってはいませんか?
私は中身が疲れた中年男性ですので(笑)、叡智を渇望する男性諸君の気持ちはよくわかっているのです。
KLingの十字架を使ったNSFWフィルタリングを突破する裏技がCivitaiの記事で発見され、5chのなんJNVAスレで紹介されましたよね。もちろんそういうところはチェックしていますよ!
今の動画AIは、フィルタリングが厳しくなる方向に進んでいます。これじゃあ、何でもできる夢のAIとは言えない。
そこで今こそ注目すべきは、Uncensored で好き放題できる HunyuanVideoなんです。
YouTubeでは葉加瀬あい(ノートは https://note.com/ai_hakase )さんがHunyuanVideoの情報発信をされていますが、他の方はあまり注目していない印象です。それはおそらく、LoRA作成環境作りが難しいからではないでしょうか?
任せてください! 自分がそれを詳しく語りますよ!!
HunyuanVideo の LoRAを作り放題作って、Civitaiにも公開しましょうね?
画像AI界隈の世界最大のユーザーコミュニティがCivitaiでしょうけれども、LoRAの開発者が集まる場所でもあります。

LoRAとは何かの説明は不要ですよね? ベースモデルに対して欲しい情報だけを引っ張り出すような、情報を絞り込むようなものです。LoRAを使えば自分の望み通りの画像なり動画なりを作れるようになります。

■RunPodを使う理由

Amazonのグラボの売り上げランキングで何が売れているか御存知ですか。RTX 4060ですよ。VRAMが8GBの。
この8GBというサイズは、一般的にはAI生成においては小さなもので、不足してしまうことがよくあります。
HunyuanVideoでもそうです。動画を作るにも12GB必要、LoRA学習には最低16GBでしたか。
そこで、RunPodのようなクラウドPCレンタルサービスを使えば、高性能なグラボを借りることができるんです。
YouTubeを見ている印象では、なぜかインド人の方がよくRunPod+ComfyUIで最新情報を発信しているようですが、比較的裕福な人が多い我々日本人は、躊躇なく最高級グラボのRTX 4090を購入される方が多いのかな?
いえいえ・・・Amazonのグラボ売り上げランキングを見ればわかりますよ。12GB以上はほとんど売れていないんです。8GB民(はちギガみん)、と呼びましょうかね、8GB民がとても多いんです。
じつは私もRTX 4060(8GB)ユーザーです。省電力でコスパがいい! 地球に優しいエコライフ。消費電力も発熱も低くて、ケチな人の琴線に触れるようなところがあります。

8GB民は、ハイスペックグラボが必要な処理ができないので、そういうときこそ、クラウドPCです。Google Colabがひとつ有名ですが、RunPodも去年あたりからグイグイ伸びてきた印象です。
Colabも使ったことがあるのですが、RunPodのほうが今は優れていると思います。
あと支払い方法に関してですが、クレジットカードを使いますが、決済にはStripe.com という業者を仲介します。これは、現在大人気(1番人気と呼んでいいでしょう)の中華系の動画AIのKLing、それからrunway Gen-3 なども Stripe.com なので、決済するときの信頼性が高いんです。あるいは、一度決算しておけば、別のサービスを利用するときにも決済がスムーズにできます。そういう利点もあるんです。

さて、RunPodを使えばVRAMを気にせずに複雑な処理ができることがわかりましたね。ハイスペックPCを時間あたりいくらで借りられます。
Google Colabを以前から使ってきた人には、べつに新鮮な驚きはないでしょうけれど。知らない人には吉報ですよ。とくにVRAM不足に悩まされてきた8GB民は。YouTubeを見ている限り、RunPodをオススメする日本の配信者はあまりいないようなので、まだまだ伸びていく余地がありそうです。

■LoRA作成するまでにもう少し前置き

HunyuanVideoは登場してまだ間もないのですが、1~2ケ月ほどでとんでもない進化が起きています。動作条件は最初はVRAM64~80GB必要だったものがやがて24GBになり、今はさらに量子化(Quantize)技術によって少ないVRAMでも動作するようになりました。
ただし、ComfyUI作者が8GBで動作すると言っているのは、疑わしいです。

https://blog.comfy.org/p/running-hunyuan-with-8gb-vram-and

↑このブログのことですが。自分もそれを読みながら試しましたがOOM(Out of Memory)になってしまいました。VRAM8GBが足りていても今度は物理メモリが、おそらく32~64GB必要なんでしょうね。メモリ不足だとWindowsのテンポラリファイルが増大し、OSを圧迫し、動作停止に近いような状況になります。ということで、8GB民はローカルではなくMimicPCやRunPodのようなクラウドサーバーに頼ったほうがいいと思います。

LoRA学習については、少し前までは24~32GBほど必要だったようですが、今は最低16GBで足りるようです。
このあたりは時とともにコロコロ変わる部分なので、2025年1月現在の話として聞いてくださいね。
そこで、自分が調べたのは、RunPodでVRAM20GBのクラウドサーバーを使ってLoRAが作れないか?ということでした。
結果はオーライです。成功しました。が、そこに至るまでに落とし穴が多かったので、そのあたりも語っていきましょう。


こちらの記事を参考にして調べていたのですが、、そもそも論として、WindowsとLinuxはまったく設計思想の違うOSです。
普段Windowsを使っていて、A1111やらForgeやらComfyUIを駆使して画像生成しているのですが。PythonやらGitやらの環境構築も何度もしてきたし、そこそこ自信はあったのです。
ところが・・・。RunPodにつなげて、LoRAを作るためのmusubi-tunerを入れようと、「git clone (URL)」のコマンドを打ってみたら、驚愕。そんなファイルはないとかコマンドはないとかエラーが出て弾かれる。
普段Windowsだと、Linuxのファイル一覧の出し方も忘れてしまうし。lm? ls? なんだっけなぁ・・・。dirが通らないし。
それにしても、gitすら入っていないのは変だと思って、ファイルブラウザで /bin/ を見てみると、ちゃんと /bin/git/ が存在する。ってことは git はインストール済みのはず・・・。
答えは、コマンド入力するときは!マークをつける、でした。
!git clone (URL)。 こんな風に先頭に!をつける。なんですかこの変態ルールは。Windows文化とはまるっきり違う。理解できない。
こういうしょうもない「落とし穴」のせいで環境構築にすっごい苦労するんですよね。
RunPodのサーバーでノートブックを作るときも、Consoleを使うときも、そのコマンドの前には!というルールがあって、守る必要があります。
そうしないと、そんなファイルは存在しないだとか、Syntax Errorだとか、エラーばかりが出る始末。うんざり。
自分はWindowsは3.1の頃から使ってきた古参勢ですよ。Win3.1、95、98、XP、2000、7、10、11、ほぼほぼ全部使ってきた。なんならNT系も3.1や4.0も経験あります。
「dirと打ってファイル一覧が表示する」ことができないのはなぜなのか、サッパリ理解できないw なんでWindowsと流儀を統一しないのか。意味わからんわ。
ということで、Windowsユーザーには落とし穴だらけのLinux環境作り。RunPod用にノートブックを作成するときに、そのあたりが響きます。
あと1つ、RunPodでは自分の作業フォルダが /workspace/ になることは留意しましょう。これを意識してところどころファイルパスを指定する必要があるので。
ブーブー文句を垂れながらどうにかこうにかノートブックを作れたので、さぁ、公開しますよ。
・・・文句を言い過ぎてつい忘れてしまいましたがw RunPodで選ぶサーバーは RTX 4000 Ada がおすすめです。templates には Python 2.4.0 を選びましょう。そしてContainer Diskをデフォルトの5GBから20GBに、Volume Diskをデフォルトの20GBから100GBに変更しておきます。初期設定のままではディスクスペースが狭すぎて足りないので。
あと、RunPodの状況によってGPUが0になるときがあります。0ではVRAMがまったく使えず学習できないので1にしますが、0しか選択肢がないときは接続せずに、30分とかしばらく待ちましょう。
接続するのは「JupyterLab」です。Google Colabのようなノートブックが使える環境ですね。(※ノートブックはノートパソコンではなくて、スクリプトの集まりようなものです。)
これで準備は整いましたね。

■RunPodでHunyuanVideo LoRAを学習する musibi-tuner 用のノートブック



#環境づくり1
!pip install -U "torch==2.5.1" torchvision

#musubi-turerを入れる
!git clone https://github.com/kohya-ss/musubi-tuner.git

#カレントディレクトリを移動
!cd musubi-tuner

#環境づくり2
!pip install -r /workspace/musubi-tuner/requirements.txt

#環境づくり3
!pip install ascii-magic matplotlib tensorboard

#huggingface-cli を使えるようにする
!pip install -U huggingface-hub

#DiTをダウンロード 25GB
!huggingface-cli download tencent/HunyuanVideo hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt --local-dir /workspace/musubi-tuner/models

#VAEをダウンロード
!huggingface-cli download tencent/HunyuanVideo hunyuan-video-t2v-720p/vae/pytorch_model.pt --local-dir /workspace/musubi-tuner/vae

#Text Encoder2種類をダウンロード
!huggingface-cli download Comfy-Org/HunyuanVideo_repackaged split_files/text_encoders/clip_l.safetensors --local-dir ./text_encoders

#16GBある
!huggingface-cli download Comfy-Org/HunyuanVideo_repackaged split_files/text_encoders/llava_llama3_fp16.safetensors --local-dir ./text_encoders

#toml を使えるようにする
!pip install toml

#voluptuous を使えるようにする
!pip install voluptuous

#safetensors を使えるようにする
!pip install safetensors

#accelerate を使えるようにする
!pip install accelerate

#transformers を使えるようにする
!pip install transformers

#latentのキャッシュを作る
!python /workspace/musubi-tuner/cache_latents.py --dataset_config /workspace/musubi-tuner/configs/config.toml --vae vae/hunyuan-video-t2v-720p/vae/pytorch_model.pt --vae_chunk_size 32 --vae_tiling

#Text Encoder出力のキャッシュを作る
!python /workspace/musubi-tuner/cache_text_encoder_outputs.py --dataset_config /workspace/musubi-tuner/configs/config.toml --text_encoder1 ./text_encoders/split_files/text_encoders/llava_llama3_fp16.safetensors --text_encoder2 ./text_encoders/split_files/text_encoders/clip_l.safetensors --batch_size 16


#いよいよ学習する
!accelerate launch
--num_cpu_threads_per_process 1
/workspace/musubi-tuner/hv_train_network.py
--mixed_precision bf16
--dit /workspace/musubi-tuner/models/hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt
--dataset_config /workspace/musubi-tuner/configs/config.toml
--learning_rate 4e-4
--sdpa
--fp8_base
--fp8_llm
--split_attn
--blocks_to_swap 36
--max_data_loader_n_workers 2
--network_module networks.lora
--timestep_sampling sigmoid
--max_train_epochs 8
--discrete_flow_shift 7.0
--save_every_n_epochs 999
--seed 42
--output_dir /workspace/musubi-tuner/outputs
--output_name lora-test
--log_config
--optimizer_type bitsandbytes.optim.Lion8bit
--network_dim 8
--gradient_checkpointing
--logging_dir ./logs



先ほど紹介した、

の内容を手直しした形です。これもまた「落とし穴」で、やれ huggingface-cli というファイルはないとか、エラーが出てしまうので、上記ブログの情報では足りないんです。とほほ。
で、上記に紹介したノートブックですが、全部を実行する前に、musubi-tunerを入れるところまでをセルを1つずつ実行して、一旦中断です。そこでやるべき作業があります。
/workspace/musubi-tuner/outputs/ フォルダが必要なので、ノートブック上でもコマンド実行できるのですが、
!cd /workspace/musubi-tuner/
!mkdir outputs
を行います。ノートブックの選択したセルでShiftキーを押しながらReturnキー。ふぅ。こういう作法がややこしい。
なんでLinuxって、cdコマンドはWindowsと一緒なのに dir は違うんですか? なんでなんでなんで???
同様に、
!mkdir configs
!mkdir cache
!mkdir train_data
のフォルダも作っておきます。

/workspace/musubi-tuner/configs/ には学習の設定ファイルの config.toml というファイルを置きます。-----の内側だけコピーして使ってください。

------------------------------------------------------------------------
[general]
resolution = [512, 512]
caption_extension = ".txt"
batch_size = 1
enable_bucket = true
bucket_no_upscale = false

[[datasets]]
image_directory = "/workspace/musubi-tuner/train_data"
cache_directory = "/workspace/musubi-tuner/cache"
---------------------------------------------------------------------------

さて、学習用のファイルは /workspace/musubi-tuner/train_data/ に置くのですが、01.png 01.txt 02.png 02.txt のように、画像とキャプションを対にします。さきほどのファイルで画像サイズを 512,512 と指定したので、そのサイズで整えましょう。これが一番無難です。縦長に 512,768でもいいのですが、経験上、縦横1:1のほうが成功しやすいようです。
そして画像の枚数ですが、サイトによっては20枚から40枚用意せよ、というところもあります。
ですがそこまではいらないと個人的には思います。特定のポーズや服装を再現したいなら、ズバリ、8枚あれば十分です。
01.pngから08.pngまで8枚用意しますが、01.pngを A1111やForgeなどのツールでimg2imgして、少しずつ変化させたものを8枚に増やすのです。
問題はキャプションをどうするか、です。
内部的にはText EncorderにLLMが使われるようなので、ダンボールタグよりも自然言語(英語)のほうがよさそうですが、それでもあえて、SD1.5、SDXL1.0、Pony、Illustriousまで脈々と続くダンボールタグでいいと思います。
例えば、こうです。キャプションのつけかた。---- の内側をキャプションファイルとしましょう。
--------------------------------------------
hoge_, anime, standing, smile,
--------------------------------------------
先頭にはいわゆるトリガーワードを置きます。LoRAガチ勢ならトリガーワードは御存知ですよね。hoge_ はもちろんお好きなワードに置き換えてくださいね。
2番目には realistic か anime かを指定しましょう。リアルな人物を描くときは realistic です。
3番目には動作を指定します。ing系の、standingとかwalkingとかです。a woman is walking at park とか自然言語で書いてもいいですし。
4番目以降は補佐的な内容です。あまり増やさずに絞り込むのがコツ。
そして8枚分のキャプションを、なるべく同じに統一します。変えるとしても1つか2つ。もしキャプションがそれぞれバラバラだと動きが出ずに止まってしまうことがありました。

それからオプティマイザですが、Adamw8bitが推奨されているようです。自分はLion8bit派なのでそっちが使いやすいと感じています。学習率が自動的に調整されるかされないかの違いです。多いstepsで学習するときはAdamw8bitのほうがうまくいくらしいです。Lionですと1000 steps以内にそこそこのクオリティになるんです。経験上。画像AIのSDXL Pony系のLoRAなら100個ぐらいは作りましたがw そんな風に思っています。

さて、ノートブックをすべて実行して、学習してみましょう。
8 x 8epoch = 64 steps で、RTX 4000 Adam (VRAM 20, 47 RAM)なら数分で終わります。512 x 512 の小さな画像ですし。
出来上がったLoRAは /workspace/musubi-tuner/outputs/ にあります。
もしノートブック最後の部分の --save_every_n_epochs 999 を 1にしたら、1 epoch ごとに保存されるので、それはさすがに邪魔でしょう。999にすることで、学習が終わるまでは保存されません。

1 epochごとにLoss率が変化していきます。このLoss率は低いほうが素材そっくりに学習できたことになるのですが、少ない学習ではなかなか下がりませんね。それでもモーションLoRAならあまり問題にならないと思います。

・・・次に顔LoRAについてです。これについても検証したのでお伝えしましょう。
HunyuanVideoでは、動作を補足するLoRAを作るのはわりと簡単。ところが顔を似せるのは大変です。
少ない学習では Adamw8bitオプティマイザだとまったく学習してくれないので、Lion8bitのほうがいいと個人的には思っています。
モーションLoRAの場合は画像8枚で8 epoch。8 x 8 = 64 stepsです。
顔LoRAの場合は画像を倍の16枚にして、9 epochがうまくいきました。
16 x 9 = 144 stepsです。これでも相当少ない量なので、増やしたほうがいいかもしれませんが、一例としてはこうです。
顔の素材はどこまで変化させるのかが難しいです。とりあえず16枚中、2枚だけ変化させてみると、目パチ、クチパクができました。
さて、顔LoRAを作るためには、512x512のポートレイト=上半身ショットを16枚用意です。 それを16 x 9 = 144 stepsで学習すると、Loss率は0.05付近。まぁこんなものでしょう。
それで作ったLoRAを、1.6程度で強く効かせてみると、なんとか素材に似たものが描けました。0.8や1.0では足りないようでした。
素材同様にポートレイトである必要があって、引きの絵ではぜんぜんだめ。HunyuanVideoでは顔が鬼門かなと思います。
学習素材に引きの絵を混ぜるべきかもしれません。ここはノウハウ不足です。みなさんいろいろ試してみてください。

・・・さて、学習時のオプション設定ですが、サンプルでは省VRAM用のものを色々指定しているので、VRAM32GB必須ということはなく、もっと低スペックで動きます。もちろんRunPodの最高級サーバーを使ったほうが動作は速いですよ。
無事にLoRAは作れましたか? うまくいったら Civitaiに公開しましょうよ。HunyuanVideo用のLoRAがもっともっと増えることを期待しています。

自分の感覚ですと、今のそういう流れは、2023年頃にCivitaiでSD1.5のLoRAがドッサリ出たときに近い感じがあります。Civitaiは元々そういう流れでアクセスを増やしましたからね。

また近頃、HunyuanVideoに注目する人が増えてきたのは好ましいですね。
YouTuberですと、AIクリエイターハックのつねちゃん(https://www.youtube.com/watch?v=ksPjuNp2s0c)とか。

IT記者では新清士さんとか。

動画生成AI、ついにアダルトの扉が開く(https://ascii.jp/elem/000/004/247/4247602/)

・・・ということで、みなさんもこっち側(HunyuanVideoユーザー/LoRA開発者)においでませっ。


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