VOICEVOX / onnxruntime-builder

VOICEVOX COREで利用するonnxruntimeのビルドを行うリポジトリ
MIT License
5 stars 14 forks source link

ONNX Runtime v1.18をビルドする #46

Open qryxip opened 1 month ago

qryxip commented 1 month ago

内容

ONNX Runtime v1.18をビルドします。

Pros 良くなる点

Cons 悪くなる点

実現方法

現状では以下の2つのビルドだけ通らない状態です。

調査した結果、Windowsでは microsoft/onnxruntime#20257 、macOSでは microsoft/onnxruntime#19655 により上記のエラーとなっているらしいことがわかりました。ただしmicrosoft/onnxruntimeでのAzure Pipelinesでは特別なワークアラウンドも無く普通にビルドされているようです。この二つを解明して対処できれば、v1.18がビルドできるようになります。

      - name: Checkout
        uses: actions/checkout@v4
        with:
          repository: microsoft/onnxruntime
          submodules: true
          #ref: v${{ env.ONNXRUNTIME_VERSION }}
          #ref: b8c90beef2b1c9d9297365a9a8f49bb779c84147 # 2024-04-19+09:00 : windows: error, macos: error
          #ref: 80f274ca6f2f4572d827edd6dc7f736d7a8c036a # 2024-01-17+09:00 : windows: ?    , macos: ok
          #ref: 19ff4a6d6c420d4d43c92d57ff45313f00b49336 # 2024-03-21+09:00 : windows: ?    , macos: error
          #ref: 1508c2ee39023274417417b290303cf058ceedd6 # 2024-02-15+09:00 : windows: ?    , macos: ok
          #ref: 2a857d9a86ca3049829256df3347521069ccd6b4 # 2024-03-01+09:00 : windows: ?    , macos: ok
          #ref: efad5bbc5aed1717200d3e8f6ddd253394af4b99 # 2024-03-10+09:00 : windows: ok   , macos: error
          #ref: e93a860819545ea64acfe36e19e2b954389d48bf # 2024-03-06+09:00 : windows: ?    , macos: error
          #ref: a0521f899e9d495d57ae044bd4a1fe4d17155782 # 2024-03-02+09:00 : windows: ?    , macos: error
          #ref: f06164ef8b8de42dd67ca2137f6996cdc87a3f72 # 2024-03-02+09:00 : windows: ok   , macos: ok
          #ref: e1e292f94c4f125bfd95703961f32718a032f921 # 2024-04-01+09:00 : windows: ok   , macos: error
          #ref: e4c0cb2b9a0dde05c066556aa73bf6ffdfa8013d # 2024-04-19+09:00 : windows: error, macos: ?
          #ref: 50bd4571ace1b9b78a832015e75677f1b31ede8b # 2024-04-12+09:00 : windows: ok   , macos: ?
          #ref: 01acc25d9dd695255ae5c44ec377576408e1081c # 2024-04-13+09:00 : windows: ok   , macos: ?
          #ref: 6bd6d879a351e2ed4df84357f826d3df60539f34 # 2024-04-19+09:00 : windows: ok   , macos: ?
          #ref: f664f912980ac7adce2cf3ecaade6a70cfb97401 # 2024-04-19+09:00 : windows: error, macos: ?
          #ref: 76434907fb7d9dc6ae5debc225959b666eb409f7 # 2024-04-19+09:00 : windows: error, macos: ?
          ref: c47f446f25cf4dc97931f9e3326cf0d3545ed02b  # 2024-04-18+09:00 : windows: ok   , macos: ?

Windowsについてはこれから調査し、調査の進捗をここに書いていこうと思います。

macOSについては-Donnxruntime_ENABLE_CPUINFO=OFFを入れればビルドできることがわかっています。ただcpuinfoが元から必要だったのかそうではなかったのかがわからないので、こちらもこれから調査しようと思います。 (ちなみに該当のPRのdiffを見ると明らかにARMのプラットフォーム全体に影響しているのにも関わらずPRのdescriptionでは言及されておらず、ONNX Runtime 1.18.0のリリースノートにもWindowsのことしか書かれていません)

VOICEVOXのバージョン

その他

Hiroshiba commented 1 month ago

issue作成ありがとうございます!!! 進めてくださって本当にありがとうございます 🙇

WindowsでCUDAとDirectMLの両方を有効にしたビルド

最悪これは切ってもいい気がしています! 少なくともVOICEVOXにとっては、DMLがCUDAを包括できていると仮定できるので・・・。 (正確にはそれぞれサポートされているopが違うだろうから、片方で動くけど片方で動かない関数などがあるはず)

onnxruntime-osx-arm64 (macOSのAArch64のビルド)

こっちは。。。。。。欲しいですね。。。。。。。 またエラーメッセージでググったりしたら解決策出てこないですかね。。。

qryxip commented 1 month ago

最悪これは切ってもいい気がしています! 少なくともVOICEVOXにとっては、DMLがCUDAを包括できていると仮定できるので・・・。

そうですね! 切っちゃいましょうか!


onnxruntime-osx-arm64の方ですが、次のうちどちらかを入れればビルドできることがわかりました。

  1. -Donnxruntime_ENABLE_CPUINFO=OFF (このissueのdescriptionの方にも書いたもの)
  2. -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 property OSX_ARCHITECTURES or CMAKE_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

Hiroshiba commented 4 weeks ago

色々検証ありがとうございます!! 結論から言うと、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が消えるとき?)なので、その時にはもうサポート切ってもいいのかもしれない。

・・・という感じのコメントまで!!

qryxip commented 4 weeks ago

CMAKE_SYSTEM_PROCESSORはターゲットの方ですね。ホストのアーキテクチャはCMAKE_HOST_SYSTEM_PROCESSORです。なんでこんな名前なんだとは思います。

ちなみに今回の調査と試行はずっとmacos-14で行っていました。macos-14でもmacos-12でもリンクエラーとなり、-DCMAKE_SYSTEM_PROCESSOR=aarch64で直ります。

Hiroshiba commented 4 weeks ago

CMAKE_SYSTEM_PROCESSORはターゲットの方ですね

おっとなるほどです!!

ちなみに今回の調査と試行はずっとmacos-14で行っていました

あれーーーなるほどです。 arm64環境でもエラーが出るのはかなりよくわからないですねぇ・・・。

となると、もうCMAKE_SYSTEM_PROCESSORを指定する形でいい気がしました! なんかしらメモ書きコメントを書いた方が良さそう感。どう書けばいいのかわからないけど・・・。