Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Den eigenen Trainingscontainer anpassen
Um Ihr eigenes Trainingsmodell auszuführen, erstellen Sie mithilfe des Amazon SageMaker Training Toolkit über eine SageMaker Amazon-Notebook-Instance
Schritt 1: Erstellen Sie eine SageMaker Notebook-Instance
Öffnen Sie die Amazon SageMaker AI-Konsole unter https://console.aws.amazon.com/sagemaker/
. -
Wählen Sie im linken Navigationsbereich Notebook, wählen Sie danach Notebook-Instances und anschließend Notebook-Instance erstellen.
-
Geben Sie auf der Seite Notebook-Instance erstellen folgende Informationen ein:
-
Geben Sie unter Notebook instance name (Name der Notebook-Instance)
RunScriptNotebookInstance
ein. -
Wählen Sie für Notebook instance type (Typ der Notebook-Instance)
ml.t2.medium
aus. -
Im Abschnitt Berechtigungen und Verschlüsselung gehen Sie wie folgt vor:
-
Wählen Sie für IAM Role (IAM-Rolle) die Option Create a New Role (Neue Rolle erstellen) aus. Dies öffnet ein neues Fenster.
-
Wählen Sie auf der Seite IAM-Rolle erstellen die Option Bestimmte S3-Buckets aus, geben Sie einen Amazon-S3-Bucket mit dem Namen
sagemaker-run-script
an und wählen Sie dann Rolle erstellen aus.SageMaker AI erstellt eine IAM-Rolle mit dem Namen
AmazonSageMaker-ExecutionRole-
. Beispiel,YYYYMMDD
THHmmSS
AmazonSageMaker-ExecutionRole-20190429T110788
. Beachten Sie, dass bei der Namenskonvention für Ausführungsrollen das Datum und die Uhrzeit verwendet werden, zu denen die Rolle erstellt wurde, getrennt durch einenT
.
-
-
Wählen Sie für Root Access (Root-Zugriff) die Option Enabled (Aktiviert) aus.
-
Wählen Sie Create notebook instance (Notebook-Instance erstellen) aus.
-
-
Auf der Seite Notebook-Instances lautet der Status Ausstehend. Es kann einige Minuten dauern, bis Amazon SageMaker AI eine Recheninstanz für maschinelles Lernen startet — in diesem Fall startet sie eine Notebook-Instance — und ihr ein ML-Speichervolume anhängt. Die Notebook-Instance verfügt über einen vorkonfigurierten Jupyter-Notebook-Server und mehrere Anaconda-Bibliotheken. Weitere Informationen finden Sie unter CreateNotebookInstance.
-
Klicken Sie auf den Namen des Notebooks, das Sie gerade erstellt haben. Dies öffnet eine neue Seite.
-
Kopieren Sie im Abschnitt Berechtigungen und Verschlüsselung die ARN-Nummer der IAM-Rolle und fügen Sie sie in eine Notepad-Datei ein, um sie vorübergehend zu speichern. Sie verwenden diese IAM-Rollen-ARN-Nummer später, um einen lokalen Trainingsschätzer in der Notebook-Instance zu konfigurieren. Die ARN-Nummer der IAM-Rolle sieht wie folgt aus:
'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
-
Nachdem sich der Status der Notebook-Instanz auf geändert hat InService, wählen Sie Öffnen JupyterLab.
Schritt 2: Erstellen und Hochladen der Dockerdatei und der Python-Trainingsskripte
-
Erstellen Sie nach dem JupyterLab Öffnen einen neuen Ordner im Home-Verzeichnis Ihres JupyterLab. Wählen Sie links oben das Symbol Neuer Ordner und geben Sie dann den Ordnernamen
docker_test_folder
ein. -
Erstellen Sie in dem Verzeichnis
docker_test_folder
eine Datei namensDockerfile
.-
Wählen Sie das Symbol Neuer Launcher (+) in der oberen linken Ecke.
-
Wählen Sie im rechten Bereich unter dem Abschnitt Andere die Option Textdatei.
-
Fügen Sie den folgenden
Dockerfile
-Beispielcode in Ihre Textdatei ein.#Download an open source TensorFlow Docker image FROM tensorflow/tensorflow:latest-gpu-jupyter # Install sagemaker-training toolkit that contains the common functionality necessary to create a container compatible with SageMaker AI and the Python SDK. RUN pip3 install sagemaker-training # Copies the training code inside the container COPY train.py /opt/ml/code/train.py # Defines train.py as script entrypoint ENV SAGEMAKER_PROGRAM train.py
Das Dockerfile-Skript führt die folgenden Aufgaben aus:
-
FROM tensorflow/tensorflow:latest-gpu-jupyter
— Lädt das neueste TensorFlow Docker-Basis-Image herunter. Sie können dies durch jedes Docker-Basis-Image ersetzen, das Sie zum Erstellen von Containern verwenden möchten, sowie durch AWS vorgefertigte Container-Basis-Images. -
RUN pip install sagemaker-training
— Installiert das SageMaker AI Training Toolkit, das die allgemeinen Funktionen enthält, die zur Erstellung eines mit KI kompatiblen Containers erforderlich sind. SageMaker -
COPY train.py /opt/ml/code/train.py
— Kopiert das Skript an die Stelle innerhalb des Containers, die von der SageMaker KI erwartet wird. Das Skript muss sich in diesem Ordner befinden. -
ENV SAGEMAKER_PROGRAM train.py
– Verwendet Ihr Trainingsskripttrain.py
als Einstiegsskript, das in den/opt/ml/code
Ordner des Containers kopiert wird. Dies ist die einzige Umgebungsvariable, die Sie angeben müssen, wenn Sie Ihren eigenen Container erstellen.
-
-
In der linken Verzeichnisnavigation wird der Name der Textdatei automatisch auf
untitled.txt
festgelegt. Um die Datei umzubenennen, klicken Sie mit der rechten Maustaste auf die Datei, wählen Sie Umbenennen, benennen Sie die Datei inDockerfile
um ohne die.txt
-Erweiterung, und drücken Sie dann aufCtrl+s
oderCommand+s
, um die Datei zu speichern.
-
-
Laden Sie ein Trainingsskript
train.py
in dendocker_test_folder
hoch. Sie können das folgende Beispielskript verwenden, um ein Modell zu erstellen, das handgeschriebene Ziffern liest, die mit dem MNIST-Datensatzfür diese Übung trainiert wurden. import tensorflow as tf import os mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=1) model_save_dir = f"{os.environ.get('SM_MODEL_DIR')}/1" model.evaluate(x_test, y_test) tf.saved_model.save(model, model_save_dir)
Schritt 3: Erstellen des Containers
-
Öffnen Sie im JupyterLab Home-Verzeichnis ein Jupyter-Notizbuch. Um ein neues Notebook zu öffnen, wählen Sie das Symbol New Launch und wählen Sie dann im Abschnitt Notebook die neueste Version von conda_tensorflow2 aus.
-
Führen Sie den folgenden Befehl in der ersten Notebook-Zelle aus, um in das Verzeichnis
docker_test_folder
zu wechseln:cd ~/SageMaker/docker_test_folder
Dies gibt Ihr aktuelles Verzeichnis wie folgt zurück:
! pwd
output: /home/ec2-user/SageMaker/docker_test_folder
-
Zum Erstellen des Docker-Containers führen Sie den folgenden Docker-Build-Befehl, einschließlich der Leertaste gefolgt vom Punkt am Ende, aus.
! docker build -t tf-custom-container-test .
Der Docker-Build-Befehl muss von der von Ihnen erstellten Docker-Registry aus ausgeführt werden. In diesem Fall ist dies
docker_test_folder
.Anmerkung
Wenn Sie die folgende Fehlermeldung erhalten, dass Docker das Dockerfile nicht finden kann, stellen Sie sicher, dass das Dockerfile den richtigen Namen hat und im Verzeichnis gespeichert wurde.
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ec2-user/SageMaker/docker/Dockerfile: no such file or directory
Denken Sie daran, dass
docker
im aktuellen Verzeichnis spezifisch nach einer Datei namensDockerfile
ohne Erweiterung sucht. Wenn Sie sie anders benannt haben, können Sie den Dateinamen manuell mit dem-f
-Argument übergeben. Wenn Sie Ihre Docker-Datei beispielsweise als benanntDockerfile-text.txt
haben, führen Sie den folgenden Befehl aus:! docker build -t tf-custom-container-test -f Dockerfile-text.txt .
Schritt 4: Testen des Containers
-
Um den Container lokal für die Notebook-Instance zu testen, öffnen Sie ein Jupyter Notebook. Wählen Sie New Launcher und wählen Sie im Bereich Notebook die neueste Version von conda_tensorflow2 aus.
-
Fügen Sie das folgende Beispielskript in die Notebook-Codezelle ein, um einen SageMaker AI Estimator zu konfigurieren.
import sagemaker from sagemaker.estimator import Estimator estimator = Estimator(image_uri='
tf-custom-container-test
', role=sagemaker.get_execution_role()
, instance_count=1
, instance_type='local'
) estimator.fit()Im vorherigen Codebeispiel
sagemaker.get_execution_role()
wird für dasrole
Argument angegeben, automatisch die für die SageMaker AI-Sitzung eingerichtete Rolle abzurufen. Sie können ihn auch durch den String-Wert der ARN-Nummer der IAM-Rolle ersetzen, die Sie bei der Konfiguration der Notebook-Instance verwendet haben. Der ARN sollte wie folgt aussehen:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
. -
Führen Sie die Code-Zelle aus. Dieser Test gibt die Konfiguration der Trainingsumgebung, die Werte für die Umgebungsvariablen, die Quelle der Daten sowie den Verlust und die Genauigkeit aus, die bei dem Training erreicht wurden.
Schritt 5: Senden des Containers an die Amazon Elastic Container Registry (Amazon ECR)
-
Nachdem Sie diesen lokalen Modus-Test erfolgreich ausgeführt haben, können Sie den Docker-Container zu Amazon ECR senden und ihn zum Ausführen von Trainingsaufträgen verwenden. Wenn Sie anstelle von Amazon ECR eine private Docker-Registry verwenden möchten, finden Sie weitere Informationen unter Senden Sie Ihren Training-Container zu einem privaten Verzeichnis.
Führen Sie die folgenden Befehlszeilen in einer Notebook-Zelle aus.
%%sh # Specify an algorithm name algorithm_name=
tf-custom-container-test
account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${fullname} # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}Anmerkung
Dieses Bash-Shell-Skript kann ein Berechtigungsproblem auslösen, das der folgenden Fehlermeldung ähnelt:
"denied: User: [ARN] is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:us-east-1:[id]:repository/tf-custom-container-test"
Wenn dieser Fehler auftritt, müssen Sie die EC2ContainerRegistryFullAccessAmazon-Richtlinie an Ihre IAM-Rolle anhängen. Gehen Sie zur IAM-Konsole
, wählen Sie im linken Navigationsbereich Rollen aus und suchen Sie nach der Instance, die IAMrole Sie für die Notebook-Instance verwendet haben. Wählen Sie auf der Registerkarte „Genehmigung“ die Schaltfläche „Richtlinien anhängen“ und suchen Sie nach der EC2ContainerRegistryFullAccessAmazon-Richtlinie. Aktivieren Sie das Kontrollkästchen für die Richtlinie und wählen Sie zum Abschluss Berechtigungen hinzufügen aus. -
Führen Sie den folgenden Code in einer Studio-Notebook-Zelle aus, um das Amazon-ECR-Image Ihres Trainingscontainers aufzurufen.
import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/sagemaker-byoc-test:latest
-
Verwenden Sie das aus dem vorherigen Schritt
ecr_image
abgerufene Objekt, um ein SageMaker AI-Estimator-Objekt zu konfigurieren. Das folgende Codebeispiel konfiguriert einen SageMaker KI-Schätzer mit dembyoc_image_uri
und initiiert einen Trainingsjob auf einer Amazon-Instance. EC2 -
Wenn Sie Ihr Modell mithilfe Ihres eigenen Containers bereitstellen möchten, finden Sie weitere Informationen unter Anpassung Ihres eigenen Inferenz-Containers. Sie können auch einen AWS Framework-Container verwenden, der ein Modell bereitstellen kann. TensorFlow Um das Beispielmodell zum Lesen handgeschriebener Ziffern bereitzustellen, geben Sie das folgende Beispielskript in dasselbe Notizbuch ein, mit dem Sie Ihr Modell im vorherigen Teilschritt trainiert haben, um das für die Bereitstellung benötigte Image URIs (Universal Resource Identifiers) zu erhalten, und stellen Sie das Modell bereit.
import boto3 import sagemaker #obtain image uris from sagemaker import image_uris container = image_uris.retrieve(framework='tensorflow',region='us-west-2',version='2.11.0', image_scope='inference',instance_type='ml.g4dn.xlarge') #create the model entity, endpoint configuration and endpoint predictor = estimator.deploy(1,instance_type='ml.g4dn.xlarge',image_uri=container)
Testen Sie Ihr Modell anhand einer handgeschriebenen Beispielziffer aus dem MNIST-Datensatz anhand des folgenden Codebeispiels.
#Retrieve an example test dataset to test import numpy as np import matplotlib.pyplot as plt from keras.datasets import mnist # Load the MNIST dataset and split it into training and testing sets (x_train, y_train), (x_test, y_test) = mnist.load_data() # Select a random example from the training set example_index = np.random.randint(0, x_train.shape[0]) example_image = x_train[example_index] example_label = y_train[example_index] # Print the label and show the image print(f"Label: {example_label}") plt.imshow(example_image, cmap='gray') plt.show()
Wandeln Sie die handgeschriebene Testziffer in ein Formular um, das Daten aufnehmen und eine Testprognose erstellen TensorFlow kann.
from sagemaker.serializers import JSONSerializer data = {"instances": example_image.tolist()} predictor.serializer=JSONSerializer() #update the predictor to use the JSONSerializer predictor.predict(data) #make the prediction
Ein vollständiges Beispiel, das zeigt, wie Sie einen benutzerdefinierten Container lokal testen und auf ein Amazon ECR-Image übertragen können, finden Sie im Beispielnotizbuch Building Your TensorFlow Own Container
Tipp
Verwenden Sie Amazon Debugger, um Trainingsjobs zu profilieren und zu debuggen, um Probleme mit der Systemauslastung (wie CPU-Engpässe und GPU-Unterauslastung) zu überwachen und Trainingsprobleme zu identifizieren (wie Überanpassung, Übertraining, explodierende Tensoren und verschwindende Gradienten). SageMaker Weitere Informationen finden Sie unter Verwenden Sie Debugger mit benutzerdefinierten Trainingscontainern.
Schritt 6: Bereinigen von Ressourcen
So bereinigen Sie Ressourcen im Anschluss an das Einstiegsbeispiel
-
Öffnen Sie die SageMaker AI-Konsole, wählen Sie die Notebook-Instance
aus, wählen Sie Aktionen und dann Stopp. RunScriptNotebookInstance Das Anhalten der Instance kann einige Minuten dauern. -
Nachdem sich der Instance-Status auf Gestoppt geändert hat, wählen Sie Aktionen, dann Löschen und anschließend im Dialogfeld Löschen aus. Das Löschen der Instance kann einige Minuten dauern. Die Notebook-Instance verschwindet aus der Tabelle, wenn sie gelöscht wurde.
-
Öffnen Sie die Amazon S3-Konsole
und löschen Sie den Bucket, den Sie zum Speichern von Modellartefakten und dem Trainingsdatensatz erstellt haben. -
Öffnen Sie die IAM-Konsole
und löschen Sie die IAM-Rolle. Wenn Sie Berechtigungsrichtlinien erstellt haben, können Sie diese ebenfalls löschen. Anmerkung
Der Docker-Container wird nach seiner Ausführung automatisch beendet. Sie müssen ihn nicht löschen.
Blogs und Fallstudien
In den folgenden Blogs werden Fallstudien zur Verwendung von benutzerdefinierten Trainingscontainern in Amazon SageMaker AI behandelt.
-
Warum sollten Sie Ihren eigenen Container zu Amazon SageMaker AI bringen und wie Sie es richtig machen
, Medium (20. Januar 2023)