-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VRAMをリフレッシュする方法の提供 #513
Comments
issue作成ありがとうございます! パッと考えた思いつきですが、コアをリロードしてリフレッシュする仕組みをエンジンに作るか、コア側にリフレッシュ機構を作ってエンジン側から呼ぶ手がありそうです。 そもそもなぜメモリ消費量が増えていくのか気になりますね…。 |
どっちがメモリの使用量に影響するかわ分かりませんが |
なるほどです! |
あ!あとどの版を使われているかも知りたいです。 |
Windows CUDAです |
なるほどです、ありがとうございます。 とりあえずタイトルにある「定期的な削減」はいろんな不具合の心配をしないといけないので実装しない方針です。 DirectML版もあるのですが、こちらだとメモリ消費量が増えていくかも調査頂いても良いでしょうか。 引き続き、synthesisの実行何回でメモリ消費量がどれくらい増えているかも調査頂けると助かります! |
了解しました。 |
cuda版は1000~3000リクエストほどで0.2GBほどずつ使用されている感じです。 |
なるほどです!!ありがとうございます!! cuda版:1リクエストで 計算しやすいように、仮で1リクエスト N秒の音声を生成するのに必要な出力パラメータ数は この辺りな気がしますね!! @kuroneko6423 |
文字数は20~40ぐらいが多いですね |
おっと、なるほどです。思ったより長いですね・・・ あ、話速を早く設定されていたりしますか? |
一部のonnxとcudnnの組み合わせでメモリリークが発生するという報告がありますね
|
やってますがそこまで測定はしてませんね() |
なるほど・・・これだと結構どうしようもないかもしれませんね・・・・。
なるほどです!参考になります 🙏 |
コア側にリフレッシュする仕組みを実装するissueを作ってみました。 |
コア側の機能を使わなくても、エンジン側でコアをリロードする手もあると思います。 ここの中でコアをロードしています。 Lines 972 to 980 in e11913b
実際のロード部分はここです。 voicevox_engine/voicevox_engine/synthesis_engine/make_synthesis_engines.py Lines 75 to 93 in 9ae873c
なので、APIでコアバージョンを受けて、対応する |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
CPU版はこちらも大丈夫でした |
なるほどです、ありがとうございます! そういえばDirectML版でもVRAM溢れると報告いただいたと思います。 |
@kuroneko6423 こんな感じのコマンドで動いたというのを添付しておきます。 ↓エンジンをダウンロードして起動 set -eux
# rm -rf /tmp/voicevox_engine
mkdir -p /tmp/voicevox_engine
cd /tmp/voicevox_engine
# linux-nvidia.7zがない場合
if [ ! -f linux-nvidia.7z ]; then
wget https://github.com/VOICEVOX/voicevox_engine/releases/download/0.14.0-preview.5/linux-nvidia.7z.001
mv linux-nvidia.7z.001 linux-nvidia.7z
fi
# linux-nvidiaがない場合
if [ ! -d linux-nvidia ]; then
7z x linux-nvidia.7z
chmod +777 linux-nvidia/run
fi
# run
./linux-nvidia/run --use_gpu ↓リクエストを投げる echo -n "こんにちは、音声合成の世界へようこそ" >text.txt
curl -s \
-X POST \
"localhost:50021/audio_query?speaker=1"\
--get --data-urlencode text@text.txt \
> query.json
curl -s \
-H "Content-Type: application/json" \
-X POST \
-d @query.json \
"localhost:50021/synthesis?speaker=1" \
> audio.wav |
This comment was marked as resolved.
This comment was marked as resolved.
何を試したか: 音声合成を行っている
|
@Hiroshiba |
@tarepan 確認ありがとうございます!! 新しくリークするという情報は上がってないです。 |
@Hiroshiba |
新規で建てるか迷ったんですが、重複に近い気がしたのでここに書かせていただきます。 環境OS: ArchLinux x86_64(Kernel 6.7.6-arch-1-1) 概要上記環境で長期使用していると、突然音声を生成してくれなくなることがあり、ログを確認するとエラーが出ている、VRAMを確認すると使い尽くしている、VOICEVOX Engineを再起動すると直る。 検証時に出た同様のエラー
再現と検証起動後に一定以上の数の話者を使うとVRAMを使い尽くすと予想したので以下の検証を行った。 検証環境は上記の環境。 自作のBotに話者/スタイルの切り替え機能があるのでそれを利用し、VOICEVOX Engine起動時からVRAMを食い尽くし、生成できなくなるまでの話者数、およびスタイル数を確認する。 これは、以下のコードで Bot内部のコードの意訳const { default: axios } = require('axios');
const rpc = axios.create({baseURL: 'http://127.0.0.1:50021', proxy: false});
async function synthesis(text, voice_id){
const query = await rpc.post(`audio_query?text=${encodeURI(text)}&speaker=${voice_id}`, {headers: { 'accept': 'application/json' }});
const query_data = query.data;
query_data.speedScale = 1;
query_data.pitchScale = 0;
query_data.intonationScale = 1;
query_data.volumeScale = 1;
const synth = await this.#rpc.post(`synthesis?speaker=${voice_id}`, JSON.stringify(query_data), {
responseType: 'arraybuffer',
headers: {
"accept": "audio/wav",
"Content-Type": "application/json"
}
});
}
let text = "声をずんだもん(ノーマル)に変更しました。";
let voice_id = 0;
await synthesis(text, voice_id); 話者は製品版VOICEVOXのキャラクター一覧と同様の順番を上から、スタイルはずんだもんのスタイルを上から順にリクエストした。 結果はスタイルは9スタイル目、話者は8話者目でエラーが出て生成できなくなった。 余談だが、検証では既に使った話者/スタイルはエラーが出なかったが、長期運用していたBot側では完全に生成できなくなる場合もあった。 余談などこのIssueで言われている「リクエストが増えるとVRAMがリークする」はおそらくこの問題と同一の「利用した話者数が増えたことによってVRAMが大量に消費される」であると思います。 私の環境が8年前のGPUなので流石にスペック不足が原因だと思い、長らく耐えつつ使ってたんですが、一応かなり実用的な速度で使えること、自分の環境があまり一般的でない特殊なユースケースであることを踏まえ、一応Issueを建てようとしたところ、こちらを見つけました。 改善案としては、このIssueのVRAMをリフレッシュする機能以外に、GPUで失敗した場合にCPUで再生成するはアリなのかなとは思います。 では、長文な上に駄文失礼しました。 |
@tarepan はい! リークがないならcloseで良いのではと・・・思ってたのですが、 @notoiro さんのコメントを見てちょっと思いが変わりました 🙇 @notoiro 確かにリークは実はないのかもとちょっと思いました! ただそれはさておき、リフレッシュする方法を提供するべきかどうかは結構話が違うなと思いました。 @tarepan ということでリフレッシュ機能はおそらくあった方が良いと思いました! |
@Hiroshiba |
本 Issue は直近 180 日間で活動がありません。今後の方針について VOICEVOX チームによる再検討がおこなわれる予定です。 |
内容
VOICEVOXを読み上げとして使っているとVRAMがずっと増えるので定期的に削減してくれるようにしてほしいです。
Pros 良くなる点
PCへの負荷が減る
Cons 悪くなる点
不明
実現方法
大量のリクエストを長時間処理しているとRAM及びVRAMを無限に使用する
VOICEVOXのバージョン
0.13.2
OSの種類/ディストリ/バージョン
その他
なし
The text was updated successfully, but these errors were encountered: