ما هو CML؟ التعلم الآلي المستمر (CML) هو أداة CLI مفتوحة المصدر لتنفيذ التكامل المستمر والتسليم (CI/CD) مع التركيز على MLOPs. استخدمه لأتمتة سير عمل التنمية - بما في ذلك توفير الماكينة ، والتدريب على النماذج وتقييمها ، ومقارنة تجارب ML عبر تاريخ المشروع ، ومراقبة مجموعات البيانات المتغيرة.
يمكن أن تساعد CML في تدريب وتقييم النماذج - ثم إنشاء تقرير مرئي مع النتائج والمقاييس - تلقائيًا على كل طلب سحب.
مثال تقرير لنموذج نقل النمط العصبي.
مبادئ CML:
❓ هل تحتاج إلى مساعدة؟ فقط تريد الدردشة حول التكامل المستمر لـ ML؟ قم بزيارة قناة Discord!
⏯ تحقق من سلسلة فيديو YouTube الخاصة بنا للدروس العملية على MLOPS باستخدام CML!
ستحتاج إلى حساب gitlab أو github أو bitbucket للبدء. قد يرغب المستخدمون في التعرف على إجراءات GitHub أو Gitlab CI/CD. هنا ، سوف تناقش حالة استخدام جيثب.
يرجى الاطلاع على مستنداتنا على 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 والمكتبات المفيدة الأخرى المثبتة مسبقًا على صور Docker المخصصة. في المثال أعلاه ، ستجعل container: ghcr.io/iterative/cml:0-dvc2-base1 ) العداء يسحب صورة Docker CML. تحتوي الصورة بالفعل على Nodejs و Python 3 و DVC و CML تم إعدادها على قاعدة Ubuntu LTS للراحة.
يوفر CML عددًا من الوظائف للمساعدة في حزم مخرجات سير عمل ML (بما في ذلك البيانات الرقمية والتصورات حول أداء النموذج) في تقرير CML.
فيما يلي جدول لوظائف CML لكتابة تقارير التخفيض وتقديم هذه التقارير إلى نظام 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 في Marmdown (Github ، Gitlab ، أو Bitbucket Lovors). هذا يعني أنها يمكن أن تحتوي على صور وجداول ونص منسق وكتل 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 Browser. ومع ذلك ، للمتابعة مع الأوامر ، نوصي استنساخ شوكةك لمحطة العمل المحلية الخاصة بك:
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 ، ستجد ملفjsonعلىyour_project_path/.dvc/tmp/gdrive-user-credentials.json. انسخ محتوياته وأضفه كمتغير سري.
env :
GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} يتم تشغيل إجراءات GitHub على المتسابقين المستضافة GitHub بشكل افتراضي. ومع ذلك ، هناك العديد من الأسباب الرائعة لاستخدام المتسابقين الخاص بك: للاستفادة من وحدات معالجة الرسومات ، أو تنظيم موارد الحوسبة المشتركة لفريقك ، أو التدريب في السحابة.
☝ نصيحة! تحقق من وثائق GitHub الرسمية للبدء في إعداد عداءك المستضيف ذاتيا.
عندما يتطلب سير العمل موارد حسابية (مثل وحدات معالجة الرسومات) ، يمكن لـ CML تخصيص مثيلات سحابية باستخدام cml runner . يمكنك تدوير مثيلات على AWS أو Azure أو GCP أو Kubernetes.
على سبيل المثال ، يقوم سير العمل التالي بنشر مثيل g4dn.xlarge على AWS EC2 ويدرب نموذجًا على المثيل. بعد تشغيل المهمة ، يتم إيقاف التشغيل تلقائيًا.
قد تلاحظ أن سير العمل هذا يشبه تمامًا حالة الاستخدام الأساسية أعلاه. الإضافة الوحيدة هي 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 على مثيل 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 ، أو يتم تثبيته مسبقًا في صورة Docker مخصصة تم سحبها بواسطة عداء 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.
؟ يحتاج بات.