-
Notifications
You must be signed in to change notification settings - Fork 118
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
Rust化の追従をしていく #213
Comments
Windows上でcargo testするとエラーになる件issue作りました VOICEVOX/onnxruntime-rs#3 |
そういえばopen_jtalkの辞書読み込み時のpathをutf8に変更した影響がengine側に出てるかもですね |
あ~~忘れていました。こちらですね。一覧に書き足します。 |
合成結果が以前と同じかどうかをチェックしないとなので、ちょっとタスクを足しました。 |
https://github.com/VOICEVOX/voicevox_core/releases/tag/0.13.0-rust.0 で配布されている製品版コアについて、macOS において
がうまくいくことを確認しました! |
windows版Rustコア試してみました! windows DirectMLを試したところ、おそらくGPUを使わずに生成しているっぽい挙動をしていました。 |
C++版と挙動が違うってことですかね? |
LinuxのCPU版は動きました(GPU版はC++版もSEGVする状態だったので確認できていません) |
ですです! |
@Hiroshiba RustのDirectMLでCPU使用率が上がる件これが関係してるかもです
|
改めてコード見た感じだとRust版はこれが抜けてるようなのでそれが原因かも |
LinuxのGPUですが、古いlibonnxruntime_providers_{cuda,shared}.soを読んでいただけだったのでORT 1.11.1のに入れかえたら普通に動きました。 |
検証ありがとうございます! |
はい。coreのリリースにはWindows版と同様に |
これは解決したはず |
0.13.0-rustで動作確認してきました。 コア生成のコードはこれです。雰囲気で読めると思います。 また、複数回生成させるとバグりました。(initialize->voicevox_tts->voicevox_tts) == 初期化中... 完了
> 同じ、文章、です。完全に、同一です。
生成中... 完了:144940バイト、アドレス:3c925f68
> 同じ、文章、です。完全に、同一です。
生成中... 完了:415276バイト、アドレス:e8eed00 |
Rust側のテストコードでも確認しました。なんかサイズが増えているっぽい? #[rstest]
#[async_std::test]
async fn voicevox_tts_loop_works() {
let internal = Internal::new_with_mutex();
internal.lock().unwrap().initialize(false, 0, true).unwrap();
let open_jtalk_dic_dir = download_open_jtalk_dict_if_no_exists().await;
internal
.lock()
.unwrap()
.voicevox_load_openjtalk_dict(open_jtalk_dic_dir.to_str().unwrap())
.unwrap();
let text = "同じ、文章、です。完全に、同一です。";
let first_tts_wav = internal.lock().unwrap().voicevox_tts(text, 1).unwrap();
assert_ne!(0, first_tts_wav.len());
for i in 0..3 {
let wav = internal.lock().unwrap().voicevox_tts(text, 1).unwrap();
assert_eq!(first_tts_wav.len(), wav.len(), "index:{i}");
}
} 結果 > cargo test -- voicevox_tts_loop_works
Compiling voicevox_core v0.1.0 (/home/qwerty2501/projects/qwerty2501/voicevox_core/crates/voicevox_core)
Finished test [unoptimized + debuginfo] target(s) in 6.15s
Running unittests src/lib.rs (target/debug/deps/core-0c73abe9c87fb1c8)
running 1 test
test internal::tests::voicevox_tts_loop_works ... FAILED
failures:
---- internal::tests::voicevox_tts_loop_works stdout ----
-------------- TEST START --------------
thread 'internal::tests::voicevox_tts_loop_works' panicked at 'assertion failed: `(left == right)`: index:0
Diff < left / right > :
<164396
>477740
', crates/voicevox_core/src/internal.rs:747:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
internal::tests::voicevox_tts_loop_works
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 72 filtered out; finished in 6.58s |
ちょっとconfigure.pyについて考えていることがあるのでコメントに残しておきます
|
提案ごもっともだと思います。手軽に使えるようにするためには、エンジンやエディタと同様に、全部入りを配布するのが手っ取り早いと思います。
releasesに載せられるファイルの最大である2GBを超す可能性があり、分割が必要で結構リリースが複雑になります。 discordでは避けたい旨を伝えたかもですが、7zにして配布すればそこまで手間ではないかもと思いました! 追記:あ、でもディストリビューションごとに×3個とかになると、releasesに大量にファイルが並んで結局使い勝手が落ちるかもですね・・・。 |
cudaがサイズ大きいのでcudaを特別扱いし、サイズが許容できないサイズになりそうであればcoreが入ったzipとcuda関連のライブラリが入ったzipに分けるで良いような気がします。 |
CUDAをダウンロード形式にすると、あと別パッケージが必要なのはDirectMLだけなので、そっちもダウンロードで良いかもとちょっと思いました・・・! |
DirectMLについてはかなりサイズが小さそう?なので一緒にダウンロードで良いかなと思ってます |
@Hiroshiba cudaのzip分けるか分けないか判断する参考にしたいのですが、具体的にどの程度のサイズを超えたら分けたほうが良いと考えてますか? |
1.3GBくらいを超えると怖い(避けたい)、1.5GB超えるとだいぶ怖い、という感覚です。 そういえば、CUDA版が必要なのはlinuxだけかなと思うのですが、linuxだとたしかaptとかyumでCUDA入れられるはずです。 |
同梱させる場合でもこれまで通りのcoreとonnxruntimeのみのzipもmin版として提供させます。これはDirectML版でも同様 |
既存のものでcuda関連のもの含めてzip化してみたんですが余裕で1.5GB超えたんでやはり分けたほうが良さそうです |
おーーー・・・なるほどです! 検証たすかります!! |
DirectMLについてはGPU使えるようになった?はずなのでどなたか確認お願いします |
確認してみたところ、エラーが発生したっぽいので報告します。
|
CUDA版でも試してみたところ、こんな感じのエラーが表示されました。
一応、同じディレクトリ内にあるdllの一覧はこちらです。
(追記)あ!これ普通にCUDA系のdllがないからなだけかも・・・。 |
エラーメッセージの取得に失敗してるようなのでまずそこを直してなぜ失敗してるかわかるようにしないといけないかもです 今わかってることを整理すると、 ここ でエラーが発生しているということはわかっています。またこの実装ですが他のort 呼び出しと違って OrtApiから呼び出しを行っていないです。他のAPIだと このように OrtApiオブジェクトから呼び出しを行っています。 CUDA版についてはdllが足りないかもですね |
|
@qryxip そのあたりは ここ のCStringからStringに変換する際のエラーなので単純に無効なデータ渡されたらこのエラーが出るようです。 |
エラーメッセージを voicevox_core/crates/voicevox_core/Cargo.toml: derive-getters = "0.2.0"
derive-new = "0.5.9"
once_cell = "1.10.0"
-onnxruntime = { git = "https://github.com/VOICEVOX/onnxruntime-rs.git", version = "0.1.0" }
+onnxruntime = { git = "https://github.com/qryxip/onnxruntime-rs.git", rev = "b8f9aad523e412a270e3a0e53cd61c9f65e5f93d" }
serde = { version = "1.0.143", features = ["derive"] }
serde_json = "1.0.83"
thiserror = "1.0.32" |
DirectML版が動かない件について調べたところ、対応するDirectML.dllがなかったため発生していたエラーなようでした。 UTF-8エラーが出る周りに関してもうちょっと調べてみました。 thread 'publish::tests::is_model_loaded_works::case_1' panicked at 'called
`Result::unwrap()` on an `Err` value: LoadModel(SourceError(Failed to create session:
Error calling ONNX Runtime C function: Exception during initialization: ))',
crates\voicevox_core\src\publish.rs:612:57 じゃあなんでpython上でcore.dllを使う形だとエラーが出るのかですが・・・actionsやwindows環境といった要因が絡んでややこしいのと、python上で動かさない限りエラーは出ない気がするのと、もうエラーが出る原因がわかったのとで、まあ調査しなくてもいいかなという気持ちが正直なところです・・・! |
まあ動いたんでいいんじゃないですか |
内容
#128 の追従タスクを一覧化します。
その他
確認等できたらコメントをお願いします!
The text was updated successfully, but these errors were encountered: