-
Notifications
You must be signed in to change notification settings - Fork 120
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版Raspberry Pi向け自動ビルド(armhf)の追加 #41
Conversation
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.
良いですね!!!
いくつか気になったのでコメントしてみました。
ところもしご存知だったら知りたいのですが、公式ビルドはOpenMPをONにしてビルドしているのでしょうか👀
というのもそういえば以前onnxruntimeを使ったときにCPUが100%にならなかったので、もしかしたら使ってないのかなと思った次第です。
公式ビルドのOpenMPはv1.7.0から無効化されています(現在はv1.9.1)。 |
なるほどです! |
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!
お試して一回releases作ってみようと思います。
内容
ONNX版コアのRaspberry Pi向け自動ビルド(Linux CPU armhf)を追加します。
ONNX Runtimeのarmhfビルド(Raspberry Pi向けビルド)
このPRでは、ONNX Runtimeのarmhf自動ビルドを合わせて追加します。GCCのarmhfクロスコンパイラを使って、x86_64環境でビルドします。
ONNX Runtime armhfビルドは、公式配布物に含まれていないため、VOICEVOX側でビルドする必要があります。
将来的には、 https://github.com/Hiroshiba/voicevox_core/issues/40#issuecomment-968677300 のように、ONNX Runtimeビルド用の別リポジトリを作るのがいいと思いますが、現時点では
voicevox_core
リポジトリに組み込んでいます。OpenMP
音声合成の高速化のため、ONNX RuntimeのOpenMPビルドオプションを有効化しています。このため、ONNX Runtime armhfビルドは、
libgomp
(GCC/GNUのOpenMP実装)に動的リンクします。libgomp
はGPLv3ですが、libstdc++(GCC/GNUのC++標準ライブラリ実装)などと同様にGNUランタイム・ライブラリ例外により、動的リンクできます。ビルド時間
以前は全体で2-3分でしたが、ONNX Runtimeのビルドのため、全体で40-50分程度かかるようになります。
デフォルトブランチまたは同名のブランチにキャッシュがあると、ONNX Runtimeのビルドを省略できるため、1-2分程度の追加(全体で4-5分)で済みます(GitHub Actionsの状態によって多少遅延することはあります)。
ONNX RuntimeのArtifact・キャッシュ
Artifactには、公式バイナリ配布物(Releaseにアップロードされているもの)の仕様に合わせて、ONNX Runtimeのビルド成果物にライセンス情報やヘッダファイルなどを追加したものを保存しています。
キャッシュには、ONNX Runtimeのビルド成果物のみ(ライセンス情報やヘッダファイルなどが含まれない)を保存しています(キャッシュは基本的にGitHub Actions内部からしか見えない)。
ONNX Runtimeの再ビルドなしでArtifactの中身を変えやすくするため、毎回キャッシュ(ビルド成果物)からArtifactを構成するようにしています。
キャッシュキーとして、Artifact名、ONNX Runtimeのバージョン、
matrix
に設定した値(JSONとしてダンプ)、強制的にキャッシュを捨てさせるためのキャッシュバージョンv1
を使っています。ONNX Runtimeのキャッシュがある場合、ONNX Runtimeのビルドジョブ
build-onnxruntime
でキャッシュを取り出し、Artifactを構成して、Artifactとしてアップロードします。
ONNX Runtimeのキャッシュがない場合、
build-onnxruntime
でONNX Runtimeをビルドし、同様にArtifactとしてアップロードします。ONNX Runtime armhfビルドの同梱
通常、ユーザがONNX Runtime armhfビルド(Raspberry Pi向けビルド)を入手するには、自分でビルドする必要があります。
この手間を省き、またバージョン互換性の問題を避けるため、自動ビルドしたものおよびライセンス情報を
core.zip
に同梱して配布するようにしています。armhf以外のVOICEVOX COREが要求するONNX Runtimeバイナリについては、ユーザが入手可能なため同梱していません。
ONNX Runtimeのビルドのメンテナンス
ONNX Runtime v1.8.2とv1.9.0では、依存ライブラリの変更(
pytorch_cpuinfo
)により、ビルドオプションを変更する必要がありました。今後のバージョンアップで、ONNX Runtimeのビルドについて、同様にメンテナンスが必要になる可能性があります。
メンテナンスが難しいようであれば、 https://github.com/Hiroshiba/voicevox_core/issues/40#issuecomment-968677300 の方針でいいと思います。
関連 Issue
close #40