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

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

Open
2 of 3 tasks
qryxip opened this issue Aug 14, 2024 · 5 comments
Open
2 of 3 tasks

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

qryxip opened this issue Aug 14, 2024 · 5 comments

Comments

@qryxip
Copy link
Member

qryxip commented Aug 14, 2024

内容

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

Pros 良くなる点

Cons 悪くなる点

実現方法

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

  • onnxruntime-win-x64-gpu (WindowsでCUDAとDirectMLの両方を有効にしたビルド。--use_cudaのみのものと--use_dmlのみのものは普通にビルドできる)

    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2255,21): error C2065: 'ort_dml_api': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2256,19): error C2065: 'dml_objects': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2288,21): error C2065: 'ort_dml_api': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2290,23): error C2065: 'dml_objects': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2301,23): error C2065: 'dml_objects': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2312,19): error C2065: 'dml_objects': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
    D:\a\onnxruntime-builder\onnxruntime-builder\onnxruntime\test\shared_lib\test_inference.cc(2322,23): error C2065: 'dml_objects': undeclared identifier [D:\a\onnxruntime-builder\onnxruntime-builder\build\Release\onnxruntime_shared_lib_test.vcxproj]
  • onnxruntime-osx-arm64 (macOSのAArch64のビルド)

    Undefined symbols for architecture arm64:
      "_cpuinfo_arm_mach_init", referenced from:
          _cpuinfo_initialize in libcpuinfo.a[4](init.c.o)
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

調査した結果、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のバージョン

  • Windows
  • macOS
  • Linux

その他

@Hiroshiba
Copy link
Member

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

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

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

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

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

@qryxip
Copy link
Member Author

qryxip commented Aug 15, 2024

最悪これは切ってもいい気がしています!
少なくとも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
Copy link
Member

Hiroshiba commented Aug 15, 2024

色々検証ありがとうございます!!
結論から言うと、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
Copy link
Member Author

qryxip commented Aug 15, 2024

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

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

@Hiroshiba
Copy link
Member

Hiroshiba commented Aug 15, 2024

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

おっとなるほどです!!

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants