Skip to content
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のダウンロードをwindowsでのみ有効にするように修正 #2

Closed

Conversation

qwerty2501
Copy link

VOICEVOX/voicevox_core#210 (comment) でテストに失敗するため、Windows以外ではdirectmlを指定してあっても無視をして通常のダウンロードを行うように修正した

@@ -51,6 +51,18 @@ static ONNXRUNTIME_DIR_NAME: once_cell::sync::Lazy<String> =
|| format!("onnxruntime-{}-{}", TRIPLET.as_onnx_str(), ORT_VERSION,),
);

static DOWNLOAD_DIRECTML: once_cell::sync::Lazy<bool> = once_cell::sync::Lazy::new(|| {
if matches!(TRIPLET.os, Os::Windows) {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

build.rs上でtarget_os="windows"で判定しようとするとtargetがwindowsでも実行環境のOSで判定されてしまうため環境変数から判定されたTRIPLETでOSを判定するようにしている

@qwerty2501
Copy link
Author

再度レビューとなってしまい申し訳ありませんがよろしくおねがいします

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!

なのですが、仮にcargoビルド時のコマンドでfeatureを指定する方法があれば、コマンド引数で制御しちゃう手もありそうだなと思いました。

それが不可能なら、ビルド前にtomlを書き換える手もありそうですが…それは流石に強引すぎそう。

@qwerty2501
Copy link
Author

なのですが、仮にcargoビルド時のコマンドでfeatureを指定する方法があれば、コマンド引数で制御しちゃう手もありそうだなと思いました。

もちろんできますが、テスト時には --all-featuresにして全てのfeatureが有効になった状態でテストされるのをできるだけ維持したほうがよいかなと思ったのでこういう対応になってます

@Hiroshiba
Copy link
Member

Hiroshiba commented Aug 1, 2022

なるほどです。
ちゃんと影響を把握していないのですが、テストコードやらビルドコードがごちゃごちゃするよりは、-rs側に統一的なロジックがあるのも見通しが良いのかなと感じました!

@PickledChair
Copy link
Member

PickledChair commented Aug 2, 2022

@qwerty2501 @Hiroshiba

どちらの意見も納得できる部分があり、それぞれの案にトレードオフがあるので、どちらを採用すべきかちょっと迷うところがありますね……。ただ私の意見としては

cargoビルド時のコマンドでfeatureを指定する方法があれば、コマンド引数で制御しちゃう手もありそうだなと思いました。

という Hiroshiba さんの意見寄りです。

テスト時には --all-featuresにして全てのfeatureが有効になった状態でテストされるのをできるだけ維持したほうがよいかなと思ったのでこういう対応になってます

という qwerty さんの意見にも賛成できる点はあります。現状、voicevox_core の特別な feature は directml だけだと思いますが、今後何か feature が増えた場合も、--all-features オプションの指定があることにより、テストの設定を変えずに漏れなく全ての feature のコードをテストできて便利、という側面はあると思います。

ただ、Linux と macOS でも directml feature を設定してよいという状態なのは、実際にはビルド結果が directml feature を設定しない場合と同様になるという直感的でないものになり、個人的にはちょっと違和感があります(それよりはビルドが落ちてほしい)。

また、directml feature が設定されていると #[cfg(not(feature="directml"))] の条件でコンパイルされる部分のテストが行えないことになります。default のコンパイル条件のコードがテストされないことがある点で --all-features の指定は問題があるかもしれません(むしろ default のコードの方が一般的なケースなので優先的にテストされてほしい)。

以上より、voicevox_core 側のテストにおける --all-features の指定をやめて、特にテストしたい feature がある場合は明示的に指定して追加のテストをするという方が好ましい感じがしたのですが、いかがでしょうか……?

@qwerty2501
Copy link
Author

たしかに--all-featuresだと not(feature="directml") のようなコードが増えた場合その部分がテストできなくなりますね。
そういう意味だとテスト実行時に必要なfeatureを指定できるようにするのが正のように思えてきました
このPRについては一度closeし、voicevox_coreのPRに対して修正をかけるようにします

@qwerty2501 qwerty2501 closed this Aug 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants