TL;DR
Das Trainieren eines ML-Modells kann manchmal kompliziert sein, um es einzurichten und zu wiederholen:
- Dies könnte mit einem Code geschehen, der auf einem Notebook auf einer VM gehostet wird, die Sie manuell starten und nach Beendigung wieder abschalten müssen.
- Möglicherweise müssen Sie jedes Mal ein dataset hochladen, wenn Sie es erneut trainieren möchten.
- Sie müssen tief in Ihren Code eintauchen, wenn Sie einen einzelnen Parameter ändern wollen
- usw.
In diesem Artikel sehen wir uns an, wie wir den Trainingsprozess der Textklassifikatoren von FastAI mit der Google Cloud AI Platform automatisiert haben.
In einem zweiten Artikel werden wir sehen, wie wir es geschafft haben, solche Modelle mit AI Platform und TorchServe einzusetzen.
Für wen?
Wenn Sie an einem Projekt arbeiten, bei dem ML-Modelle mehrfach trainiert werden müssen, und Sie es leid sind, Ihre Trainings manuell durchzuführen, sind Sie hier genau richtig.
Wenn Sie es leid sind, VMs für Ihr Training zu verwalten und Ihre Zeit für etwas Interessanteres nutzen möchten, wie z.B. das Lesen von Medium-Artikeln, dann sind Sie hier genau richtig!
Dieser Artikel ist denjenigen gewidmet, die wissen möchten, wie sie Zeit und Ressourcen gewinnen können, indem sie AI Platform für das Training ihrer ML-Modelle verwenden. Wir werden in diesem Artikel sehen, wie wir dies auf ein Projekt angewendet haben, an dem wir gearbeitet haben, indem wir FastAI.
Dieser Artikel ist denjenigen gewidmet, die wissen möchten, wie sie Zeit und Ressourcen gewinnen können, indem sie AI Platform für das Training ihrer ML-Modelle verwenden. Wir werden in diesem Artikel sehen, wie wir dies auf ein Projekt angewendet haben, an dem wir gearbeitet haben, indem wir FastAI.
Voraussetzungen, wenn Sie nachmachen wollen, was wir gemacht haben
AI Platform ist Teil der Google Cloud Platform Suite, ebenso wie die anderen Dienste, die wir zur Automatisierung unserer Trainingspipeline verwendet haben. Hier sind die GCP-Dienste, die wir verwendet haben:
Google Cloud SDK, Docker und Nvidia-docker müssen auf dem Rechner, auf dem das Docker-Image erstellt wird, installiert und eingerichtet werden. Der Sinn der Installation von Nvidia-docker besteht darin, das erstellte Docker-Image direkt auf dem Grafikprozessor des Rechners (falls vorhanden) ausführen zu können, um sicherzustellen, dass der Code keine Fehler enthält und das Training wie erwartet auf der KI-Plattform läuft.
Wie wir später in diesem Artikel sehen werden, wurde das Docker-Image aus dem Nvidia-Cuda-Docker-Image erstellt, so dass die erforderlichen Nvidia-Treiber beim Erstellen des Images automatisch installiert werden.
Kontext
In diesem Artikel werden wir sehen, wie wir das Training eines Textklassifizierers automatisiert haben, der mit FastAI erstellt wurde, einer Bibliothek, mit der Benutzer dank der ULM FiT-Methode leistungsstarke Modelle erstellen können.

Wir haben sie bereits vorgestellt in ein weiterer Medium-Artikel, Ich lade Sie also ein, es sich anzusehen, wenn Sie mehr darüber erfahren möchten.
Da das, was wir in diesem Artikel sehen werden, auf jedes Framework anwendbar ist, müssen Sie nicht mit FastAI vertraut sein, um weiterzulesen. Alles, was Sie wissen müssen, ist, dass wir zum Trainieren unseres Textklassifizierers neben einem gelabelten dataset auch ein vortrainiertes Modell verwendet haben.
Wie wir die Schulung mit AIPlatform einrichten
Um das Modelltraining mit AI Platform zu automatisieren, müssen Sie festlegen, welcher Code in welcher Umgebung ausgeführt werden soll, wenn der Trainingsbefehl aufgerufen wird. Am besten ist es, ein Docker-Image zu erstellen, das den gesamten Trainingscode und seine Umgebung enthält, so dass AI Platform jedes Mal, wenn Sie es auffordern, ein Modell zu trainieren, nur einen Container aus diesem Image erstellen muss. Wir werden in diesem Teil sehen, wie wir das gemacht haben.
Speichern Sie alle erforderlichen Dateien in einem GCS-Eimer
Bevor wir unser Docker-Image erstellen, das unser Training enthält, mussten wir uns Gedanken über die Dateien machen, die beim Training eines FastAI Textklassifizierungsmodells verwendet werden. Wir beschlossen daher, alle für das Training erforderlichen Dateien in einem GCS-Bucket zu speichern, getrennt in Ordnern für jede Sprache, wobei jeder Datei ein bestimmter Name zugewiesen wurde.
Wir haben dann in unserem Trainingscode (wie wir weiter unten sehen werden) eine Methode implementiert, um diese benötigten Dateien von GCS abzurufen, indem wir nur die Zielsprache als Argument angeben.

Schreiben Sie den Trainingscode
Nachdem wir die erforderlichen Dateien in GCS hochgeladen haben, haben wir eine Repo mit dem Code für das Training unserer Modelle, der später in einem Docker Image gespeichert werden soll.
Wie Sie in dem verlinkten Repo sehen können, haben wir den Code für das Training in separate Dateien aufgeteilt, um die gesamte Trainingspipeline richtig zu handhaben.

Wir haben eine Datei definiert, die den gesamten Trainingsworkflow wie folgt ausführt:
fastai_train.py ist die einzige Datei, die direkt Methoden von FastAI verwendet. Wenn also jemand ein anderes Framework für sein Training einsetzen möchte, muss er nur diese Datei ändern (und natürlich den Inhalt der Konfigurationsdatei).
Der nächste Schritt bestand dann darin, ein Docker-Image zu erstellen, das alles enthält, was für die korrekte Ausführung des Trainings erforderlich ist.
Erstellen Sie die Dockerdatei
Nach der Vorbereitung des Trainingscodes musste eine Dockerdatei erstellt und an Google Container Registry übermittelt werden, damit AI Platform den Code in der richtigen Umgebung abrufen und ausführen kann.
Da das Training unseres Modells auf einer GPU laufen musste, haben wir das Nvidia-cuda Docker-Image importiert, um unser eigenes zu erstellen, so dass alle notwendigen Treiber bereits installiert waren.
# Dockerfile
VON nvidia/cuda:10.2-devel
RUN apt-get update && apt-get install -y --no-install-recommends
wget
build-essential
RUN apt-get update && apt-get install -y --no-install-recommends
python3-dev
python3-setuptools
python3-pip
RUN pip3 install pip==20.3.1
WORKDIR /root
# Erstellen Sie Verzeichnisse, die den Code und das heruntergeladene Modell von GCS enthalten
RUN mkdir /wurzel/trainer
RUN mkdir /wurzel/modelle
# Kopieren Sie die Anforderungen
COPY requirements.txt /root/requirements.txt
# Installieren Sie pytorch
RUN pip3 install torch==1.8.0
# Installieren Sie die Anforderungen
RUN pip3 install -r anforderungen.txt
# Installiert google cloud sdk, dies ist hauptsächlich für die Verwendung von gsutil zum Exportieren von Modellen.
RUN wget -nv
https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz &&
mkdir /root/tools &&
tar xvzf google-cloud-sdk.tar.gz -C /root/tools &&
rm google-cloud-sdk.tar.gz &&
/root/tools/google-cloud-sdk/install.sh --usage-reporting=false
--path-update=false --bash-completion=false
--disable-installation-options &&
rm -rf /root/.config/* &&
ln -s /wurzel/.config /config &&
# Entfernen Sie das von gcloud erstellte Backup-Verzeichnis
rm -rf /root/tools/google-cloud-sdk/.install/.backup
# Kopieren Sie die Dateien
COPY trainer/fastai_train.py /root/trainer/fastai_train.py
COPY trainer/fastai_config.py /root/trainer/fastai_config.py
KOPIEREN Sie trainer/args_getter.py /root/trainer/args_getter.py
COPY trainer/gcs_utils.py /root/trainer/gcs_utils.py
COPY trainer/training_workflow.py /root/trainer/training_workflow.py
# Pfad-Konfiguration
ENV PATH $PATH:/root/tools/google-cloud-sdk/bin
# Stellen Sie sicher, dass gsutil das Standard-Servicekonto verwendet
RUN echo '[GoogleCompute]nservice_account = default' > /etc/boto.cfg
# Authentifizieren Sie sich bei GCP
CMD gcloud auth anmelden
# Richten Sie den Einstiegspunkt zum Aufrufen des Trainers ein.
ENTRYPOINT ["python3", "trainer/training_workflow.py"]
Wie Sie oben sehen können, führt das Dockerfile die folgenden Schritte aus, um das Image zu erstellen:
Erstellen Sie das Image und übertragen Sie es an GCR
Nach der Erstellung der Dockerdatei musste das Image gebaut werden, um es an GCR zu übergeben. Wie im Repo angegeben, mussten verschiedene lokale Variablen definiert werden, wie z.B. die IMAGE_URI in GCR, die REGION unsere Operationen, etc.
Das Image wurde mit diesem Befehl erstellt:
docker build -f Dockerfile -t $IMAGE_URI ./
Bevor wir es an den GCR übertragen, wollten wir sicherstellen, dass beim Aufrufen des Trainings alles einwandfrei funktioniert. Da unsere VM über eine GPU verfügte, haben wir das Image vor dem Übertragen ausgeführt, um zu sehen, was passiert:
docker run --runtime=nvidia $IMAGE_URI --epochs 1 --bucket-name $BUCKET_NAME
Dieser Schritt ist nicht notwendig, kann Ihnen aber viel Zeit ersparen, da Sie so direkt sehen, ob Ihr Code Fehler enthält.
Schließlich haben wir den Container mit folgendem Befehl in den GCR verschoben, $IMAGE_URI ist die Variable, die auf den URI verweist, in dem das Bild in GCR gespeichert ist:
docker push $IMAGE_URI
Führen Sie den Auftrag aus und verfolgen Sie ihn
Nachdem Sie die vorangegangenen Schritte befolgt hatten, war das Training des Modells bereit, mit einem einfachen Befehl im Terminal aufgerufen zu werden. Das Google Cloud SDK musste lediglich aktiviert und lokale Variablen definiert werden:
gcloud ai-platform jobs submit training $JOB_NAME --Skalierungsebene BASIC_GPU --region $REGION --master-image-uri $IMAGE_URI -- --lang=fr --epochs=10 --bucket-name=$BUCKET_NAME --model-dir=$MODEL_DIR
Mit diesem Befehl wird AI Platform aufgefordert, den Container in GCR unter Verwendung seiner IMAGE_URI abzurufen und dann das Training auf dem Grafikprozessor eines Rechners in der Region REGION auszuführen.
Wir haben hier verschiedene Argumente angegeben, wie die Trainingssprache, die Anzahl der Epochen, den Bucket-Namen zum Hoch- und Herunterladen von Dateien in GCS und das Verzeichnis, in dem das trainierte Modell gespeichert werden soll. Dies sind die Argumente, die von der Datei args_getter.py abgerufen werden
Nach der Ausführung des Befehls wurde das Training gestartet und ein Job in der AI Platform-Konsole erstellt, so dass wir die Entwicklung des Trainings verfolgen und die Protokolle der Maschine, die es ausführt, überprüfen können.
Viele Informationen sind zugänglich, wenn Sie den Job in der AI Platform-Konsole ansehen

Wenn der Auftrag abgeschlossen ist, wird das trainierte Modell in einem GCS-Bucket als .pth-Datei zusammen mit einer .json-Datei gespeichert, die seine Leistung enthält.


Wir haben uns entschlossen, die Ergebnisse zu den Labels getrennt zu betrachten, als ob wir einen binären Klassifikator für jedes mögliche Label hätten.
Da wir FastAI verwendet haben, kann die Modelldatei in jeder Umgebung direkt geladen werden, indem Sie die load_learner()-Methode von FastAI aufrufen.

Das Wichtigste zum Mitnehmen
Durch die Automatisierung des Trainings unserer Modelle mit AI Platform konnten wir viel Zeit sparen und mussten verschiedene Aspekte unseres Modelltrainings berücksichtigen, um es effizient in die Produktion zu bringen.
Hier sind einige Erkenntnisse, die wir daraus gewonnen haben:
Was kommt als Nächstes?
Nachdem wir Ihnen nun erklärt haben, wie wir das Training unseres Modells automatisiert haben, können wir Ihnen nun zeigen, wie wir es geschafft haben, es einfach aufzurufen, um Dateien bei Bedarf zu klassifizieren.
Bleiben Sie dran für den zweiten Teil dieses Artikels, in dem alles erklärt wird, was Sie wissen müssen, um Ihre trainierten Klassifikatoren mit AI Platform und TorchServe einzusetzen!
Danke fürs Lesen!
Wir hoffen, dass Sie heute etwas gelernt haben und dass es Ihnen bei Ihren zukünftigen ML-Projekten nützlich sein wird. Wenn Sie Fragen oder Kommentare zu diesem Thema haben, können Sie uns gerne kontaktieren.

BLOG







