Open qryxip opened 1 month ago
issue作成ありがとうございます!!! 進めてくださって本当にありがとうございます 🙇
WindowsでCUDAとDirectMLの両方を有効にしたビルド
最悪これは切ってもいい気がしています! 少なくともVOICEVOXにとっては、DMLがCUDAを包括できていると仮定できるので・・・。 (正確にはそれぞれサポートされているopが違うだろうから、片方で動くけど片方で動かない関数などがあるはず)
onnxruntime-osx-arm64 (macOSのAArch64のビルド)
こっちは。。。。。。欲しいですね。。。。。。。 またエラーメッセージでググったりしたら解決策出てこないですかね。。。
最悪これは切ってもいい気がしています! 少なくともVOICEVOXにとっては、DMLがCUDAを包括できていると仮定できるので・・・。
そうですね! 切っちゃいましょうか!
onnxruntime-osx-arm64
の方ですが、次のうちどちらかを入れればビルドできることがわかりました。
-Donnxruntime_ENABLE_CPUINFO=OFF
(このissueのdescriptionの方にも書いたもの)-DCMAKE_SYSTEM_PROCESSOR=aarch64
(さっき発見)どうも我々のv1.17のビルドの時点からこの分岐(↓)に突入していたらしく、にも関わらず microsoft/onnxruntime#19655 でcpuinfoを必ず使うようになった結果リンクエラーになったと私は推測しています。上記の2.を入れればこの分岐には入らなくなります。 https://github.com/pytorch/cpuinfo/blob/959002f82d7962a473d8bf301845f2af720e0aa4/CMakeLists.txt#L90-L93
二つの方法を比較するとしてまず1.の方法についてですが、上記の通り(少なくとも)このリポジトリのonnxruntime-osx-arm64
ではcpuinfoは元々使われていなかったと思われます。ただ microsoft/onnxruntime#20769 (v1.18には入っていない)やcpuinfo周りのコードを見るに、cpuinfoは使えるなら使えるに越したことはないと捉える方がよいのかなと思っています。
2.の方法についてですが、懸念があるとするなら貢献者(≠ ユーザー)向けのドキュメントに以下のような文章があることです。ただAzure Pipelinesの方もどうなっているか結局よくわかっておらず(x86_64の方のビルドログならあった)、もうこの文章を無視してcpuinfoのためだけにCMAKE_SYSTEM_PROCESSOR
を設定してしまうのがいいかなと思っています。
macOS: Don't use
CMAKE_SYSTEM_PROCESSOR
. First, please check if target propertyOSX_ARCHITECTURES
orCMAKE_OSX_ARCHITECTURES
was set. Please note it is a list which could contain multiple values, like "arm64;x86_64". Otherwise please useCMAKE_HOST_SYSTEM_PROCESSOR
.
ということで、2.の方法で良ければv1.18はビルドできると思います。 https://github.com/qryxip/onnxruntime-builder/actions/runs/10398794083
色々検証ありがとうございます!! 結論から言うと、2の方法でも良いと思います!
ただ、もっと適した方法かもしれないのを思いついたのでコメントします。 検証のためにまた試す必要が出てきてしまうので、そこまでする?という感じでしたらこの方法でも良いと思います!
多分ですが、本当はCMAKE_SYSTEM_PROCESSOR
を設定しない方がいい気がします。
これはビルドしてるシステム側のプロセッサーなので、書き換えるのは本末転倒なはず。
今大丈夫でもいずれ別のところでエラーが発生しうるかも。
何が問題かというとたぶん、cpuinfoはビルドしている環境でどうcpu情報を取得するかを考えてる気がするんですよね。
例えばmac arm64のcpuinfoを出るには、mac arm64環境でビルドすることを想定してる、みたいな。
だからCMAKE_SYSTEM_PROCESSOR
を見て判断してるんじゃないかなと。
で、Azureだったらちゃんとビルドできる理由としては、たぶんarm64版ビルドをarm64環境で行ってるんじゃないかなと。 だとしたらこちらも真似することは一応できて、macos arm64をビルドする時はx64環境のmacos-12ではなく、arm64環境のmacos-14にすれば状況は似るかもです。 これでシステムのアーキテクチャーに嘘をつくことなくビルドできるようになるのであれば、こっちの方が頑健かもです。
問題は2つあって、追加で検証する必要があるというの( 🙇 )、あとGithub Actionsでx64環境ビルドができなくなった時にx64を切るか、CMAKE_SYSTEM_PROCESSOR
を書き換えるかしないといけなくなる点があるなと。
まあGithub Actionsからx64 macが消えるのはもう少し先(macos-13が消えるとき?)なので、その時にはもうサポート切ってもいいのかもしれない。
・・・という感じのコメントまで!!
CMAKE_SYSTEM_PROCESSOR
はターゲットの方ですね。ホストのアーキテクチャはCMAKE_HOST_SYSTEM_PROCESSOR
です。なんでこんな名前なんだとは思います。
ちなみに今回の調査と試行はずっとmacos-14
で行っていました。macos-14
でもmacos-12
でもリンクエラーとなり、-DCMAKE_SYSTEM_PROCESSOR=aarch64
で直ります。
CMAKE_SYSTEM_PROCESSORはターゲットの方ですね
おっとなるほどです!!
ちなみに今回の調査と試行はずっとmacos-14で行っていました
あれーーーなるほどです。 arm64環境でもエラーが出るのはかなりよくわからないですねぇ・・・。
となると、もうCMAKE_SYSTEM_PROCESSOR
を指定する形でいい気がしました!
なんかしらメモ書きコメントを書いた方が良さそう感。どう書けばいいのかわからないけど・・・。
内容
ONNX Runtime v1.18をビルドします。
Pros 良くなる点
Cons 悪くなる点
実現方法
現状では以下の2つのビルドだけ通らない状態です。
onnxruntime-win-x64-gpu
(WindowsでCUDAとDirectMLの両方を有効にしたビルド。--use_cuda
のみのものと--use_dml
のみのものは普通にビルドできる)onnxruntime-osx-arm64
(macOSのAArch64のビルド)調査した結果、Windowsでは microsoft/onnxruntime#20257 、macOSでは microsoft/onnxruntime#19655 により上記のエラーとなっているらしいことがわかりました。ただしmicrosoft/onnxruntimeでのAzure Pipelinesでは特別なワークアラウンドも無く普通にビルドされているようです。この二つを解明して対処できれば、v1.18がビルドできるようになります。
Windowsについてはこれから調査し、調査の進捗をここに書いていこうと思います。
macOSについては
-Donnxruntime_ENABLE_CPUINFO=OFF
を入れればビルドできることがわかっています。ただcpuinfoが元から必要だったのかそうではなかったのかがわからないので、こちらもこれから調査しようと思います。 (ちなみに該当のPRのdiffを見ると明らかにARMのプラットフォーム全体に影響しているのにも関わらずPRのdescriptionでは言及されておらず、ONNX Runtime 1.18.0のリリースノートにもWindowsのことしか書かれていません)VOICEVOXのバージョン
その他