CML คืออะไร? การเรียนรู้ของเครื่องจักรอย่างต่อเนื่อง (CML) เป็นเครื่องมือ CLI โอเพ่นซอร์สสำหรับการใช้งานการรวมและการส่งมอบอย่างต่อเนื่อง (CI/CD) โดยมุ่งเน้นที่ MLOPS ใช้เพื่อทำให้เวิร์กโฟลว์การพัฒนาเป็นไปโดยอัตโนมัติ - รวมถึงการจัดเตรียมเครื่องการฝึกอบรมแบบจำลองและการประเมินผลการเปรียบเทียบการทดลอง ML ในประวัติโครงการและการตรวจสอบชุดข้อมูลที่เปลี่ยนแปลง
CML สามารถช่วยฝึกอบรมและประเมินโมเดล - จากนั้นสร้างรายงานภาพด้วยผลลัพธ์และตัวชี้วัด - โดยอัตโนมัติในทุกคำขอการดึง
ตัวอย่างรายงานสำหรับรูปแบบการถ่ายโอนรูปแบบประสาท
หลักการ CML:
❓ต้องการความช่วยเหลือ? แค่อยากพูดคุยเกี่ยวกับการรวมอย่างต่อเนื่องสำหรับ ML? เยี่ยมชมช่อง Discord ของเรา!
⏯ตรวจสอบซีรีย์วิดีโอ YouTube ของเราสำหรับการสอน MLOPS แบบมือโดยใช้ CML!
คุณจะต้องมีบัญชี Gitlab, GitHub หรือ BitBucket เพื่อเริ่มต้น ผู้ใช้อาจต้องการทำความคุ้นเคยกับการกระทำของ GitHub หรือ Gitlab CI/CD ที่นี่จะหารือเกี่ยวกับกรณีการใช้ GitHub
โปรดดูเอกสารของเราเกี่ยวกับ CML ด้วย Gitlab CI/CD และโดยเฉพาะอย่างยิ่งความต้องการโทเค็นการเข้าถึงส่วนบุคคล
โปรดดูเอกสารของเราใน CML ด้วย BitBucket Cloud
ไฟล์คีย์ในโครงการ 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 และไลบรารีที่มีประโยชน์อื่น ๆ ที่ติดตั้งไว้ล่วงหน้าบนภาพนักเทียบท่าที่กำหนดเองของเรา ในตัวอย่างข้างต้นการคลายความไม่ลงรอยกันของฟิลด์ container: ghcr.io/iterative/cml:0-dvc2-base1 ) จะทำให้นักวิ่งดึงภาพ CML Docker ภาพมี NodeJS, Python 3, DVC และ CML ตั้งค่าบนฐาน Ubuntu LTS เพื่อความสะดวก
CML มีฟังก์ชั่นจำนวนหนึ่งเพื่อช่วยจัดทำเอาต์พุตของเวิร์กโฟลว์ ML (รวมถึงข้อมูลตัวเลขและการสร้างภาพข้อมูลเกี่ยวกับประสิทธิภาพของโมเดล) ลงในรายงาน CML
ด้านล่างนี้เป็นตารางของฟังก์ชั่น CML สำหรับการเขียนรายงาน Markdown และส่งรายงานเหล่านั้นไปยังระบบ CI ของคุณ
| การทำงาน | คำอธิบาย | อินพุตตัวอย่าง |
|---|---|---|
cml runner launch | เปิดตัวนักวิ่งในพื้นที่หรือโฮสต์โดยผู้ให้บริการคลาวด์ | ดูข้อโต้แย้ง |
cml comment create | ส่งคืนรายงาน CML เป็นความคิดเห็นในเวิร์กโฟลว์ Gitlab/GitHub ของคุณ | <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 รสชาติ) นั่นหมายความว่าพวกเขาสามารถมีรูปภาพตารางข้อความที่จัดรูปแบบบล็อก HTML ตัวอย่างโค้ดและอื่น ๆ - จริง ๆ แล้วสิ่งที่คุณใส่ในรายงาน CML ขึ้นอยู่กับคุณ ตัวอย่างบางส่วน:
️ ข้อความ เขียนลงในรายงานของคุณโดยใช้วิธีใดก็ตามที่คุณต้องการ ตัวอย่างเช่นคัดลอกเนื้อหาของไฟล์ข้อความที่มีผลลัพธ์ของการฝึกอบรม ML Model:
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 ในตัวแก้ไขข้อความที่คุณเลือกแก้ไขบรรทัดที่ 16 ของ train.py ถึง 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เป็นทางเลือก
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 Drive ของคุณแล้วคุณจะพบไฟล์ jsonที่your_project_path/.dvc/tmp/gdrive-user-credentials.jsonคัดลอกเนื้อหาและเพิ่มเป็นตัวแปรลับ
env :
GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} การกระทำของ GitHub จะทำงานบนนักวิ่ง GitHub โดยค่าเริ่มต้น อย่างไรก็ตามมีเหตุผลที่ยอดเยี่ยมมากมายในการใช้นักวิ่งของคุณเอง: เพื่อใช้ประโยชน์จาก GPU, จัดทำทรัพยากรคอมพิวเตอร์ที่ใช้ร่วมกันของทีมหรือฝึกอบรมในระบบคลาวด์
☝ เคล็ดลับ! ตรวจสอบเอกสาร GitHub อย่างเป็นทางการเพื่อเริ่มต้นการตั้งค่านักวิ่งโฮสต์ของคุณเอง
เมื่อเวิร์กโฟลว์ต้องการทรัพยากรการคำนวณ (เช่น GPU) CML สามารถจัดสรรอินสแตนซ์คลาวด์โดยอัตโนมัติโดยใช้ cml runner โดยอัตโนมัติ คุณสามารถหมุนอินสแตนซ์บน AWS, Azure, GCP หรือ Kubernetes
ตัวอย่างเช่นเวิร์กโฟลว์ต่อไปนี้ปรับใช้อินสแตนซ์ g4dn.xlarge บน AWS EC2 และฝึกอบรมโมเดลในอินสแตนซ์ หลังจากทำงานแล้วอินสแตนซ์จะปิดตัวลงโดยอัตโนมัติ
คุณอาจสังเกตเห็นว่าเวิร์กโฟลว์นี้ค่อนข้างคล้ายกับกรณีการใช้งานพื้นฐานด้านบน การเพิ่มเพียงอย่างเดียวคือ cml runner และตัวแปรสภาพแวดล้อมบางอย่างสำหรับการผ่านข้อมูลรับรองบริการคลาวด์ของคุณไปยังเวิร์กโฟลว์
โปรดทราบว่า cml runner จะรีสตาร์ทงานของคุณโดยอัตโนมัติ (ไม่ว่าจะมาจากการดำเนินการหมดเวลาเวิร์กโฟลว์ 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 เปิดตัวอินสแตนซ์ EC2 g4dn.xlarge ในภูมิภาค us-west ขั้นตอน 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 นอกจากนี้คุณยังสามารถติดตั้ง 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 Package Manager ( npm ) ซึ่งจัดส่งด้วย NodeJS คำแนะนำการติดตั้งอยู่ด้านล่าง
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
- ต้องการตบเบา ๆ