技術系なぶろぐ
VELL-E X でしゃべってもらう
人工知能ネタです。VELL-E X を使ってみたいと思います。
ナニモノ?かというと、声真似でセリフをしゃべってくれます。
いわゆる音声合成ものですね。
もともとは Microsoft が公開したもので、当然その時はクラウドサービス。それの OSS 版のようです。
声真似はどうするかっていうと、マイクで聞かせるか、音声ファイルを読ませてそこから声の特徴を抽出してくれます。
しゃべる内容はテキストで入力するんですが、ひとつ大きな難点が。イントネーションの支持ができません。かといって棒読みかっていうと、案外そうでもないです。
つまり、イントネーションとか抑揚は何度も生成してみて、気に入ったものが出るまで試すしかないです。
インストール
さて、ではインストール方法です。
といっても、このサイトが非常にわかりやすくて、このページのコマンドをそのまんま流すだけでOK!
だとこのブログを書く意味がなくて、一か所だけハマりポイントがあります。
前提
Windowsマシンを準備します。GPUがあったほうがいいです。
VELL-E X は CPU でも動きますし、VMware上の仮想マシンでも動きます。だけど、やっぱり時間かかります。パススルーで仮想マシンからGPU使ってもいいですし、物理マシンでやってもいいです。
私は Stable Diffusionで使ってる、Tesla K80 でやります。
あと、Python。
インストールしておいてください。私の環境では、Stable Diffusion ために Ver.3.10.9 を入れてまして、これで動きました。
事前準備
Visual Studio Build Tools 2019 と、ffmpeg をインストールします。
Visual Studio Build Tools が必要なんですが、最新の 2022 ではダメです。2019 でないとうまくいきません。そんな状況なのに、相手は Microsoft。奴らは最新版以外を使わせないことに必死なのか普通の方法では、2022 しかダウンロードできません。
2019 をダウンロードするページもあるんですが、MS アカウントでのログインを要求した上、ダウンロードリンクが見つからないという嫌がらせをされました(2023/9/30現在)
なので、このサイトを参考に、直接リンクでダウンロードします。
インストールオプションはこんな感じ
このリンクもいつまで生きてるかな・・・・?というのはありますが。
なお、ここで取れるインストーラも、ダウンローダーなので、インストール自体、いつまで使えるかな?という心配もありますが。
VELL-E X デプロイ
git でデプロイします
git clone https://huggingface.co/spaces/Plachta/VALL-E-X
cd VALL-E-X
python -m venv venv
venv\Scripts\activate.bat
参考サイト、ほぼそのままです。
いちおー解説しときますと、1行目、git clone これはいいですよね。わからん人はググって
2,3,4 行目、python の仮想環境を構築して構築した仮想環境に移行します。
pip でライブラリをインストールしますので、VELL-E X 専用の環境を作って pip での環境を独立させます。
参考サイトでは、activate.ps1 を実行することで環境を切り替えてますが、私はバッチファイルでやってます。まぁ、どっちでもいいです。たんに ps1 の実行許可設定がメンド臭かっただけとも言いますが。
実行環境の構築
pip による各種ライブラリのインストールを行います。
事前準備で Visual Studio Build Tools をインストールしておいたのがここで効いてきます。
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
この中の requirements.txt によるインストールの中に pyopenjtalk が指示されてるのですが、どうもこのモジュール、インストールの過程でコンパイルを行うようなんです。このコンパイルで Visual Studio Build Tools を使います。
なので、Visual Studio Build Tools が入ってなければ、当然失敗します。CMake が見つからないとか、C コンパイラが見つからないというエラーが出たら、Visuial Studio Build Tools が入ってません。
一方で、Visual Studio Build Tools 2022 をインストールしていると、ここでコンパイルエラーになります。コンパイラのエラーチェックが厳しくなったのかな?2022 でエラーになる環境でも、2019 に変えると通ります。
なお、一度 Visual Studio Build Tools 2022 でコンパイルを挑戦してしまうと、環境かなにかに取り込まれるらしく、追加で Visual Studio Build Tools 2019 をインストールしたり、環境変数 PATH を書き換えても 2022 を使おうとします。 Visual Studio Build Tools 2022 を Uninstall するか、git からやり直さないと、インストールが成功しません。
起動!
さぁ起動しましょう。
python app.py
起動が完了すると、http://127.0.0.1:7860 で接続できます。
Stable Diffusionを動かすハードウェアの話
Stable Diffusion です。最近話題の生成系 AI とかいうやつ。AI 絵師がどうとか揉めてもいるやつ。
何が良いって、Stable Diffusion はクラウドフリーで使えること!規制とかメンドクサイ話が聞こえなくもないこの世界、クラウドだとサービス停止とかありえる話なわけで、オンプレで持っておくに限りますよね!
さて、どんな構成にすれば、どれくらいの速度で描けるんだろ?ということを比較してみます。
- 物理マシン (Express5800/T110h-S / E3-1220V5 / Mem 16GB)
- 仮想マシン (16 vCore 38.4GHz / Mem 32GB)
- Tesla K80 搭載マシン (Express5800/T110h)
-
Tesla P40 搭載マシン (Express5800/T110h)
自作パソコンとかでやってもいいんですが、GPU のファンがうるさいので、マシンはデータセンターに閉じ込めます。となると、リモートで電源が入れられないと困りますよね。なもんで、IPMI を持ってるサーバ筐体を使ってます。
で、どんなのを書いてもらうかというと、
まず、512 x 512 サイズで描いてもらいます。いいですよね!競泳水着!!
そして、img2img でワイドに変換します。896 x 512 です。いいですよね!!競泳水着!!
使用モデルは ACertainThing
Positive Prompt
(high resolution, masterpiec, ultra-detailed, super fine illustration,highly detailed beautiful face and eyes, beautiful hair:1.10),
dynamic angle, cowboy shot,
(blue sky:1.4)
(kawaii girl:1.20), (16 years old, teenage,loli:1.15)
(mesh hair,silver hair, long hair, twinkle eyes, tareme,medium breasts1.21),
(one girl wearing swimming race suit, competition swimsut,one-peace swimsuit,high leg swimsut,wet swimsut:1.15),
(brown skin:1.1),(shiny clothes:1.2), (Oil highlights:1.16),(cameltoe:1.13),
lean back, sunlight filtering through trees,(big eyes:1.2)
cinematic lighting, side braid, light smile, blush, skindentation
Negaitive Prompt
(EasyNegative:1.5), (Bad-Hands-3, bad-hands-5,badhandv4:1.15),bad_prompt_version2
flat color, flat shading, signature, watermark, username, artist name, bad fingers, bad anatomy, missing fingers, retro style, poor quality, garter belt, (Jersey:1.5), (long sleeve:1.5),(arm cover:1.5),(name tag:1.4),
training room, handrail, dumbbell,
name plate, name tag on swimsute, white cloth on chest, socks,peace sign,bikini,spats,water splash,sleeve,turtleneck,wood deck,handrail, horn, fox ears,arm cover
short pants, forest,Audience seats
(gray eyes, bad anatomy, text, simple background, no background:1.1),
(ahoge, french braid, crown braid, halo, NSFW, drill hair, wavy hair, animal ears, 3d:1.2),
midriff, naval
Seed値 2092163728
さて、この処理にどれだけ時間がかかるのか。
青が txt2txt で 512x512 の画像を生成する時間、赤が生成された 512x512 画像を 896x512 のワイドにする時間です。GPU、すげー!
Ai 関連の話って必ず GPU の話が出てきますが、これを見れば、当たり前ですね。一回 GPU 使ってしまうと、もう CPU だけには戻れません。
なお、グラフじゃよくわかりませんが、Tesla P40 使った場合、512x512 の画像を txt2img するのにかかる時間は 9秒です。Tesla K80 でも42秒で終わるので十分に早いんですが P40、世界が違います。
さらにもう一歩
縦横を2倍して大きい画像にします。いいですよね!!!競泳水着!!!
MultiDiffusionというプラグインを使って拡大をします。この処理が重い。
GPU の性能がもろにでます。 CPU でもできるんでしょうけど、やってません。単純比例で 1 時間くらいかかるんじゃないでしょうか。
ちなみに、Stable Diffusion を GPU なし、すなわち CPU で動かすには、起動オプションにこれを付けます
--skip-torch-cuda-test --precision full --no-half
まぁ、測定結果を見れば、やる意味あるの?ってレベルですけどね。
あと、もう一つ気になるのが消費電力
Tesla P40 搭載の Express5800 の BCM でとった電力グラフです。
-8min 付近は OS のみが起動してる状態、-4min 付近が Stable Diffusionが起動している状態、-1min から 0min までが画像生成が走ってる状態。130Wくらい使ってますね。
9 秒で生成できるとすると、画像1枚あたり、0.33Wh。関西電力の電気料金が 1kWh あたり 28.7円なので、画像一枚あたり 0.0095 円、9.5厘ですね。
TrueNAS が起動しなくなった
TrueNAS が起動しなくなりました!!
failed to reclaim memory というメッセージを出して、プロセスが死んでしまいます。Kernel は生きてるらしく、Ping には応答するんですが、sh すら起動しないので、なーんにもできません。
この TrueNAS、VMware のストレージにしてるので、仮想マシンの構成ファイルを抱き込んだまま起動できなくなるとかいう、最悪な状態。
さーて、どうしたもんか。
何が起こってる?
試行錯誤する中で、物理メモリが食いつぶされてることがわかりました。
TrueNAS のダッシュボードにある、メモリ使用率の画面です。物理メモリ 16GB を積んでるんですが、全容量が Services で食いつぶされてます。Cache だったらまだわかるんですが、Services で食いつぶす。はて?
この Services、ってなんじゃらほい?ということなんですが・・・・・よくわかりません。おそらくは Kernel とか Userland とかのシステム領域かな?と思います。そんなもんが 12GB も??異常ですね
ちなみに、この画面を表示したあと、Web サービスも死んでしまい、計測できなくなりました。
考察
エラーメッセージ、failed to reclaim memory ってなんじゃらほい?そのまま訳すと「メモリを取り戻すことに失敗しました」
メモリ不足でプロセスが死ぬときは、out of swap というエラーが出るはず。ということは、Swap を含めてメモリ容量を食いつぶしてるわけではない?
どうやら、Swap を含めたメモリ容量を使いつぶしたわけではなく、物理メモリが食いつぶされてる状態で Userland プロセスを動かしたいから、Swap 領域からメモリを戻そうとしたんだけど、物理メモリを奪い取れないからどうしようもなくプロセスが死んだ。とそんなシナリオではないかと。
はて?Swap があるんだから、どーしても必要なプロセスを動かすには、ほかの領域を Swap に追い出して必要なプロセスを走らせるのでは??
そういう動作をしないってことは、Swap 不可な領域ばっかりになってるってことか?
Swap 不可な領域ってことは、おそらく Kernel のメモリ領域。ZFS か!
ということで、ZFS の Kernel 領域がメモリを食いつぶしてるのではないかと思われます。ふつー、こういう起動不能なんて状態は致命的なんで、起こらないように制限とかかけてあるはずなんですが、パフォーマンスを出すためとか、そんな感じの理由で制限を外してるんでしょうね。
推論
おそらくこんなことが起こったのではないかと
- ZFS 領域になんらかの不整合が発生した
- TrueNAS の起動時に ZFS をマウントしようとする
- ZFS 領域が正常に Unmount されてないので、マウント時にチェック的なものが走る
- チェックが Kernel 内処理されていて、かつ、メモリ使用量が制限されていないので、全物理メモリを食いつぶす
- Userland が追い出されて、かつ復帰できないので死ぬ
- Kernel 処理もメモリ不足で止まる
- ハングアップ
対策
FreeBSD ともあろうものが、起動もできなくなって復旧処置ができなくなるようなものを作るか??
といういうわけで、これは TrueNAS の固有現象だろうと推測。つまり、オリジナルの FreeBSD Kernel なら正常に起動できるのでは?
というわけで、FreeBSD を起動してデータ領域をマウントしてみる。
実際には、別の HDD をつないで、そこにインストールしてやったんですが、LiveCD とか、インストールメディアの Shell でもできそう。
- なんとかして FreeBSD を起動する
- zpool import pool-Data
- pool-Data は TrueNAS で作ってた Pool 名
- import コマンドは1時間くらいかかる
- LiveCD の場合、マウントポイントが作れなくてマウントエラーになるので mount -t zfs pool-Data /mnt を実行
- マウントできてることを確認
こんな感じでファイルシステムにアクセスできるようにする。
この段階で ZFS 領域のチェック的なものは終わってるので、FreeBSD を reboot して、本来の TrueNAS を起動すれば、正常に起動できる。
念のため、Reboot する前に、データ領域のファイルを救出しておくべきでしょう。
あと、間違ってもここで電源を引っこ抜いたりしないように、FreeBSD から Unmount しないと、何のために復旧作業やったのかわからなくなります。
Sambaで構築したADにADMXを追加する
ADのグループポリシーで設定できる項目は、ADMXファイルをメンテナンスすることで項目を増やすことができます。
で、ふつーADサーバはWindowsServerで構築するわけで、ADMXファイルのインストールの方法なんて、WindowsServerでの説明しかありません。
Samba で AD を構築した場合は、どうするの?っていうお話です。
AD サーバを Samba で構築して、運用は Windows 上にインストールした RSAT を使うという環境です。samba-tool を使うことは考えてません。
単に Samba で AD サーバを構築してグループポリシーエディタで開くとこんな感じになります。
管理テンプレートの下にも、それなりに項目が入ってます。全部見たわけじゃないんですが、おーそらく WindowsServer で構築した AD の標準ポリシーくらいはインストールされてるんじゃないかなと。
だけど、ポリシーの追加をしたいわけですよ。Chrome のポリシーとか、Firefox のポリシーとか。
どうするのか?実は WindowsServer の場合と同じです。SYSVOL の下の PolicyDefinitions の下に配置するわけです。
Samba で構築したAD の場合、SYSVOL の実態は、/var/db/samba4/sysvol の下にあります。
※ Ports on FreeBSD で構築した場合。Linux 系だとどうかは知りません
Policies の下に PolicyDefinitions というディレクトリを作って、WindowsServer の場合と同様にadmx、admlファイルを配置します。
すると、
こんな感じで、配置した ADMX の設定項目がグループポリシーエディタに出てきます・・・・が!!!
もともと表示されてた項目、Windowsコンポーネントとかが消えてる!
というわけで、単純に欲しい ADMX を置くだけではダメなようで、じゃあどうするか?
必要な ADMX を全部配置します。
こんな感じで。
ファイルをどこから持ってきたか?というと、Windows7 とか、Windows10 とか、Windows11 から持ってきます。クライアントマシンの Windows には、C:\Windows\PolicyDefinitions 以下に admx、adml ファイルが置かれてますので、これを持ってきます。
すると、
こんな感じで Windows 標準も追加したポリシーもグループポリシーエディタの配下に入ってくれます。
続・自家製アプコン
ずいぶん前に、Waifu2X を使った自家製アプコンの話を書いたんですが、そのアップデートです。
あの記事書いたのが2016年なんで、もう6年も前。そりゃぁ世の中で技術革新は進んでますよね。
Cupscaleというツールと、Real-ESRGANというツールです
なお、Real-ESRGANは、このページで説明されているツールを使うと楽に使えます。
さて、では早速結果を見てみましょう。
画像は、左上がオリジナル、左下が Waifu2X でアップスキャンしたもの、右が Real-ESRGAN でアップスキャンしたものです。
懐かしい新世紀エヴァンゲリオンのオープニングです。
え?懐かしくない?ついこの前、映画館でみた??ふっ、君はそれをLDで見たことあるかい?え?LDってなんですか?
いやまぁ、そう言われるわな・・・・
これは、1995年にテレビ放送された最初のエヴァンゲリオン、そのLDをキャプチャしたものです。LDが何かは・・・ググってくれ。CDに対するアナログレコード、DVDに対するLDみたいな位置づけですね。CDとかDVDがそろそろ通じなくなりつつある時代ではありますが。
というわけで、Real-ESRGAN を使えばいいんじゃないかな。を結論に終わってもいいんですが、それだけだとアレなので、もう少し比較してみましょう。
Cupscaleの比較
Cupscaleには3個のモデルが搭載されています。そのモデルの結果を比較します。
左上が BSRGAN、右上が RealESRGAN-4xplus、下が RealSR_DF4K
RealSR は論外として、BSRGAN と RealESRGAN はいい勝負をしてるように見えますが、相対的に RealESRGAN のほうが綺麗に見えます。
CupscaleとReal-ESRGANの比較
二つツールがあるので、そっちも比較しましょう。Cupscale の realesrgan-4xplus と Real-ESRGAN です。これって同じモデルってことで・・・いいんですよね?
左が Cupscale の realesrgan-4xplus、右が Real-ESRGAN です。
Real-ESRGAN のほうが綺麗に見えます。同じモデルだけど、学習のさせ方とか実装がなにか違うんでしょうか。
GPU処理とCPU処理の比較
Cupscale は CPU モードを持ってるので、GPU を使わない、CPU 処理も比較してみましょう。左がGPU処理、右がCPU処理です。これはさすがに同じに見えます。
ツールは Cupscale の BSRGAN です。というか、CPU モードで走るのはこのモデルのみです。
なんでこんな比較をしてるかというと、私としてはCPU処理を使いたいのです。だって仮想環境だとGPUができないから。いや、できないわけではないんですが、仮想環境でGPU使おうと思ったら、くっそ高い専用GPUカードとくっそ高い専用ドライバー使うか、PCIパススルー使うから vMotion を諦めないといけなくなるので、やりたくないんですよね。なので、CPU モードで使いたいんですが、BSRGAN しか使えないので、これで妥協するか、GPU 使える物理マシンで Real-ESRGAN をやるかですね。
結論
画質で Real-ESRGAN の勝利です。
動画にした結果も置いておきましょう。2016年にやった、AIR の DVD に入ってる ED から一部を取り出したものです。元動画は2016年の記事を参照してください。
あと、このリンク、ブラウザでは再生できないかもしれません。その場合はダウンロードして再生してください。少なくともVLCでは再生できるはずです。
最後にもひとつ、アプコン処理にかかる時間の問題が。
Cupscale、Real-ESRGAN どちらもめっちゃ時間がかかります。Waifu2X も相当時間かかりましたが、それよりはるかにかかります。
サンプル用に置いた AIR の動画、動画としては23秒程度の長さなんですが、これを1本処理するのに、Waifu2X で3、4時間くらいかかるのに対して、Cupscale、Real-ESRGAN は 1 日以上かかります。25分のアニメを1本処理するのに、単純計算で2か月以上かかることに。Waifu2X で2週間弱かかってたものが、けた違いに時間がかかることになります。