YKRV.NET - Terminal[v2.0.0]

-----------------------------

anonymous@ykrv.net:~$ open sidemenu

Connecting...[OK]

Checking permissions...[OK]

//

// DEPLOYED SIDE MENU

//

 



?: ᙍᖶᙍᖇᘉᓿᖶᖻ >>µñkñ¤wñ ¢¤ñt€ñt

【MMVC】ゲーム起動中等のGPU高負荷時において音が飛んだりそもそも変換されない場合における対処方法 - v0.3.1.x

>> MMVC関連記事

YKRV.NET - 【MMVC】ライブパフォーマンス(生配信)等で利用する際の音声ルーティングの構築例Voicemeeter

YKRV.NET - 【MMVC】Colab上で構築したTrainerをローカル環境(WSL)へ移行する方法について

またMMVCの研究メモを残しておきます。今回はタイトル通りですが、まずは問題のおさらいを。

この記事で扱う問題例

ゲーム(あるいはGPUかCPUに高負荷をかけるソフトと併用している)をしながらDiscordでMMVCを通して誰かと会話をしようと準備したはいいものの、音声がしっかりと変換されなかったり、音が途切れ途切れに変換されてしまい、MMVC音声が正常に出力出来ない

さて、現行のv0.3.1.xでは実用目的でMMVCを使おうとすると恐らくこの問題にぶち当たる方は多いと思います。実際リアルタイム検索等では同じような現象に遭遇して困っている方も居るようです。

では、まずそういった状況に陥った際にどうすればよいかの結論から言いますが、とてもシンプルです。

解決方法(要約)

A: GPUで推論処理をするのではなくCPUで推論処理をさせるように設定を変更し、タスクマネージャーでMMVC_clientの優先度設定を"高"に設定する。

というのが恐らく最適な答えです。ええ? これだけ? 本当に他に手段は無いのかと言われると、他の対処方法は

・frame_length/delay_flames/overlap 値を変更して処理に余裕を持たせる(出力が遅延するデメリットあり)

・処理能力が高いCPU・GPUに乗り換える(CPU依存にした方が今のところ都合は良さそう)

・今後のMMVCのプログラムの改良を待つ

以外は、少なくともv0.3.1.x時点では前述の対処方法のみになるでしょう。さて、恐らく最適解となる対処方法についてもう少し具体的に書いていきます。

解決方法(最適解)

1、myprofile.confを開き、以下の部分の設定を書き換えて"ONNX使用:CPU演算"を行うように設定を変更します。

json : myprofile.conf
"onnx": {
    "use_onnx": true,
    "onnx_providers": ["CPUExecutionProvider"]
    // DmlExecutionProvider という記述を削除し、上記の記述にする事でONNXは有効のままCPUで演算させるように変更できます。
}

2、mmvc_clientを起動後、タスクマネージャーでプロセスの「優先度の設定」を"高"に変更します。

この問題が起きる理由について

問題例をわざわざ挙げているので察しがつくでしょう。シンプルに考えるなら「GPUに高負荷を掛けるソフトウェアの処理を優先してしまって変換作業が追いついていないから」かと。

ただ、GPU演算をする為に用いているDirectML(ドキュメントに記載)というAPIがゲームで使われているDirectXと干渉しているようにも思えますが、そこまで具体的に語れるわけではないので何とも言えませんね。

(余談としてonnxを用いたプロジェクトではこのonnx_providersにCUDAを選択できるようにしているツールを見かけているので使用するAPIを変更するだけでも随分と変わりそうな気はします。)

しかし、GPUからCPUに変更したとしてもまだ安定しない事もありました。それについては上記の通り、タスクマネージャーで優先度を変更する事で対処が出来ましたね。ただ全てのゲームやツール、利用するシチュエーションにこの方法で対処できるとは限りませんのでご注意を。

その他の対処方法

frame_length/delay_flames/overlap 値を変更して処理に余裕を持たせる

これについては変更例を書いておきます。

json : myprofile.conf
"vc_conf": {
    "frame_length": 16384,
    "delay_flames": 8192,
    "overlap": 2048,
    //
    // 以下省略
    //
}

値から察しは付くと思いますが、演算にかける工程そのものに余裕をもたせて処理させるようにするわけですね。値はデフォルト設定から察するに2の冪に合わせれば良いでしょう。ただし余裕を持たせるということは遅延を発生させるという事になります。リアルタイムの意味が無くなるほどに遅延させない程度に値を調整すれば実用性を維持したまま扱えるかもしれませんね。

処理能力が高いCPU・GPUに乗り換える

これはオススメできません。少なくともソフトウェア側の改良で何とか解消出来る日が来るでしょうから、これだけの為にアップグレードするのは勿体ないので、ソフトウェアのアップデートを素直に待ったほうが良いと思います。(前の項で書いた通りソフトウェア側で改善できる兆候はあります)

あとがき

参考までに今回の問題と関連のあるPCスペックについて私の環境のデータを載せておきます。

CPU:

Intel Core i7-11700K / CPU演算で大体50%前後使用。

GPU:

NVIDIA GTX1080

少なくとも私の環境では最適解の方法で

Division2(FPS重視設定。ほぼ低一部高設定/フレームレート制限200/ 実測FPS 70~115前後)の状態で関連記事にあるVoicemeeterのルーティングを組んだ状態でDiscordに音声を投げた場合、負荷が更に増すシーン等でも問題なく動作しましたが、普段よりはフレームレートが落ちる場面もありました。

また、Fallout4(最新ENB等導入済み・MOD450個オーバー環境)をTwitterにて前述のVoicemeeterを同じく利用しながら生配信を行いましたが、CPUの処理能力も重要だったのか、普段のプレイよりもかなりフレームレートが落ちてしまいました。"NVENC"を配信エンコーダーに利用してもこの結果になった為、最低でもDiscordの会話までは利用できても、生配信を行う場合は1PCのみで配信する形式でMMVCを利用するのはかなり厳しいかもしれません。

後は後のバージョンの改良に期待しましょう。