forked from fishaudio/Bert-VITS2
-
Notifications
You must be signed in to change notification settings - Fork 105
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
ONNX 推論時のメモリ消費量を大幅に削減 & 前回 PR の実装ミスの修正 #194
Open
tsukumijima
wants to merge
13
commits into
litagin02:dev
Choose a base branch
from
tsukumijima:master
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
g2pの内容をjsonで取れるAPI
Add /g2p (Update server_fastapi.py)
…orrect, so tokenization was not performed correctly
I have found that half-precision has little effect on speech synthesis quality and, depending on the environment, can reduce file size and memory usage by half, so I have decided to use FP16.
…mory after inference
…nt excessive memory consumption during the inference session of the BERT model
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
表題の通りです。
1. ONNX 推論時のメモリ消費量を大幅に削減
ONNX 版の BERT モデルを FP16 に変換したところ、音声合成品質にはほとんど影響なくファイルサイズやメモリ消費量を節約できることが判明したため、initialize.py 実行時にダウンロードされる ONNX 版 BERT モデルを FP16 版に切り替えました。
また、ONNX + CPU 推論時に発生していたメモリリーク問題(推論処理を行えば行うほどメモリが圧迫されていく)に関して、ONNX Runtime のデフォルトが富豪的にメモリを消費する構成になっていることと、Transformer アーキテクチャである BERT が入力系列長に応じてメモリを消費することが原因と判明しました。
こちらは ONNX Runtime の SessionOptions・RunOptions を調整することで解決しており、大幅なメモリ消費量削減を実現しています。
Note
この変更により BERT モデルの推論速度が Core i5-13400 環境で 0.2 ~ 0.3 秒程度低下するトレードオフがありますが、CPU 推論は元々 CUDA 推論に比べてあまり早くないことから、メモリ消費量の削減を優先しました。
なお、アプリケーション側で
onnx_bert_models.load_model()
実行時にenable_cpu_mem_arena=True
を渡すことで、BERT モデルの CPU 推論時にメモリアリーナが構築され、従来通りのパフォーマンスを維持できます(その代わり、若干緩和されているものの依然メモリを食います)。前回 PR の実装ミスの修正
前回のプルリクエストで修正できていなかった実装ミスの修正となります。
TTSModel.unload()
実行時に PyTorch がインストールされていないと (ONNX 推論のみ利用する状態でも) エラーが発生する問題を修正deberta-v3-large
) のトークナイザーの Fast Tokenizer への変換処理 (convert_bert_onnx.py
内) の実装が誤っており、結果英語の g2p 処理がうまく行われない(未知語が「unknown」と読み上げられてしまうなど)問題を修正そのほか
テストコードが単一文字列での音声合成のみをテストする形でパフォーマンス計測上不都合だったことから、複数文を音声合成する形に変更しました。
また、
convert_bert_onnx.py
では FP32 版と FP16 版両方の ONNX BERT モデルを変換できるように改良してあります。以上、よろしくお願いいたします。