VOICEVOX / voicevox_core

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア
https://voicevox.hiroshiba.jp/
MIT License
833 stars 115 forks source link

Windows向けONNX RuntimeのビルドでDirectMLとCUDAが一緒くたになっている #804

Open qryxip opened 4 days ago

qryxip commented 4 days ago

不具合の内容

https://github.com/VOICEVOX/voicevox_core/pull/802#issuecomment-2202402961

現象・ログ

割愛

再現手順

割愛

期待動作

VOICEVOXのバージョン

N/A

OSの種類/ディストリ/バージョン

その他

DirectML版とCUDA版を分離する場合、段取りとしてはonnxruntime-builder (ビルドしなおし) → VOICEVOX/ort (リストの更新) → voicevox_core (voicevox-ortの更新)となるはず。

Hiroshiba commented 3 days ago

まあダウンロードサイズは50MBくらいなので、一緒でもいいかもですね・・・!! VOICEVOX/ort的に別れていた方が都合良さそうであれば(本家からの変更が少なくて済みそうであれば)、onnxruntime-builder側を変えてあげる方が綺麗かも?

qryxip commented 3 days ago

300MBは解凍後ですね。

drwx------    - ryo ryo 2024-07-02 17:29 ./voicevox_core-windows-x64-directml-999.999.999
.rw-r--r--  17M ryo ryo 2024-07-02 17:29 ├── onnxruntime.dll
.rw-r--r-- 324M ryo ryo 2024-07-02 17:29 ├── onnxruntime_providers_cuda.dll
.rw-r--r--  11k ryo ryo 2024-07-02 17:29 ├── onnxruntime_providers_shared.dll
.rw-r--r--  11k ryo ryo 2024-07-02 17:29 ├── README.txt
.rw-r--r--   12 ryo ryo 2024-07-02 17:29 ├── VERSION
.rw-r--r-- 3.6M ryo ryo 2024-07-02 17:29 ├── voicevox_core.dll
.rw-r--r--  54k ryo ryo 2024-07-02 17:29 ├── voicevox_core.h
.rw-r--r--  18k ryo ryo 2024-07-02 17:29 └── voicevox_core.lib

microsoft/onnxruntimeだとCPU版とDirectML版とCUDA版を分けてて、pykeio/ortだとCPU&DirectML版とCUDA版という分け方にしてますね。

正直onnxruntime_providers_cuda.dllみたいなのが入ってくるのは見通しが悪くなるし混乱もしそうなので、microsoft/onnxruntime式か、あるいはpykeio/ort式でもいいんじゃないか?と思っています。

あとsupported_devices{ "cuda": true, "dml": true }を返すというのもありますが、まあこれは #802 でOnnxruntimeのメソッドになるということもあり「ONNX Runtime (≠ VOICEVOX CORE)が対応しているデバイス情報」というドキュメント/仕様にしてしまってもよいかなと思ってます。 (SupportedDevices::THISstd::ops::BitAnd実装を追加して「VOICEVOX COREとONNX RuntimeとでGPU対応がそれぞれ異なる」ということを表明する、といった工夫もできそうです)

Hiroshiba commented 3 days ago

正直onnxruntime_providers_cuda.dllみたいなのが入ってくるのは見通しが悪くなるし混乱もしそうなので、microsoft/onnxruntime式か、あるいはpykeio/ort式でもいいんじゃないか?と思っています。

良いと思います!どっちの仕様にしようか迷いますねぇ。 まあonnxruntime式(全部バラバラ)のが便利そうではありますが・・・。


supported_devicesの仕様は・・・あれ、今ってcudaとdml別々に返してないんでしたっけ。 だったら{ "cuda": true, "dml": true }的なのを返したほうが便利だと感じますね!!