CMLとは何ですか?連続機械学習(CML)は、MLOPに焦点を当てた継続的な統合と配信(CI/CD)を実装するためのオープンソースCLIツールです。それを使用して、マシンのプロビジョニング、モデルトレーニングと評価、プロジェクトの履歴におけるML実験の比較、変化のデータセットの監視など、開発ワークフローを自動化します。
CMLは、すべてのプル要求で自動的にモデルをトレーニングおよび評価し、結果とメトリックを含む視覚レポートを生成するのに役立ちます。
ニューラルスタイル転送モデルの例レポート。
CML原則:
❓助けが必要ですか? MLの継続的な統合についてチャットしたいだけですか?私たちの不一致チャンネルにアクセスしてください!
CMLを使用した実践的なMLOPSチュートリアルについては、YouTubeビデオシリーズをご覧ください!
開始するには、gitlab、github、またはbitbucketアカウントが必要です。ユーザーは、GitHubアクションまたはGitLab CI/CDに慣れたい場合があります。ここでは、githubユースケースについて説明します。
Gitlab CI/CD、特に個人的なアクセストークン要件を備えたCMLのドキュメントをご覧ください。
Bitbucketクラウドを備えたCMLのドキュメントをご覧ください。
CMLプロジェクトのキーファイルは.github/workflows/cml.yamlです。
name : your-workflow-name
on : [push]
jobs :
run :
runs-on : ubuntu-latest
# optionally use a convenient Ubuntu LTS + DVC + CML image
# container: ghcr.io/iterative/cml:0-dvc2-base1
steps :
- uses : actions/checkout@v3
# may need to setup NodeJS & Python3 on e.g. self-hosted
# - uses: actions/setup-node@v3
# with:
# node-version: '16'
# - uses: actions/setup-python@v4
# with:
# python-version: '3.x'
- uses : iterative/setup-cml@v1
- name : Train model
run : |
# Your ML workflow goes here
pip install -r requirements.txt
python train.py
- name : Write CML report
env :
REPO_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
# Post reports as comments in GitHub PRs
cat results.txt >> report.md
cml comment create report.md カスタムDocker画像に事前にインストールされたCMLやその他の便利なライブラリを有用に提供します。上記の例では、フィールドcontainer: ghcr.io/iterative/cml:0-dvc2-base1 )は、ランナーにCML Docker画像を引っ張らせます。この画像には、nodejs、Python 3、DVC、およびCMLが既にUbuntu LTSベースにセットアップされており、便宜上あります。
CMLは、MLワークフロー(数値データとモデルパフォーマンスに関する視覚化を含む)の出力をCMLレポートにパッケージ化するのに役立つ多数の機能を提供します。
以下は、マークダウンレポートを作成し、それらのレポートをCIシステムに配信するためのCML関数の表です。
| 関数 | 説明 | インプットの例 |
|---|---|---|
cml runner launch | ローカルでランナーを起動するか、クラウドプロバイダーによってホストされています | 引数を参照してください |
cml comment create | gitlab/githubワークフローにコメントとしてCMLレポートを返す | <path to report> --head-sha <sha> |
cml check create | githubのチェックとしてCMLレポートを返します | <path to report> --head-sha <sha> |
cml pr create | 指定されたファイルを新しいブランチにコミットし、プルリクエストを作成します | <path>... |
cml tensorboard connect | Tensorboard.devページへのリンクを返します | --logdir <path to logs> --title <experiment title> --md |
cml comment createコマンドを使用してレポートを投稿できます。 CMLレポートは、Markdown(Github、Gitlab、またはBitbucketフレーバー)で記述されています。つまり、画像、テーブル、フォーマットされたテキスト、HTMLブロック、コードスニペットなどを含めることができます。実際、CMLレポートに入れたものはあなた次第です。いくつかの例:
?§テキストテキストは、必要な方法を使用してレポートに書き込みます。たとえば、MLモデルトレーニングの結果を含むテキストファイルの内容をコピーします。
cat results.txt >> report.md ?§markdownまたはHTMLを使用して画像を表示します。画像がMLワークフローの出力である場合(つまり、ワークフローによって生成されます)、アップロードしてCMLレポートに自動的に含めることができます。たとえば、 graph.pngがpython train.pyによって出力されている場合、実行してください。
echo "  " >> report.md
cml comment create report.md
ショ和 gitlabを使用している場合は、この例を使用するために個人的なアクセストークンを作成する必要があることに注意してください。
ショ和 次の手順はすべて、GitHubブラウザインターフェイスで実行できます。ただし、コマンドに沿って従うには、地元のワークステーションにフォークをクローニングすることをお勧めします。
git clone https://github.com/ < your-username > /example_cml.github/workflows/cml.yamlにコピーします。 name : model-training
on : [push]
jobs :
run :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v3
- uses : actions/setup-python@v4
- uses : iterative/setup-cml@v1
- name : Train model
env :
REPO_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
pip install -r requirements.txt
python train.py
cat metrics.txt >> report.md
echo "" >> report.md
cml comment create report.md選択したテキストエディターでは、 train.pyの16行目からdepth = 5に編集します。
変更をコミットしてプッシュします:
git checkout -b experiment
git add . && git commit -m " modify forest depth "
git push origin experimentexperimentブランチをmainと比較するためのプルリクエストを開きます。まもなく、CMLレポートのPullリクエストにgithub-actionsからのコメントが表示されるはずです。これは、ワークフローにおけるcml send-comment関数の結果です。
これは、CMLワークフローの概要です。
.github/workflows/cml.yamlファイルのワークフローが実行されますCML関数では、GitHubチェックやコメントに、モデルパフォーマンスメトリックや視覚化などのワークフローから関連する結果を表示できます。どのようなワークフローを実行し、CMLレポートに入れたいと思っています。
多くのMLプロジェクトでは、データはGITリポジトリに保存されていませんが、外部ソースからダウンロードする必要があります。 DVCは、CMLランナーにデータを提供する一般的な方法です。 DVCでは、このようなレポートを作成するためにコミット間でメトリックがどのように異なるかを視覚化することもできます。
このレポートの作成に使用される.github/workflows/cml.yamlファイルは次のとおりです。
name : model-training
on : [push]
jobs :
run :
runs-on : ubuntu-latest
container : ghcr.io/iterative/cml:0-dvc2-base1
steps :
- uses : actions/checkout@v3
- name : Train model
env :
REPO_TOKEN : ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run : |
# Install requirements
pip install -r requirements.txt
# Pull data & run-cache from S3 and reproduce pipeline
dvc pull data --run-cache
dvc repro
# Report metrics
echo "## Metrics" >> report.md
git fetch --prune
dvc metrics diff main --show-md >> report.md
# Publish confusion matrix diff
echo "## Plots" >> report.md
echo "### Class confusions" >> report.md
dvc plots diff --target classes.csv --template confusion -x actual -y predicted --show-vega main > vega.json
vl2png vega.json -s 1.5 > confusion_plot.png
echo "" >> report.md
# Publish regularization function diff
echo "### Effects of regularization" >> report.md
dvc plots diff --target estimators.csv -x Regularization --show-vega main > vega.json
vl2png vega.json -s 1.5 > plot.png
echo "" >> report.md
cml comment create report.md
ショ和 クラウドストレージでDVCを使用している場合は、ストレージ形式の環境変数に注意してください。
多くのサポートされているストレージプロバイダーがあります。最も頻繁に使用されるプロバイダーのいくつかの例を次に示します。
# Github
env :
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_SESSION_TOKEN : ${{ secrets.AWS_SESSION_TOKEN }}
AWS_SESSION_TOKENはオプションです。
AWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEYは、cml runnerがEC2インスタンスを起動するために使用することもできます。 [環境変数]を参照してください。
env :
AZURE_STORAGE_CONNECTION_STRING :
${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
AZURE_STORAGE_CONTAINER_NAME : ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }} env :
OSS_BUCKET : ${{ secrets.OSS_BUCKET }}
OSS_ACCESS_KEY_ID : ${{ secrets.OSS_ACCESS_KEY_ID }}
OSS_ACCESS_KEY_SECRET : ${{ secrets.OSS_ACCESS_KEY_SECRET }}
OSS_ENDPOINT : ${{ secrets.OSS_ENDPOINT }}
ショ和 通常、GOOGLE_APPLICATION_CREDENTIALS、資格情報を含むjsonファイルのパスです。ただし、アクションでは、この秘密変数はファイルの内容です。jsonコンテンツをコピーして、秘密として追加します。
env :
GOOGLE_APPLICATION_CREDENTIALS : ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
ショ和 Googleドライブの資格情報を構成すると、your_project_path/.dvc/tmp/gdrive-user-credentials.jsonにjsonファイルがあります。その内容をコピーして、秘密の変数として追加します。
env :
GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} GitHubアクションは、デフォルトでGitHubホストランナーで実行されます。ただし、GPUを利用したり、チームの共有コンピューティングリソースを調整したり、クラウドで訓練することなど、独自のランナーを使用することには多くの大きな理由があります。
☝♥ヒント!公式のGithubドキュメントをチェックして、独自の自己ホストランナーのセットアップを開始してください。
ワークフローに計算リソース(GPUなど)が必要な場合、CMLはcml runnerを使用してクラウドインスタンスを自動的に割り当てることができます。 AWS、Azure、GCP、またはKubernetesのインスタンスをスピンアップできます。
たとえば、次のワークフローは、AWS EC2にg4dn.xlargeインスタンスを展開し、インスタンスでモデルをトレーニングします。ジョブが実行された後、インスタンスは自動的にシャットダウンします。
このワークフローは、上記の基本的なユースケースと非常に似ていることに気付くかもしれません。唯一の追加は、 cml runnerと、クラウドサービスの資格情報をワークフローに渡すためのいくつかの環境変数です。
cml runnerジョブも自動的に再起動することに注意してください(GitHubアクション35日間のワークフロータイムアウトまたはAWS EC2スポットインスタンスの中断など)。
name : Train-in-the-cloud
on : [push]
jobs :
deploy-runner :
runs-on : ubuntu-latest
steps :
- uses : iterative/setup-cml@v1
- uses : actions/checkout@v3
- name : Deploy runner on EC2
env :
REPO_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run : |
cml runner launch
--cloud=aws
--cloud-region=us-west
--cloud-type=g4dn.xlarge
--labels=cml-gpu
train-model :
needs : deploy-runner
runs-on : [self-hosted, cml-gpu]
timeout-minutes : 50400 # 35 days
container :
image : ghcr.io/iterative/cml:0-dvc2-base1-gpu
options : --gpus all
steps :
- uses : actions/checkout@v3
- name : Train model
env :
REPO_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }}
run : |
pip install -r requirements.txt
python train.py
cat metrics.txt > report.md
cml comment create report.md上記のワークフローでは、 deploy-runner Stepはus-west地域でEC2 g4dn.xlargeインスタンスを起動します。 model-trainingステップは、新しく発売されたインスタンスで実行されます。必要なsecretsの詳細については、以下の[環境変数]を参照してください。
?ジョブは任意のDockerコンテナを使用できることに注意してください!ジョブからの
cml send-commentなどの関数を使用するには、唯一の要件はCMLをインストールすることです。
CML Docker画像( ghcr.io/iterative/cmlまたはiterativeai/cml )には、フルスタックのデータサイエンスのためのPython、Cuda、 git 、 node 、その他の必需品がロードされています。これらのエッセンシャルのさまざまなバージョンは、異なる画像タグから入手できます。タグ条約は{CML_VER}-dvc{DVC_VER}-base{BASE_VER}{-gpu}です。
{BASE_VER} | ソフトウェアを含む( -gpu ) |
|---|---|
| 0 | Ubuntu 18.04、Python 2.7(Cuda 10.1、Cudnn 7) |
| 1 | Ubuntu 20.04、Python 3.8(Cuda 11.2、Cudnn 8) |
たとえば、 iterativeai/cml:0-dvc2-base1-gpu 、またはghcr.io/iterative/cml:0-dvc2-base1 。
cml runner launch関数は、次の引数を受け入れます。
--labels One or more user-defined labels for
this runner (delimited with commas)
[string] [default: "cml"]
--idle-timeout Time to wait for jobs before
shutting down (e.g. "5min"). Use
"never" to disable
[string] [default: "5 minutes"]
--name Name displayed in the repository
once registered
[string] [default: cml-{ID}]
--no-retry Do not restart workflow terminated
due to instance disposal or GitHub
Actions timeout [boolean]
--single Exit after running a single job
[boolean]
--reuse Don't launch a new runner if an
existing one has the same name or
overlapping labels [boolean]
--reuse-idle Creates a new runner only if the
matching labels don't exist or are
already busy [boolean]
--docker-volumes Docker volumes, only supported in
GitLab [array] [default: []]
--cloud Cloud to deploy the runner
[string] [choices: "aws", "azure", "gcp", "kubernetes"]
--cloud-region Region where the instance is
deployed. Choices: [us-east,
us-west, eu-west, eu-north]. Also
accepts native cloud regions
[string] [default: "us-west"]
--cloud-type Instance type. Choices: [m, l, xl].
Also supports native types like i.e.
t2.micro [string]
--cloud-permission-set Specifies the instance profile in
AWS or instance service account in
GCP [string] [default: ""]
--cloud-metadata Key Value pairs to associate
cml-runner instance on the provider
i.e. tags/labels "key=value"
[array] [default: []]
--cloud-gpu GPU type. Choices: k80, v100, or
native types e.g. nvidia-tesla-t4
[string]
--cloud-hdd-size HDD size in GB [number]
--cloud-ssh-private Custom private RSA SSH key. If not
provided an automatically generated
throwaway key will be used [string]
--cloud-spot Request a spot instance [boolean]
--cloud-spot-price Maximum spot instance bidding price
in USD. Defaults to the current spot
bidding price [number] [default: -1]
--cloud-startup-script Run the provided Base64-encoded
Linux shell script during the
instance initialization [string]
--cloud-aws-security-group Specifies the security group in AWS
[string] [default: ""]
--cloud-aws-subnet, Specifies the subnet to use within
--cloud-aws-subnet-id AWS [string] [default: ""]
ショ和 リポジトリの読み取り/書き込みアクセスとワークフローの特権を備えた個人アクセストークン(PAT)を作成する必要があります。ワークフローの例では、このトークンはPERSONAL_ACCESS_TOKENとして保存されています。
--cloudオプションを使用する場合は、クラウド計算リソースのアクセス資格情報を秘密として提供する必要もあります。上記の例では、 AWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEY (EC2インスタンスを作成および破壊する特権を備えています)が必要です。
AWSの場合、同じ資格情報をクラウドストレージの構成にも使用できます。
CMLは、既知の環境変数http_proxyおよびhttps_proxyを介してプロキシをサポートします。
これは、オンプレミスマシンを自己ホストランナーとして使用することを意味します。 cml runner launch関数は、ローカル自己ホストランナーをセットアップするために使用されます。ローカルマシンまたはオンプレミスGPUクラスターで、CMLをパッケージとしてインストールしてから実行します。
cml runner launch
--repo= $your_project_repository_url
--token= $PERSONAL_ACCESS_TOKEN
--labels= " local,runner "
--idle-timeout=180マシンは、プロジェクトリポジトリからワークフローを聴きます。
上記の例では、CMLはsetup-cmlアクションによってインストールされているか、CIランナーがプルしたカスタムDocker画像にプリインストールされています。 CMLをパッケージとしてインストールすることもできます。
npm install --location=global @dvcorg/cmlリリースの資産セクションからシステムの正しいスタンドアロンバイナリをダウンロードすることにより、ノードなしでcml使用できます。
DVCプロットとVega-Lite CLIコマンドを使用するには、追加の依存関係をインストールする必要がある場合があります。
sudo apt-get install -y libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev
librsvg2-dev libfontconfig-dev
npm install -g vega-cli vega-lite CMLおよびVega-Liteパッケージのインストールには、NodeJSに出荷されるNodeJSパッケージマネージャー( npm )が必要です。インストール手順は以下にあります。
uses: actions/setup-node@v3
with:
node-version: ' 16 'curl -sL https://deb.nodesource.com/setup_16.x | bash
apt-get update
apt-get install -y nodejsこれらは、CMLを使用したプロジェクトの例です。
?パットが必要です。