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

BLD: PyInstallerをv6へ更新 #857

Merged
merged 8 commits into from
Dec 17, 2023

Conversation

sabonerune
Copy link
Contributor

内容

PyInstaller v6へ更新します。
それに伴いビルド後にPyInstallerが利用するファイルが全て一つのディレクトリに移動されたためengine_root()周りの処理、ビルドやCIの変更があります。

関連 Issue

その他

PyInstaller内部で利用するディレクトリ名はengine_internalにしました。

Copy link

github-actions bot commented Dec 11, 2023

Coverage Result

Resultを開く
Name Stmts Miss Cover
run.py 487 333 coverage-32%
voicevox_engine/init.py 1 0 coverage-100%
voicevox_engine/cancellable_engine.py 91 71 coverage-22%
voicevox_engine/core_wrapper.py 208 150 coverage-28%
voicevox_engine/dev/core/init.py 2 0 coverage-100%
voicevox_engine/dev/core/mock.py 27 12 coverage-56%
voicevox_engine/dev/synthesis_engine/init.py 2 0 coverage-100%
voicevox_engine/dev/synthesis_engine/mock.py 38 2 coverage-95%
voicevox_engine/engine_manifest/EngineManifest.py 34 0 coverage-100%
voicevox_engine/engine_manifest/EngineManifestLoader.py 12 0 coverage-100%
voicevox_engine/engine_manifest/init.py 3 0 coverage-100%
voicevox_engine/library_manager.py 93 5 coverage-95%
voicevox_engine/metas/Metas.py 33 0 coverage-100%
voicevox_engine/metas/MetasStore.py 18 8 coverage-56%
voicevox_engine/metas/init.py 2 0 coverage-100%
voicevox_engine/model.py 162 9 coverage-94%
voicevox_engine/morphing.py 70 46 coverage-34%
voicevox_engine/part_of_speech_data.py 5 0 coverage-100%
voicevox_engine/preset/Preset.py 12 0 coverage-100%
voicevox_engine/preset/PresetError.py 2 0 coverage-100%
voicevox_engine/preset/PresetManager.py 81 2 coverage-98%
voicevox_engine/preset/init.py 4 0 coverage-100%
voicevox_engine/setting/Setting.py 11 0 coverage-100%
voicevox_engine/setting/SettingLoader.py 18 0 coverage-100%
voicevox_engine/setting/init.py 3 0 coverage-100%
voicevox_engine/tts_pipeline/init.py 5 0 coverage-100%
voicevox_engine/tts_pipeline/acoustic_feature_extractor.py 25 1 coverage-96%
voicevox_engine/tts_pipeline/full_context_label.py 165 3 coverage-98%
voicevox_engine/tts_pipeline/kana_parser.py 86 1 coverage-99%
voicevox_engine/tts_pipeline/make_tts_engines.py 59 30 coverage-49%
voicevox_engine/tts_pipeline/mora_list.py 4 0 coverage-100%
voicevox_engine/tts_pipeline/tts_engine.py 185 13 coverage-93%
voicevox_engine/tts_pipeline/tts_engine_base.py 71 10 coverage-86%
voicevox_engine/user_dict.py 144 12 coverage-92%
voicevox_engine/utility/init.py 5 0 coverage-100%
voicevox_engine/utility/connect_base64_waves.py 37 0 coverage-100%
voicevox_engine/utility/core_version_utility.py 8 1 coverage-88%
voicevox_engine/utility/mutex_utility.py 10 0 coverage-100%
voicevox_engine/utility/path_utility.py 35 9 coverage-74%
TOTAL 2258 718 coverage-68%

@sabonerune sabonerune marked this pull request as ready for review December 11, 2023 11:40
@sabonerune sabonerune requested a review from a team as a code owner December 11, 2023 11:40
@sabonerune sabonerune requested review from Hiroshiba and removed request for a team December 11, 2023 11:40
@tarepan
Copy link
Contributor

tarepan commented Dec 12, 2023

@sabonerune

#855 (default_setting.yaml の廃止) と conflict が発生したようです。

  • default_setting.yaml が廃止されたのでファイルコピー不要
  • デフォルト値はハードコードされたので DEFAULT_SETTING_PATH 不要

#855 由来の conflict 源になってそうです。
conflict 解消時の参考情報になれば幸いです。

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

まだビルド回り読めてないのですが、コード周りだけレビューしてみました!

voicevox_engine/utility/path_utility.py Outdated Show resolved Hide resolved
voicevox_engine/utility/path_utility.py Show resolved Hide resolved
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

ドキュメント追加ありがとうございます!!

1点ご存知でしたらお伺いしたいことが!
もし可能ならonnxruntime.dllなどの配置を以前と同じようにpyinstaller側に任せるのが比較的綺麗かなと思っています。
(実行に必要な依存関係をpyinstallerビルドスクリプト内に記述できるので)

internalに配置するファイルと、ルート直下(run.exeと同じディレクトリ)に配置するファイルを別々に指定する方法などはありそうでしょうか・・・?

@sabonerune
Copy link
Contributor Author

sabonerune commented Dec 13, 2023

internalに配置するファイルと、ルート直下(run.exeと同じディレクトリ)に配置するファイルを別々に指定する方法などはありそうでしょうか・・・?

自分が調べた限りspecファイル内でrun.exeと同じディレクトリにファイルを配置する方法は見つかりませんでした。

スクリプト一つで完結させるならbuild_utilにPyInstallerの呼び出しとルート直下へのファイル移動を行うコードを入れるくらいしか思い浮かびませんね…

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

色々調整してくださってありがとうございます!!

1個だけちょっとご相談があります。
今まで実行可能なバイナリをビルドするコマンドが1行だけで済んでいた(pyinstallerコマンド)のが、ビルドした後にファイルコピーコマンドを実行する必要がある状況になっていることに気づきました。
色々調べた感じ--add-binaryしたらDLLファイルは配置できそうでしたが、speaker_infoディレクトリなどは難しいかもしれません。
argparseで色々必要なファイルのパスを指定してdistディレクトリにコピーする、ということをspec内で行えば今まで通りpyinstallerコマンドのみでビルドできるかもなのですが、どうでしょうか・・・・?

run: |
set -eux

# Move DLL dependencies (cache already saved)
cp download/core/libvoicevox_core.so dist/run/
rm -rf download/core
Copy link
Member

Choose a reason for hiding this comment

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

これちょっと罠なのですが、多分このディレクトリはキャッシュしてるので消したらダメかもです。
正確には消しても別に問題ないのですが、確か全ての定義済みのステップが完了した後にそのディレクトリをキャッシュするという仕様だった気がします。
ディレクトリを消しているとそこでキャッシュがされないので、またダウンロードが走る感じになるかなと!
(ぶっちゃけもう1回ダウンロードしてもあまりビルド時間は変わらないのですが、まあ気持ち的に・・・!)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

元々PyInstaller側でコピーしていたものをspecファイルで処理するようにしたのでほぼ元のコードに戻りました。


後続のライブラリの処理で削除していたのでそれに倣った感じです。

確かキャッシュは原則的に明示的に(またはActionによって間接的に)保存処理をする必要があったはずです。
このworkflowはファイルをダウンロードして展開した直後にキャッシュ保存をしていたので問題ないはずです。

Copy link
Member

Choose a reason for hiding this comment

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

このworkflowはファイルをダウンロードして展開した直後にキャッシュ保存をしていたので問題ないはずです。

確認してみたのですが、onnxruntimeなどはおっしゃる通りの実装になっていると思います(↓のとこで保存している)!

- name: Save ONNX Runtime cache
uses: actions/cache/save@v3
with:
key: ${{ steps.onnxruntime-cache-restore.outputs.cache-primary-key }}
path: download/onnxruntime

でもコアとRESOURCEだけ(?)はその形になっていなさそうだなと・・・!
(どちらかと言うと、この2つも明示的にsaveを呼ぶのが良い気がしています)

@sabonerune
Copy link
Contributor Author

specファイル内で実行ファイルのディレクトリにファイルを移動するオプションがなかったのでできないものと思っていましたがどうやらできるようです。
ただ、cudaやdirectml周りのdllの処理は自身がないのでとりあえず今までspecファイルでコピーしていたものをやるようにしようと思います。

@Hiroshiba
Copy link
Member

@sabonerune 検討ありがとうございます、是非!!!

@sabonerune
Copy link
Contributor Author

specファイル内での処理するように変更しました

@sabonerune sabonerune requested a review from Hiroshiba December 15, 2023 11:46
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

ほぼLGTMです!!
細かい部分で開発しやすさをそのままにしておいてあげると嬉しそうかもなのでコメントしてみました 🙇

run.spec Outdated Show resolved Hide resolved
run.spec Outdated Show resolved Hide resolved
run.spec Outdated Show resolved Hide resolved
@sabonerune
Copy link
Contributor Author

とりあえずリポジトリにデフォルトで存在しないファイルはなくてもビルドが通るようにしました。

@Hiroshiba
Copy link
Member

とりあえずリポジトリにデフォルトで存在しないファイルはなくてもビルドが通るようにしました。

ありがとうございます、すごく良さそうに思います!!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

LGTM!!!!

確認としてプレビュー版リリース0.15.0-preview.10を作りたいと思います!
ありがとうございました!!!

ビルド周りはまだまだ改善の余地がかなり残っていると思います。
もしご興味あればジャカジャカ進めていただけるとすごく助かります。もっと気軽にissueなどでコメントなどいただけると!!

.github/workflows/build.yml Outdated Show resolved Hide resolved
run.spec Outdated Show resolved Hide resolved
@Hiroshiba Hiroshiba merged commit 4ef4218 into VOICEVOX:master Dec 17, 2023
3 checks passed
@sabonerune sabonerune deleted the bld/update-pyinstaller6 branch December 17, 2023 22:29
Hiroshiba added a commit to Hiroshiba/voicevox_engine that referenced this pull request Jan 21, 2024
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.

engine_rootのパスに関する問題
3 participants