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

gh actionsで追加およびmanylinuxでビルドできるように変更 #693

Open
wants to merge 33 commits into
base: main
Choose a base branch
from

Conversation

tuna2134
Copy link

@tuna2134 tuna2134 commented Nov 25, 2023

内容

PyPIにアップロードするにあたって、生成されるwheelのプラットフォームタグが対応していないため

関連 Issue

close #691

その他

@tuna2134
Copy link
Author

🔐 Using trusted publisher for upload
🚀 Uploading 30 packages
💥 maturin failed
  Caused by: 💥 Failed to upload "voicevox-0.0.0-cp310-cp310-linux_aarch64.whl" (1.5 MB)
  Caused by: Failed to upload the wheel with status 400: <html>
 <head>
  <title>400 Binary wheel 'voicevox-0.0.0-cp310-cp310-linux_aarch64.whl' has an unsupported platform tag 'linux_aarch64'.</title>
 </head>
 <body>
  <h1>400 Binary wheel 'voicevox-0.0.0-cp310-cp310-linux_aarch64.whl' has an unsupported platform tag 'linux_aarch64'.</h1>
  The server could not comply with the request since it is either malformed or otherwise incorrect.<br/><br/>
Binary wheel &#x27;voicevox-0.0.0-cp310-cp310-linux_aarch64.whl&#x27; has an unsupported platform tag &#x27;linux_aarch64&#x27;.

@tuna2134
Copy link
Author

ちなみにx86_64でも起きます。

@Hiroshiba
Copy link
Member

Hiroshiba commented Nov 25, 2023

PRありがとうございます!
そもそもauditwheelは普通ONにする感じなんでしょうか。

Linuxでlibonnxruntime.so.*の不在を許してもらう

こちらのコメントがスルーされてるかもです。
このコメント通りだと、falseにするとビルドが通らないかも・・・?

@tuna2134
Copy link
Author

PRありがとうございます! そもそもauditwheelは普通ONにする感じなんでしょうか。

Linuxでlibonnxruntime.so.*の不在を許してもらう

こちらのコメントがスルーされてるかもです。 このコメント通りだと、falseにするとビルドが通らないかも・・・?

手元環境で通ったので、ひょっとしたらwheelに同胞しないようにするためなのではないのでしょうか、、、?
当時の担当者ではないのでなんとも言えないのですが、、、

@Hiroshiba
Copy link
Member

@tuna2134 なるほどです。
少なくともコメントは消しておいた方が良さそうかもとか思いました!

Github actions見る感じエラーになってそうでした。audit-wheel関連だと思ったのですが、なんかエラーメッセージがよくわかんないですね。。。
https://github.com/VOICEVOX/voicevox_core/actions/runs/6986624508/job/19012505094?pr=693

💥 maturin failed
  Caused by: Failed to parse patchelf version
  Caused by: unexpected end of input while parsing minor version number

@tuna2134
Copy link
Author

tuna2134 commented Nov 25, 2023

@tuna2134 なるほどです。 少なくともコメントは消しておいた方が良さそうかもとか思いました!

Github actions見る感じエラーになってそうでした。audit-wheel関連だと思ったのですが、なんかエラーメッセージがよくわかんないですね。。。 https://github.com/VOICEVOX/voicevox_core/actions/runs/6986624508/job/19012505094?pr=693

💥 maturin failed
  Caused by: Failed to parse patchelf version
  Caused by: unexpected end of input while parsing minor version number

多分バージョンの形式が不適切だからかと、、、?

@Hiroshiba
Copy link
Member

Hiroshiba commented Nov 25, 2023

patchelfに問題がありそうで、まあ確かにバージョンはsemver的におかしそうですが、なんで今これがエラー出た感じなんですかね。。
https://pypi.org/project/patchelf/

例えばこっちではエラーが出てないので・・・

@tuna2134
Copy link
Author

tuna2134 commented Nov 25, 2023

patchelfに問題がありそうで、まあ確かにバージョンはsemver的におかしそうですが、なんで今これがエラー出た感じなんですかね。。 https://pypi.org/project/patchelf/

例えばこっちではエラーが出てないので・・・

うーん、多分patchelfがmanylinuxにする上で動くようになったとか?ですかね、、、

@Hiroshiba
Copy link
Member

@tuna2134 全く同じことを考えてました!
@qryxip さんが確認してくださってるのですが、ローカル環境で同じことを試してもエラーが出ない、みたいな状況です。
追加でCUDAがonになっていたり、ubuntu20であることが条件かも。

どちらにせよ、これどうやって迂回すればいいんですかね。。。。。。。

@qryxip
Copy link
Member

qryxip commented Nov 25, 2023

ここにx.y.z.wみたいなpatchelfのバージョンが来て死んでいるのはほぼ間違い無いと思います。skip_auditwheelsで今までは抑えられていたところですかね...?

https://github.com/PyO3/maturin/blob/v1.3.2/src/auditwheel/patchelf.rs#L21

@qryxip
Copy link
Member

qryxip commented Nov 25, 2023

バージョンはPythonパッケージではなく、ここから.strip_prefix("patchelf")して.trim()して0.17.2のように読んでいるようです。ここが変なことになってそう。

patchelf --version
patchelf 0.17.2

@Hiroshiba
Copy link
Member

Hiroshiba commented Nov 25, 2023

@qryxip @tuna2134 分かった気がします!
ubuntu20のgithub actions環境だと、デフォルトで入っているpatchelfのバージョンが0.10でした。
これがマイナーバージョンのパースエラーになってるのかなと!!

@qryxip
Copy link
Member

qryxip commented Nov 25, 2023

PythonパッケージのpatchelfがPython環境下にpatchelf(1)をインストールするはずですが、そっちに$PATHが通ってなくて/usr/bin/patchelfを使おうとしているとかでしょうか...?

@qryxip
Copy link
Member

qryxip commented Nov 25, 2023

↑いやmaturinが使えてる時点で$PATHは通ってますね。patchelf(1)のインストールがスキップされている可能性はありますが。

@tuna2134
Copy link
Author

@qryxip @tuna2134 分かった気がします! ubuntu20のgithub actions環境だと、デフォルトで入っているpatchelfのバージョンが0.10でした。 これがマイナーバージョンのパースエラーになってるのかなと!!

ふむふむ、なるほど

@tuna2134
Copy link
Author

チェックお願いします

@tuna2134 tuna2134 changed the title manylinuxでビルドできるように変更 gh actionsで追加およびmanylinuxでビルドできるように変更 Dec 28, 2023
@Hiroshiba
Copy link
Member

Hiroshiba commented Dec 29, 2023

テスト用のPyPIにあるvoicevoxのインストールを試してみました!!!
↓でいけますね!

pip install --extra-index-url https://test.pypi.org/simple/ voicevox

エラーになったのと、気になった点がいくつかあったのでコメントです!!

  • pydanticのインストールに失敗する(なんで・・・?)
    • test PyPIのpydanticをインストールしようとしちゃってるだけ?
    • 別でpip install pydanticすれば通る
  • onnxruntime.dllっぽいのが同梱されてるけど、見えてないっぽいエラーが返る
    • The given version [14] is not supported, only version 1 to 10 is supported in this build.
    • Windowsデフォルトのonnxruntimeが使われた時に気付けるようにしたい #644 と同じエラー(Windows初期搭載のonnxruntimeを見てしまっている)
    • やっぱり同梱してもその動的ファイルを参照してくれない・・・?
    • だとしてもダウンローダーを使って別途ダウンロードが必要なことを案内すればよさそう

@tuna2134
Copy link
Author

tuna2134 commented Jan 1, 2024

linuxのwheelのみonnxruntimeのリンクファイルを切り離したいけど、どうすればいいんだ?
auditwheel無効にすると、アップロードできないし、、、

@Hiroshiba
Copy link
Member

Hiroshiba commented Jan 1, 2024

えっと、文脈を整理すると、

  • Linuxではonnxruntimeの動的ライブラリがwheel内に入るけど、win/macではなぜか入らない。
  • win/macの方に動的ライブラリが入るようにするか、linuxの方から動的ライブラリを抜くと良さそう
  • 後者でやるとして、onnxruntime.soだけ抜く方法がわからない

って感じですよね!

うーーーーーーん。どうすれば良いんでしょう。。。
そもそもonnxruntime-rsとmaturinの連携が良くないのか、maturinの挙動を単純に理解できないのか、どっちかわからない気がしていて根が深い気がしますね・・・。
個人的には、linuxだけ.soが含まれちゃってるけど、まあ実行はできるので、将来なんとかしたいものとしつつとりあえずpip installできる形を目指しても良いのかなとちょっと思いました!

(あ、もし @qryxip さん的に思い当たるフシがあればお聞きしたいです。)

Copy link
Member

@Hiroshiba Hiroshiba Jan 7, 2024

Choose a reason for hiding this comment

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

ライブラリをビルドするコードはbuild_and_deploy.ymlに固まっているのですが、こちらに移すことは可能そうでしょうか・・・? 👀
おそらくほぼ同じコードをビルドしているので、コード量やビルド時間をぐっと減らせそうなのですが、どうでしょうか・・・?

ビルドしているのはこのあたりです↓

- name: build voicevox_core_python_api
if: matrix.whl_local_version
id: build-voicevox-core-python-api
run: |
rm -rf ./target/wheels
pip install --upgrade poetry
poetry config virtualenvs.create false
(cd crates/voicevox_core_python_api && poetry install --with dev)
function build() {
maturin build --manifest-path ./crates/voicevox_core_python_api/Cargo.toml --features ${{ matrix.features }}, --target ${{ matrix.target }} --release
}
if ${{ !inputs.is_production }}; then
build
else
build > /dev/null 2>&1
fi
echo "whl=$(find ./target/wheels -type f)" >> "$GITHUB_OUTPUT"
env:
ORT_USE_CUDA: ${{ matrix.use_cuda }}

Copy link
Author

Choose a reason for hiding this comment

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

別のことで忙しくて返信が遅れてしまいました!
できそうかと思われます。

Copy link
Member

Choose a reason for hiding this comment

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

お久しぶりです!こちらも別タスクが忙しかったので大丈夫です!
もしよければ完成まで進められると嬉しいです!!

Copy link
Author

@tuna2134 tuna2134 May 22, 2024

Choose a reason for hiding this comment

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

今からまとめてみようと思います、、、!

Copy link
Member

Choose a reason for hiding this comment

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

ありがとうございます、お待ちしてます・・・!

@qryxip
Copy link
Member

qryxip commented Jul 8, 2024

#802 によりONNX Runtimeをリンクしなくなったので、その辺はもう悩まなくて済みそうです。
(あと #806skip-auditwheel = trueを消しました)

@tuna2134
Copy link
Author

tuna2134 commented Jul 8, 2024

#802 によりONNX Runtimeをリンクしなくなったので、その辺はもう悩まなくて済みそうです。 (あと #806skip-auditwheel = trueを消しました)

ありがとうございます。

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.

manylinuxを使えるようにする
3 participants