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

DockerビルドCI: リリースビルド時にlatest(masterブランチ)のレイヤーキャッシュを使うようにする #707

Merged

Conversation

aoirint
Copy link
Member

@aoirint aoirint commented Jun 21, 2023

内容

の内容を実装します。

リリースビルド時のDockerイメージビルドが高速化されます。

Dockerイメージビルドが走るイベントごとのタグ対応表は以下のようになります。

masterブランチpush時(変更なし)

matrix.tag Dockerイメージタグ cache-from cache-to
(空文字列) latest latest-buildcache latest-buildcache
cpu cpu-latest cpu-latest-buildcache cpu-latest-buildcache
cpu-ubuntu20.04 cpu-ubuntu20.04-latest cpu-ubuntu20.04-latest-buildcache cpu-ubuntu20.04-latest-buildcache
nvidia nvidia-latest nvidia-latest-buildcache nvidia-latest-buildcache
nvidia-ubuntu20.04 nvidia-ubuntu20.04-latest nvidia-ubuntu20.04-latest-buildcache nvidia-ubuntu20.04-latest-buildcache

バージョン0.15.0リリース時(変更前)

matrix.tag Dockerイメージタグ cache-from cache-to(変更なし)
(空文字列) 0.15.0 0.15.0-buildcache 0.15.0-buildcache
cpu cpu-0.15.0 cpu-0.15.0-buildcache cpu-0.15.0-buildcache
cpu-ubuntu20.04 cpu-ubuntu20.04-0.15.0 cpu-ubuntu20.04-0.15.0-buildcache cpu-ubuntu20.04-0.15.0-buildcache
nvidia nvidia-0.15.0 nvidia-0.15.0-buildcache nvidia-0.15.0-buildcache
nvidia-ubuntu20.04 nvidia-ubuntu20.04-0.15.0 nvidia-ubuntu20.04-0.15.0-buildcache nvidia-ubuntu20.04-0.15.0-buildcache

バージョン0.15.0リリース時(変更後)

matrix.tag Dockerイメージタグ cache-from cache-to(変更なし)
(空文字列) 0.15.0 latest-buildcache 0.15.0-buildcache
cpu cpu-0.15.0 cpu-latest-buildcache cpu-0.15.0-buildcache
cpu-ubuntu20.04 cpu-ubuntu20.04-0.15.0 cpu-ubuntu20.04-latest-buildcache cpu-ubuntu20.04-0.15.0-buildcache
nvidia nvidia-0.15.0 nvidia-latest-buildcache nvidia-0.15.0-buildcache
nvidia-ubuntu20.04 nvidia-ubuntu20.04-0.15.0 nvidia-ubuntu20.04-latest-buildcache nvidia-ubuntu20.04-0.15.0-buildcache

関連 Issue

スクリーンショット・動画など

その他

@github-actions
Copy link

Coverage Result

Resultを開く
Name Stmts Miss Cover
voicevox_engine/init.py 2 1 coverage-50%
voicevox_engine/acoustic_feature_extractor.py 75 0 coverage-100%
voicevox_engine/dev/synthesis_engine/init.py 3 1 coverage-67%
voicevox_engine/dev/synthesis_engine/mock.py 36 2 coverage-94%
voicevox_engine/downloadable_library.py 93 5 coverage-95%
voicevox_engine/full_context_label.py 162 3 coverage-98%
voicevox_engine/kana_parser.py 86 1 coverage-99%
voicevox_engine/metas/Metas.py 33 0 coverage-100%
voicevox_engine/metas/MetasStore.py 29 14 coverage-52%
voicevox_engine/metas/init.py 2 0 coverage-100%
voicevox_engine/model.py 160 9 coverage-94%
voicevox_engine/mora_list.py 5 0 coverage-100%
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 3 1 coverage-67%
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 19 0 coverage-100%
voicevox_engine/setting/init.py 3 0 coverage-100%
voicevox_engine/synthesis_engine/init.py 5 0 coverage-100%
voicevox_engine/synthesis_engine/core_wrapper.py 201 159 coverage-21%
voicevox_engine/synthesis_engine/make_synthesis_engines.py 57 49 coverage-14%
voicevox_engine/synthesis_engine/synthesis_engine.py 130 11 coverage-92%
voicevox_engine/synthesis_engine/synthesis_engine_base.py 67 9 coverage-87%
voicevox_engine/user_dict.py 144 11 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 9 2 coverage-78%
voicevox_engine/utility/mutex_utility.py 11 1 coverage-91%
voicevox_engine/utility/path_utility.py 26 8 coverage-69%
TOTAL 1516 289 coverage-81%

@aoirint
Copy link
Member Author

aoirint commented Jun 21, 2023

#708 とは別々にマージを進めることができますが、組み合わせたあとのタグ対応表です。

バージョン0.15.0リリース時(変更後)

matrix.tag Dockerイメージタグ cache-from cache-to
(空文字列) 0.15.0 latest-buildcache (なし)
cpu cpu-0.15.0 cpu-latest-buildcache (なし)
cpu-ubuntu20.04 cpu-ubuntu20.04-0.15.0 cpu-ubuntu20.04-latest-buildcache (なし)
nvidia nvidia-0.15.0 nvidia-latest-buildcache (なし)
nvidia-ubuntu20.04 nvidia-ubuntu20.04-0.15.0 nvidia-ubuntu20.04-latest-buildcache (なし)

@aoirint
Copy link
Member Author

aoirint commented Jun 21, 2023

#707#708 の変更を組み合わせたビルドを試してみました。

https://github.com/aoirint/voicevox_engine/releases/tag/0.15.0-aoirint.23

CIのログを見ると、バージョン情報を置換している箇所以前では、リリースビルドでレイヤーキャッシュが使われていることが確認できます。
(amd64とarm64が並列ビルドされているので、ログが混ざっていますが)

CIログの抜粋
(略)

#10 [internal] load build context
#10 transferring context: 48.92MB 1.2s done
#10 DONE 1.2s

#16 [linux/arm64 runtime-env  9/21] ADD ./voicevox_engine /opt/voicevox_engine/voicevox_engine
#16 CACHED

#17 [linux/arm64 runtime-env  7/21] COPY --from=download-core-env /opt/voicevox_core /opt/voicevox_core
#17 CACHED

#18 [linux/arm64 runtime-env  8/21] COPY --from=download-onnxruntime-env /opt/onnxruntime /opt/onnxruntime
#18 CACHED

(中略)

#54 [linux/amd64 runtime-env 14/21] ADD ./engine_manifest_assets /opt/voicevox_engine/engine_manifest_assets
#54 extracting sha256:2147ec7a2c4c0ce023e5a2dabbbc7b4b36fda231d90ef2bc388362e054a9766e 5.4s done
#54 extracting sha256:eeafab7961acb9b0be4ca1d9a2f193d58a26985e91a98bdfb61d13ef07cf9954
#54 extracting sha256:eeafab7961acb9b0be4ca1d9a2f193d58a26985e91a98bdfb61d13ef07cf9954 6.7s done
#54 extracting sha256:b16618e61dc0c2e9d1a6abf6923b7182c8b9d5b8432c1d040a3d808b7612f868
#54 extracting sha256:b16618e61dc0c2e9d1a6abf6923b7182c8b9d5b8432c1d040a3d808b7612f868 1.5s done
#54 extracting sha256:5a667f64fbc0df5594cf7f985b0397a08f0de94f129392761c5c80ed65b0f291 0.0s done
#54 extracting sha256:6812654e8b6b31dfb9cf2fc1175224e70531f7691669a214a85c9788659b862f 0.0s done
#54 extracting sha256:0200eefbc110e4c0e33e7f925d2f819acbb8a503f3c5e96a94868a3961d9f166 done
#54 extracting sha256:f9236547eede4c28878f2108cb5f8bf0ddb5c4d4d801bfd7c50dea861e196b3a
#54 extracting sha256:f9236547eede4c28878f2108cb5f8bf0ddb5c4d4d801bfd7c50dea861e196b3a 1.7s done
#54 extracting sha256:7e14e4274142543da5b77a4f29ecd1d035ebf3cb1f3d50df19ac279f39208207
#54 extracting sha256:7e14e4274142543da5b77a4f29ecd1d035ebf3cb1f3d50df19ac279f39208207 0.0s done
#54 extracting sha256:a07b854f6737746743cb0ab9ec4711cafbf018694b4fc3640107c9f971de04ff 0.0s done
#54 DONE 44.2s

#56 [linux/amd64 runtime-env 15/21] RUN sed -i "s/__version__ = "latest"/__version__ = "0.15.0-aoirint.23"/" /opt/voicevox_engine/voicevox_engine/__init__.py
#56 DONE 0.6s

#55 [linux/arm64 runtime-env 14/21] ADD ./engine_manifest_assets /opt/voicevox_engine/engine_manifest_assets
#55 ...

#57 [linux/amd64 runtime-env 16/21] RUN sed -i "s/"version": "999\.999\.999"/"version": "0.15.0-aoirint.23"/" /opt/voicevox_engine/engine_manifest.json
#57 DONE 0.1s

(略)

動作確認ができたので、Ready for reviewにしておきます。

@aoirint aoirint marked this pull request as ready for review June 21, 2023 14:20
@aoirint aoirint requested a review from a team as a code owner June 21, 2023 14:20
@aoirint aoirint requested review from Hiroshiba and removed request for a team June 21, 2023 14:20
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!!

そういえばなのですが、dockerhubでtagsを見るとbuildcache tagがいっぱい引っかかるのがちょっと気になってます。
latestと同時に更新されるので毎回上位に表示されてしまい。。。
なにか良い方法とかあれば知りたいかもです!

@Hiroshiba Hiroshiba merged commit f67f1fe into VOICEVOX:master Jun 21, 2023
@aoirint
Copy link
Member Author

aoirint commented Jun 24, 2023

dockerhubでtagsを見るとbuildcache tagがいっぱい引っかかる

Docker Hubのタグ検索は、部分一致でスペース区切りが使えず、除外検索もできないんですよね...

buildcacheだけ別のレジストリ・リポジトリにおくことはできると思いますが、いい候補を知らないです...
例えば、GitHubのContainer Registry(ghcr.io)が使えますが、リポジトリに紐づいて表示されてしまって、イメージ本体ではなくややこしいbuildcacheを目立たないようにする需要は満たせなさそうです。Docker Hubの別リポジトリ(例えばvoicevox/voicevox_engine_buildcache)を作ることはできるかも...?

ほかに管理面では、Docker Hub公式のCLIが使えるかもですが、使ったことがないです...

ユーザ向けには、READMEでタグ一覧を案内できそうです。

例: ubuntu

image

Docker Hub上voicevox/voicevox_engineのREADMEは自動更新をしていませんが、Docker実装時( #88 )は、READMEの更新にDocker Hubアカウントの生のパスワードが必要だったので実装を見送っていました。去年からアクセストークンで更新できるようになったらしいので、試してみてもいいかもです。

@Hiroshiba
Copy link
Member

Docker Hubの別リポジトリ(例えばvoicevox/voicevox_engine_buildcache)を作ることはできるかも...?

こちらの形良さそうに思います!
キャッシュだけ別リポジトリが可能かどうか調査が必要かもです。

READMEでタグ一覧を案内

その発想はなかったです、こちらもすごく良いと思います!
自動生成できるととても良さそうですが、一旦どんなタグがあるかとかの説明だけ書いても良さそうですね。ちょっと思い出した時に更新しておこうと思います。

@aoirint aoirint deleted the patch-always-use-latest-buildcache branch October 9, 2023 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants