CML이란 무엇입니까? CML (Continuous Machine Learning)은 MLOPS에 중점을 둔 CI/CD (Continuous Integration & Delivery)를 구현하기위한 오픈 소스 CLI 도구입니다. 기계 프로비저닝, 모델 교육 및 평가, 프로젝트 기록의 ML 실험 비교 및 변경 데이터 세트를 모니터링하는 개발 워크 플로우를 자동화하는 데 사용하십시오.
CML은 모든 풀 요청에서 모델을 교육하고 평가 한 다음 결과 및 메트릭으로 시각적 보고서를 생성하는 데 도움이 될 수 있습니다.
신경 스타일 전송 모델에 대한 예제 보고서.
CML 원칙 :
❓ 도움이 필요하십니까? ML의 지속적인 통합에 대해 채팅하고 싶습니까? 불화 채널을 방문하십시오!
cml을 사용하여 실습 mlops 튜토리얼의 YouTube 비디오 시리즈를 확인하십시오!
시작하려면 gitlab, github 또는 bitbucket 계정이 필요합니다. 사용자는 GitHub 작업 또는 Gitlab CI/CD에 익숙해지기를 원할 수 있습니다. 여기에서 Github 사용 사례에 대해 논의합니다.
Gitlab CI/CD와 함께 CML의 문서, 특히 개인 액세스 토큰 요구 사항을 참조하십시오.
Bitbucket Cloud와 함께 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 CML 및 Custom Docker 이미지에 사전 설치된 CML 및 기타 유용한 라이브러리를 유용하게 제공합니다. 위의 예에서는 필드 container: ghcr.io/iterative/cml:0-dvc2-base1 )은 러너가 CML Docker 이미지를 당기도록합니다. 이미지에는 이미 Ubuntu LTS 기반에 편의를 위해 Nodejs, Python 3, DVC 및 CML이 설정되어 있습니다.
CML은 ML 워크 플로의 출력 (숫자 데이터 및 모델 성능에 대한 시각화 포함)을 CML 보고서에 포장하는 데 도움이되는 여러 기능을 제공합니다.
다음은 Markdown 보고서를 작성하고 해당 보고서를 CI 시스템에 전달하기위한 CML 기능 테이블입니다.
| 기능 | 설명 | 예제 입력 |
|---|---|---|
cml runner launch | 로컬로 또는 클라우드 제공 업체가 호스팅하는 러너를 출시 | 인수를 참조하십시오 |
cml comment create | gitlab/github 워크 플로에서 CML 보고서를 댓글로 반환하십시오. | <path to report> --head-sha <sha> |
cml check create | CML 보고서를 GitHub에서 확인하여 반환하십시오 | <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 Flavors)으로 작성되었습니다. 즉, 이미지, 테이블, 포맷 된 텍스트, 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 과 비교하십시오. 곧 github-actions 의 의견이 CML 보고서와 함께 풀 요청에 나타납니다. 이는 워크 플로에서 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은 선택 사항입니다.
cml runner는AWS_ACCESS_KEY_ID및AWS_SECRET_ACCESS_KEY사용하여 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 단계는 us-west 지역에서 EC2 g4dn.xlarge 인스턴스를 시작합니다. model-training 단계는 새로 출시 된 인스턴스에서 실행됩니다. 필요한 secrets 에 대한 자세한 내용은 아래 [환경 변수]를 참조하십시오.
? 작업은 Docker 컨테이너를 사용할 수 있습니다! 작업에서
cml send-comment와 같은 기능을 사용하려면 CML을 설치하는 것이 유일한 요구 사항입니다.
CML Docker Image ( ghcr.io/iterative/cml 또는 iterativeai/cml )에는 풀 스택 데이터 과학을위한 Python, Cuda, git , node 및 기타 필수품이 포함되어 있습니다. 이러한 필수 버전의 다른 버전은 다른 이미지 태그에서 사용할 수 있습니다. 태그 규칙은 {CML_VER}-dvc{DVC_VER}-base{BASE_VER}{-gpu} 입니다.
{BASE_VER} | 소프트웨어 포함 ( -gpu ) |
|---|---|
| 0 | 우분투 18.04, 파이썬 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 nodejsCML을 사용하는 몇 가지 예제 프로젝트입니다.
? PAT가 필요합니다.