Anagonda環境をキャッシュすることによって、Githubアクションのビルド時間を減らす
10227 ワード
概要
私のワークフローで最も時間のかかるタスクの一つは、アナコンダ環境の解決、ダウンロード、インストールです.場合によっては、依存関係を解決するだけで10分までを構築するプラットフォームに応じて取ることができます.
そういうわけで、私は常に私のワークフローの速度を上げる方法を探しています.例えば、非常によく知られている方法は、Blazing Fast
mamba
の代わりにパッケージマネージャconda
.mamba
はC +で書かれ、パラレルでファイルをダウンロードし、使用するlibsolv
(Red Hat、Fedora、openSUSEのRPMパッケージマネージャで使用されている最新のライブラリの状態).しかし、通常、これは私のために十分速くありません.また、協力者が引き要求にコミットを押すたびに、パッケージをダウンロードするリソースの浪費を見つけます.例えば、open source project 私は共同で、CIパイプラインは一日で100回以上起動することができます.
だからこそ、常にanaconda環境をキャッシュしたいが、今までの問題を解決するための時間がなかった.
のドキュメント
actions/cache
タスクは多くのパッケージマネージャの例を含みます.but not for Anaconda . 一方で、そのドキュメントはsetup-miniconda
アクションはダウンロードされたパッケージをキャッシュする方法を説明しますがmakes the pipeline even slower .The
cache
アクションの範囲を理解することが重要です
cache
アクション.からGitHub's documentation :A workflow can access and restore a cache created in the current branch, the base branch (including base branches of forked repositories), or the default branch (usually
main
). For example, a cache created on the default branch would be accessible from any pull request. Also, if the branchfeature-b
has the base branchfeature-a
, a workflow triggered onfeature-b
would have access to caches created in the default branch (main
),feature-a
, andfeature-b
.
マイワークフロー
この例では、CIのパイプラインを次のような機能で記述する方法を示します.
environment.yml
変更引き金
次のときにトリガされるパイプラインが必要です.
name: ci
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
schedule:
- cron: '0 0 * * *'
env:
CACHE_NUMBER: 0 # increase to reset cache manually
The CACHE_NUMBER
変数は後で使用されます.プレフィックス
我々は準備する必要がある
matrix
MambaForge *の異なるインストールパスを処理するには、次の手順に従います.jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
label: linux-64
prefix: /usr/share/miniconda3/envs/my-env
- os: macos-latest
label: osx-64
prefix: /Users/runner/miniconda3/envs/my-env
- os: windows-latest
label: win-64
prefix: C:\Miniconda3\envs\my-env
mamba
パッケージマネージャーconda-forge
デフォルトのチャネルとして.インストール
ステップレベルでは、YAML環境ファイルを指定せずにMambaForgeをインストールします.
name: ${{ matrix.label }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- name: Setup Mambaforge
uses: conda-incubator/[email protected]
with:
miniforge-variant: Mambaforge
miniforge-version: latest
activate-environment: my-env
use-mamba: true
キャッシュ
キャッシュタスクは、キーで作業します.タスクが実行されると、キーに一致する保存されたキャッシュを探し、データを取得します.
キャッシュはすべてのOSに固有です.また、私は、24時間ごとにキャッシュを更新するか、環境が変わったならば、キーを設定しました.
The
CACHE_NUMBER
上記の変数は手動でキャッシュをリセットするためのものです. - name: Set cache date
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
- uses: actions/[email protected]
with:
path: ${{ matrix.prefix }}
key: ${{ matrix.label }}-conda-${{ hashFiles('environment.yml') }}-${{ env.DATE }}-${{ env.CACHE_NUMBER }}
id: cache
環境を更新
最後に、キャッシュが利用できない場合は、YAML環境ファイルに従って環境を更新し、テストを実行します.
- name: Update environment
run: mamba env update -n my-env -f environment.yml
if: steps.cache.outputs.cache-hit != 'true'
- name: Run tests
shell: bash -l {0}
run: pytest ./tests
結果
にもかかわらず
environment.yml
ファイルはvery simple , 我々は、すべての実行で平均で5分を保存しました.
コードを得る
コードはここで入手できます.
epassaro / cache-conda-envs
Githubアクションでアナコンダ環境をキャッシュすることでビルドをスピードアップします
キャッシュコンダ🐍 ⚡
Githubアクションでアナコンダ環境をキャッシュすることでビルドをスピードアップします
View on GitHub
Reference
この問題について(Anagonda環境をキャッシュすることによって、Githubアクションのビルド時間を減らす), 我々は、より多くの情報をここで見つけました https://dev.to/epassaro/caching-anaconda-environments-in-github-actions-5hdeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol