-
Notifications
You must be signed in to change notification settings - Fork 120
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
DirectML版の推論速度が遅いっぽい #422
Comments
DirectML利用時はVRAM使用量は0.13のときと同様程度に上がっていました。 またDirectML版実行時にこのようなログが出ていました。 [INFO] lib.rs: "Some nodes were not assigned to the preferred execution providers which may or may not have an negative impact on performance. e.g. ORT explicitly assigns shape related ops to CPU to improve perf." onnxモデルは0.14.0と0.13.3で変更がないはずですが、念のために一旦確認してみます。 |
こちら変更がありました。ログを出さないようにするために予め最適化したonnxを保存するようにしたためでした。 続いて0.13.3のときと0.14.0のときのonnxモデルを用いて、今のRust版コードを使って速度を比較したいと思います。 |
わかりました、onnxの最適化が問題っぽかったです!! |
原因がわかりました。 そもそも最適化をかけているのはコアのログが大量に出るのを防ぐためでした。 (ちなみに最適化を予めかけなくても、onnxruntimeが読み込んだときに勝手に最適化してくれます。あくまでログを出ないようにするために事前に最適化をかけていた感じです。。) Rust用TTSテストコードメモ // voicevox_ttsのテスト
#[rstest]
#[case(
"hello,hello,hello,hello,hello",
0,
VoicevoxTtsOptions {
kana: false,
enable_interrogative_upspeak: false,
},
VoicevoxResultCode::VOICEVOX_RESULT_OK
)]
fn voicevox_tts_works(
#[case] text: &str,
#[case] speaker_id: u32,
#[case] options: VoicevoxTtsOptions,
#[case] expected: VoicevoxResultCode,
) {
let mut initialize_options = voicevox_make_default_initialize_options();
initialize_options.open_jtalk_dict_dir =
"C:\\Users\\hihok\\Github\\voicevox_core\\hiho_voicevox_core\\open_jtalk_dic_utf_8-1.11"
.as_ptr() as *const c_char;
initialize_options.acceleration_mode =
VoicevoxAccelerationMode::VOICEVOX_ACCELERATION_MODE_GPU;
let actual = voicevox_initialize(initialize_options);
assert_eq!(VoicevoxResultCode::VOICEVOX_RESULT_OK, actual);
let actual = voicevox_load_model(0);
assert_eq!(VoicevoxResultCode::VOICEVOX_RESULT_OK, actual);
let mut output_wav_length: usize = 0;
let mut output_wav: *mut u8 = std::ptr::null_mut();
// とりあえず1回
let actual = unsafe {
voicevox_tts(
text.as_ptr() as *const c_char,
speaker_id,
VoicevoxTtsOptions {
kana: options.kana,
enable_interrogative_upspeak: options.enable_interrogative_upspeak,
},
&mut output_wav_length as *mut usize,
&mut output_wav as *mut *mut u8,
)
};
assert_eq!(expected, actual);
// 10回やって時間測定
let start = std::time::Instant::now();
for _ in 0..10 {
let actual = unsafe {
voicevox_tts(
text.as_ptr() as *const c_char,
speaker_id,
VoicevoxTtsOptions {
kana: options.kana,
enable_interrogative_upspeak: options.enable_interrogative_upspeak,
},
&mut output_wav_length as *mut usize,
&mut output_wav as *mut *mut u8,
)
};
assert_eq!(expected, actual);
}
let end = std::time::Instant::now();
println!("{}ms", end.duration_since(start).as_millis());
unsafe {
voicevox_wav_free(output_wav);
}
} |
問題を解決した製品版をリリースしました! |
不具合の内容
エンジン側で発覚し、コアで測定した結果どうやらコアの時点で遅いっぽいことがわかりました。
現象・ログ
0.14.0のコア(wheel)で、CPU/GPUで2回ずつ計測
0.13.3を用いた場合、(エンジン経由で)2秒で完了したのでおそらく0.14で遅くなったのかなと思っています。
再現手順
0.14.0のDirectML版で実行してみる
VOICEVOXのバージョン
0.14.0
OSの種類/ディストリ/バージョン
その他
検証コード(wheel版をインストールしました)
The text was updated successfully, but these errors were encountered: