Apa itu CML? Continuous Machine Learning (CML) adalah alat CLI open-source untuk menerapkan integrasi & pengiriman kontinu (CI/CD) dengan fokus pada MLOPS. Gunakan untuk mengotomatiskan alur kerja pengembangan - termasuk penyediaan mesin, pelatihan model dan evaluasi, membandingkan percobaan ML di seluruh riwayat proyek, dan memantau perubahan set data.
CML dapat membantu melatih dan mengevaluasi model - dan kemudian menghasilkan laporan visual dengan hasil dan metrik - secara otomatis pada setiap permintaan tarik.
Contoh laporan untuk model transfer gaya saraf.
Prinsip CML:
❓ Butuh bantuan? Hanya ingin mengobrol tentang integrasi berkelanjutan untuk ML? Kunjungi Saluran Perselisihan kami!
⏯️ Lihat seri video YouTube kami untuk tutorial MLOPS langsung menggunakan CML!
Anda akan memerlukan akun GitLab, GitHub, atau Bitbucket untuk memulai. Pengguna mungkin ingin membiasakan diri dengan tindakan GitHub atau Gitlab CI/CD. Di sini, akan membahas kasus penggunaan GitHub.
Silakan lihat dokumen kami di CML dengan Gitlab CI/CD dan khususnya persyaratan token akses pribadi.
Silakan lihat dokumen kami di CML dengan Cloud Bitbucket.
File kunci dalam proyek CML apa pun adalah .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 Kami membantu menyediakan CML dan perpustakaan bermanfaat lainnya yang telah dipasang sebelumnya pada gambar Docker khusus kami. Dalam contoh di atas, menghapus container: ghcr.io/iterative/cml:0-dvc2-base1 ) akan membuat pelari menarik gambar CML Docker. Gambar sudah memiliki NodeJs, Python 3, DVC dan CML yang diatur di pangkalan Ubuntu LTS untuk kenyamanan.
CML menyediakan sejumlah fungsi untuk membantu mengemas output alur kerja ML (termasuk data numerik dan visualisasi tentang kinerja model) ke dalam laporan CML.
Di bawah ini adalah tabel fungsi CML untuk menulis laporan penurunan harga dan menyampaikan laporan tersebut ke sistem CI Anda.
| Fungsi | Keterangan | Contoh input |
|---|---|---|
cml runner launch | Luncurkan pelari lokal atau di -host oleh penyedia cloud | Lihat argumen |
cml comment create | Kembalikan laporan CML sebagai komentar dalam alur kerja gitlab/github Anda | <path to report> --head-sha <sha> |
cml check create | Kembalikan laporan CML sebagai cek di github | <path to report> --head-sha <sha> |
cml pr create | Melakukan file yang diberikan ke cabang baru dan buat permintaan tarik | <path>... |
cml tensorboard connect | Kembalikan tautan ke halaman Tensorboard.dev | --logdir <path to logs> --title <experiment title> --md |
Perintah cml comment create dapat digunakan untuk memposting laporan. Laporan CML ditulis dalam markdown (gitub, gitlab, atau rasa bitbucket). Itu berarti mereka dapat berisi gambar, tabel, teks yang diformat, blok HTML, cuplikan kode dan banyak lagi - sungguh, apa yang Anda masukkan ke dalam laporan CML terserah Anda. Beberapa contoh:
? ️ Teks Tulis ke laporan Anda menggunakan metode apa pun yang Anda sukai. Misalnya, salin konten file teks yang berisi hasil pelatihan model ML:
cat results.txt >> report.md ? ️ Gambar menampilkan gambar menggunakan Markdown atau HTML. Perhatikan bahwa jika suatu gambar merupakan output dari alur kerja ML Anda (yaitu, itu diproduksi oleh alur kerja Anda), itu dapat diunggah dan disertakan secara otomatis ke laporan CML Anda. Misalnya, jika graph.png adalah output oleh python train.py , jalankan:
echo "  " >> report.md
cml comment create report.md
️ Perhatikan bahwa jika Anda menggunakan GitLab, Anda perlu membuat token akses pribadi agar contoh ini berfungsi.
️ Langkah -langkah berikut semua dapat dilakukan di antarmuka browser GitHub. Namun, untuk mengikuti perintah, kami sarankan mengkloning garpu Anda ke workstation lokal Anda:
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 Di editor teks pilihan Anda, edit baris 16 dari train.py ke depth = 5 .
Berkomitmen dan dorong perubahan:
git checkout -b experiment
git add . && git commit -m " modify forest depth "
git push origin experimentexperiment dengan main . Singkatnya, Anda harus melihat komentar dari github-actions muncul dalam permintaan tarik dengan laporan CML Anda. Ini adalah hasil dari fungsi cml send-comment dalam alur kerja Anda.
Ini adalah garis besar alur kerja CML:
.github/workflows/cml.yaml Anda dijalankan, danFungsi CML memungkinkan Anda menampilkan hasil yang relevan dari alur kerja - seperti metrik kinerja model dan visualisasi - dalam pemeriksaan dan komentar GitHub. Alur kerja seperti apa yang ingin Anda jalankan, dan ingin memasukkan laporan CML Anda, terserah Anda.
Dalam banyak proyek ML, data tidak disimpan dalam repositori git, tetapi perlu diunduh dari sumber eksternal. DVC adalah cara umum untuk membawa data ke pelari CML Anda. DVC juga memungkinkan Anda memvisualisasikan bagaimana metrik berbeda antara komitmen untuk membuat laporan seperti ini:
File .github/workflows/cml.yaml yang digunakan untuk membuat laporan ini adalah:
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
️ Jika Anda menggunakan DVC dengan penyimpanan cloud, perhatikan variabel lingkungan untuk format penyimpanan Anda.
Ada banyak penyedia penyimpanan yang didukung. Berikut adalah beberapa contoh untuk beberapa penyedia yang paling sering digunakan:
# 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_TOKENadalah opsional.
AWS_ACCESS_KEY_IDdanAWS_SECRET_ACCESS_KEYjuga dapat digunakan olehcml runneruntuk meluncurkan instance EC2. Lihat [Variabel Lingkungan].
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 }}
️ Biasanya,GOOGLE_APPLICATION_CREDENTIALSadalah jalur filejsonyang berisi kredensial. Namun dalam tindakan variabel rahasia ini adalah isi file. Salin kontenjsondan tambahkan sebagai rahasia.
env :
GOOGLE_APPLICATION_CREDENTIALS : ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
️ Setelah mengkonfigurasi kredensial Google Drive Anda, Anda akan menemukan filejsondiyour_project_path/.dvc/tmp/gdrive-user-credentials.json. Salin isinya dan tambahkan sebagai variabel rahasia.
env :
GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} Tindakan GitHub dijalankan pada pelari github-host secara default. Namun, ada banyak alasan bagus untuk menggunakan pelari Anda sendiri: untuk memanfaatkan GPU, mengatur sumber daya komputasi bersama tim Anda, atau berlatih di cloud.
☝️ Tip! Lihatlah dokumentasi GitHub resmi untuk memulai menyiapkan pelari yang di-hosting sendiri.
Ketika alur kerja membutuhkan sumber daya komputasi (seperti GPU), CML dapat secara otomatis mengalokasikan instance cloud menggunakan cml runner . Anda dapat memutar instance pada AWS, Azure, GCP, atau Kubernetes.
Misalnya, alur kerja berikut menyebarkan instance g4dn.xlarge pada AWS EC2 dan melatih model pada instance. Setelah pekerjaan berjalan, instance secara otomatis dimatikan.
Anda mungkin memperhatikan bahwa alur kerja ini sangat mirip dengan kasus penggunaan dasar di atas. Satu -satunya tambahan adalah cml runner dan beberapa variabel lingkungan untuk meneruskan kredensial layanan cloud Anda ke alur kerja.
Perhatikan bahwa cml runner juga akan secara otomatis memulai kembali pekerjaan Anda (baik dari gitub aksi 35 hari alur kerja timeout atau gangguan instance spot 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 Dalam alur kerja di atas, langkah deploy-runner meluncurkan instance EC2 g4dn.xlarge di wilayah us-west . Langkah model-training kemudian berjalan pada instance yang baru diluncurkan. Lihat [Variabel Lingkungan] di bawah ini untuk detail tentang secrets yang diperlukan.
? Perhatikan bahwa pekerjaan dapat menggunakan wadah Docker apa pun! Untuk menggunakan fungsi seperti
cml send-commentdari suatu pekerjaan, satu-satunya persyaratan adalah memasang CML.
Gambar CML Docker ( ghcr.io/iterative/cml atau iterativeai/cml ) dilengkapi dengan python, cuda, git , node , dan hal-hal penting lainnya untuk ilmu data stack full-stack. Versi yang berbeda dari hal -hal penting ini tersedia dari berbagai tag gambar. Konvensi tag adalah {CML_VER}-dvc{DVC_VER}-base{BASE_VER}{-gpu} :
{BASE_VER} | Termasuk perangkat lunak ( -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) |
Misalnya, iterativeai/cml:0-dvc2-base1-gpu , atau ghcr.io/iterative/cml:0-dvc2-base1 .
Fungsi cml runner launch menerima argumen berikut:
--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: ""]
️ Anda perlu membuat Token Akses Pribadi (PAT) dengan akses baca/tulis repositori dan hak istimewa alur kerja. Dalam contoh alur kerja, token ini disimpan sebagaiPERSONAL_ACCESS_TOKEN.
Jika menggunakan opsi --cloud , Anda juga perlu memberikan kredensial akses dari sumber daya komputasi cloud Anda sebagai rahasia. Dalam contoh di atas, AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY (dengan hak istimewa untuk membuat & menghancurkan instance EC2) diperlukan.
Untuk AWS, kredensial yang sama juga dapat digunakan untuk mengkonfigurasi penyimpanan cloud.
Proksi Dukungan CML melalui variabel lingkungan yang diketahui http_proxy dan https_proxy .
Ini berarti menggunakan mesin di tempat sebagai pelari yang diselenggarakan sendiri. Fungsi cml runner launch digunakan untuk mengatur pelari self-hosting lokal. Pada mesin lokal atau kluster GPU di lokasi, instal CML sebagai paket dan kemudian jalankan:
cml runner launch
--repo= $your_project_repository_url
--token= $PERSONAL_ACCESS_TOKEN
--labels= " local,runner "
--idle-timeout=180Mesin akan mendengarkan alur kerja dari repositori proyek Anda.
Dalam contoh di atas, CML dipasang oleh tindakan setup-cml , atau dipasang sebelumnya dalam gambar Docker khusus yang ditarik oleh pelari CI. Anda juga dapat menginstal CML sebagai paket:
npm install --location=global @dvcorg/cml Anda dapat menggunakan cml tanpa simpul dengan mengunduh biner mandiri yang benar untuk sistem Anda dari bagian aset rilis.
Anda mungkin perlu menginstal dependensi tambahan untuk menggunakan plot DVC dan perintah CLI Vega-Lite:
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 Instalasi paket CML dan Vega-Lite memerlukan NodeJS Package Manager ( npm ) yang dikirimkan dengan nodeJS. Instruksi instalasi ada di bawah ini.
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 nodejsIni adalah beberapa contoh proyek menggunakan CML.
? membutuhkan tepukan.