Was ist CML? Continuous Machine Learning (CML) ist ein Open-Source-CLI-Tool zur Implementierung der kontinuierlichen Integration und Lieferung (CI/CD) mit Schwerpunkt auf MLOPS. Verwenden Sie es, um Entwicklungsworkflows zu automatisieren - einschließlich der Bereitstellung von Maschinen, Modelltraining und -bewertung, Vergleich von ML -Experimenten über die Projekthistorie und die Überwachung der Änderung der Datensätze.
CML kann bei jeder Pull -Anfrage automatisch mit den Modellen trainieren und bewertet und dann einen visuellen Bericht mit Ergebnissen und Metriken erstellen.
Ein Beispielbericht für ein Transfermodell für neuronale Stil.
CML -Prinzipien:
❓ Hilfe brauchen? Möchten Sie nur über eine kontinuierliche Integration für ML chatten? Besuchen Sie unseren Discord -Kanal!
⏯️ Schauen Sie sich unsere YouTube-Videoreihe für praktische MLOPS-Tutorials mit CML an!
Sie benötigen einen Gitlab-, Github- oder Bitbucket -Konto, um zu beginnen. Benutzer möchten sich möglicherweise mit Github -Aktionen oder Gitlab CI/CD vertraut machen. Hier wird der GitHub -Anwendungsfall erörtert.
Weitere Informationen finden Sie in unseren Dokumenten zu CML mit Gitlab CI/CD und insbesondere der Anforderung für persönliche Zugriffsanforderungen.
Bitte beachten Sie unsere Dokumente auf CML mit Bitbucket -Cloud.
Die Schlüsseldatei in jedem CML -Projekt ist .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 Wir bieten CML und andere nützliche Bibliotheken, die in unseren benutzerdefinierten Docker-Bildern vorinstalliert sind. Im obigen Beispiel wird der Läufer das CML-Docker-Bild ziehen, wenn das Feld des container: ghcr.io/iterative/cml:0-dvc2-base1 ) das CML-Docker-Bild ziehen. Das Bild verfügt bereits über NodeJs, Python 3, DVC und CML, die auf einer Ubuntu -LTS -Basis eingerichtet sind.
CML bietet eine Reihe von Funktionen, um die Ausgaben von ML -Workflows (einschließlich numerischer Daten und Visualisierungen zur Modellleistung) in einen CML -Bericht zu packen.
Im Folgenden finden Sie eine Tabelle der CML -Funktionen zum Schreiben von Markdown -Berichten und zur Übergabe dieser Berichte an Ihr CI -System.
| Funktion | Beschreibung | Beispieleingänge |
|---|---|---|
cml runner launch | Starten Sie einen Läufer lokal oder gehostet von einem Cloud -Anbieter | Siehe Argumente |
cml comment create | Geben Sie den CML -Bericht als Kommentar in Ihrem GitLab/GitHub -Workflow zurück | <path to report> --head-sha <sha> |
cml check create | Geben Sie den CML -Bericht als Check in GitHub zurück | <path to report> --head-sha <sha> |
cml pr create | Bestimmen Sie die angegebenen Dateien an einen neuen Zweig und erstellen Sie eine Pull -Anfrage | <path>... |
cml tensorboard connect | Geben Sie einen Link zu einer Tensorboard.dev -Seite zurück | --logdir <path to logs> --title <experiment title> --md |
Mit dem Befehl cml comment create können Berichte veröffentlicht werden. CML -Berichte werden in Markdown (Github, Gitlab oder Bitbucket -Aromen) geschrieben. Das heißt, sie können Bilder, Tabellen, formatierte Text, HTML -Blöcke, Codeausschnitte und mehr enthalten - wirklich, was Sie in einen CML -Bericht einfügen, liegt bei Ihnen. Einige Beispiele:
? Euen Text in Ihren Bericht mit der Methode, die Sie bevorzugen. Kopieren Sie beispielsweise den Inhalt einer Textdatei mit den Ergebnissen des ML -Modelltrainings:
cat results.txt >> report.md Bilder zeigen Bilder mit dem Markdown oder HTML an. Beachten Sie, dass, wenn ein Bild eine Ausgabe Ihres ML -Workflows ist (dh es wird von Ihrem Workflow erzeugt), es hochgeladen und automatisch in Ihren CML -Bericht aufgenommen werden. Wenn beispielsweise graph.png von python train.py ausgegeben wird, rennen Sie:
echo "  " >> report.md
cml comment create report.md
Euen Beachten Sie, dass Sie, wenn Sie GitLab verwenden, ein persönliches Zugriffstoken für dieses Beispiel erstellen müssen, um zu funktionieren.
Euen Die folgenden Schritte können alle in der Github -Browser -Schnittstelle durchgeführt werden. Um den Befehlen zu folgen, empfehlen wir jedoch, Ihre Gabel an Ihre örtliche Workstation zu klonen:
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 Bearbeiten Sie in Ihrem Texteditor der Wahl Zeile 16 von train.py to depth = 5 .
Verpflichten und schieben Sie die Änderungen:
git checkout -b experiment
git add . && git commit -m " modify forest depth "
git push origin experimentexperiment -Zweig mit main zu vergleichen. In Kürze sollten Sie einen Kommentar von github-actions in der Pull-Anfrage mit Ihrem CML-Bericht sehen. Dies ist ein Ergebnis der cml send-comment in Ihrem Workflow.
Dies ist der Umriss des CML -Workflows:
.github/workflows/cml.yaml -Datei wird ausgeführt, undMit CML -Funktionen können Sie relevante Ergebnisse aus dem Workflow - wie z. B. Modellleistungsmetriken und Visualisierungen - in Github -Überprüfungen und -Ments anzeigen. Welche Art von Workflow möchten Sie ausführen und Ihren CML -Bericht einfügen möchten, liegt bei Ihnen.
In vielen ML -Projekten werden Daten nicht in einem Git -Repository gespeichert, müssen jedoch aus externen Quellen heruntergeladen werden. DVC ist eine häufige Möglichkeit, Daten an Ihren CML -Läufer zu bringen. Mit DVC können Sie auch visualisieren, wie sich Metriken zwischen Commits unterscheiden, um solche Berichte zu erstellen:
Die .github/workflows/cml.yaml -Datei, die zum Erstellen dieses Berichts verwendet wird, lautet:
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
Euen Wenn Sie DVC mit Cloud -Speicher verwenden, beachten Sie Umgebungsvariablen für Ihr Speicherformat.
Es gibt viele unterstützte Lageranbieter. Hier sind einige Beispiele für einige der am häufigsten verwendeten Anbieter:
# 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_TOKENist optional.
AWS_ACCESS_KEY_IDundAWS_SECRET_ACCESS_KEYkönnen auch voncml runnerverwendet werden, um EC2 -Instanzen zu starten. Siehe [Umgebungsvariablen].
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 }}
Euen Normalerweise istGOOGLE_APPLICATION_CREDENTIALSder Pfad derjson-Datei, die die Anmeldeinformationen enthält. In der Aktion ist diese geheime Variable jedoch der Inhalt der Datei. Kopieren Sie denjson-Inhalt und fügen Sie ihn als Geheimnis hinzu.
env :
GOOGLE_APPLICATION_CREDENTIALS : ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
Euen Nach dem Konfigurieren Ihrer Google Drive-Anmeldeinformationen finden Sie einejsonDatei unteryour_project_path/.dvc/tmp/gdrive-user-credentials.json. Kopieren Sie seinen Inhalt und fügen Sie ihn als geheime Variable hinzu.
env :
GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} GitHub-Aktionen werden standardmäßig auf Github-veranstalteten Läufern ausgeführt. Es gibt jedoch viele großartige Gründe, Ihre eigenen Läufer zu verwenden: GPUs zu nutzen, die gemeinsam genutzten Rechenressourcen Ihres Teams zu orchestrieren oder in der Cloud zu trainieren.
☝️ Tipp! Schauen Sie sich die offizielle GitHub-Dokumentation an, um Ihren eigenen selbst gehosteten Läufer einzurichten.
Wenn ein Workflow Rechenressourcen (z. B. GPUs) erfordert, kann CML Cloud -Instanzen automatisch über cml runner zuweisen. Sie können Instanzen auf AWS, Azure, GCP oder Kubernetes aufspannen.
Beispielsweise stellt der folgende Workflow eine g4dn.xlarge -Instanz auf AWS EC2 ein und schult ein Modell auf der Instanz. Nach dem Lauf der Arbeit wird die Instanz automatisch abgeschaltet.
Sie werden möglicherweise feststellen, dass dieser Workflow dem obigen grundlegenden Anwendungsfall ziemlich ähnlich ist. Der einzige Zusatz ist cml runner und einige Umgebungsvariablen für die Übergabe Ihrer Cloud -Service -Anmeldeinformationen an den Workflow.
Beachten Sie, dass cml runner Ihre Jobs automatisch neu starten (sei es aus GitHub-Aktionen 35-Tage-Workflow-Zeitüberschreitungen oder einer AWS-EC2-Spot-Instanz-Unterbrechung).
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 Im obigen Workflow startet der deploy-runner -Schritt eine EC2 g4dn.xlarge -Instanz in der us-west Region. Der model-training läuft dann auf der neu gestarteten Instanz. Weitere Informationen zu den erforderlichen secrets finden Sie unten [Umgebungsvariablen].
? Beachten Sie, dass Jobs jeden Docker -Container verwenden können! Um Funktionen wie
cml send-commentvon einem Job zu verwenden, besteht die einzige Anforderung darin, CML installiert zu haben.
Das CML-Docker-Bild ( ghcr.io/iterative/cml oder iterativeai/cml ) wird mit Python, Cuda, git , node und anderen wichtigen Grundlagen für Full-Stack-Datenwissenschaft geladen. Verschiedene Versionen dieser wichtigsten Grundlagen sind bei verschiedenen Bild -Tags verfügbar. Die Tag-Konvention ist {CML_VER}-dvc{DVC_VER}-base{BASE_VER}{-gpu} :
{BASE_VER} | Software enthalten ( -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) |
Beispielsweise iterativeai/cml:0-dvc2-base1-gpu oder ghcr.io/iterative/cml:0-dvc2-base1 .
Die cml runner launch akzeptiert die folgenden Argumente:
--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: ""]
Euen Sie müssen ein persönliches Zugriffs -Token (PAT) mit Repository -Lese-/Schreibzugriffs- und Workflow -Berechtigungen erstellen. Im Beispiel -Workflow wird dieses Token alsPERSONAL_ACCESS_TOKENgespeichert.
Wenn Sie die Option --cloud verwenden, müssen Sie auch Zugriffsanmeldeinformationen Ihrer Cloud -Rechenressourcen als Geheimnisse bereitstellen. Im obigen Beispiel sind im obigen Beispiel AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY (mit Berechtigungen zum Erstellen und Zerstören von EC2 -Instanzen) erforderlich.
Für AWS können dieselben Anmeldeinformationen auch zur Konfiguration des Cloud -Speichers verwendet werden.
CML unterstützt Proxy über bekannte Umgebungsvariablen http_proxy und https_proxy .
Dies bedeutet, dass On-Premise-Maschinen als selbst gehostete Läufer verwendet werden. Die cml runner launch wird verwendet, um einen lokalen selbst gehosteten Läufer einzurichten. Installieren Sie CML auf einer lokalen Maschine oder einem On-Premise-GPU-Cluster als Paket und führen Sie dann aus:
cml runner launch
--repo= $your_project_repository_url
--token= $PERSONAL_ACCESS_TOKEN
--labels= " local,runner "
--idle-timeout=180Die Maschine hört auf Workflows aus Ihrem Projektrepository an.
In den obigen Beispielen wird CML durch die setup-cml Aktion installiert oder wird in einem benutzerdefinierten Docker-Bild vorinstalliert, das von einem CI-Läufer gezogen wird. Sie können CML auch als Paket installieren:
npm install --location=global @dvcorg/cml Sie können cml ohne Knoten verwenden, indem Sie den richtigen Standalone -Binärdatum für Ihr System aus dem Asset -Abschnitt der Releases herunterladen.
Möglicherweise müssen Sie zusätzliche Abhängigkeiten installieren, um DVC-Diagramme und Vega-Lite-CLI-Befehle zu verwenden:
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 Die Installation von CML und Vega-Lite-Paket benötigt den NodeJS-Paketmanager ( npm ), der mit NodeJS geliefert wird. Installationsanweisungen finden Sie unten.
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 nodejsDies sind einige Beispielprojekte mit CML.
? braucht eine Pat.