Schritt 2: Starten Sie einen Trainingsjob mit dem SageMaker Python-SDK - Amazon SageMaker

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.

Schritt 2: Starten Sie einen Trainingsjob mit dem SageMaker Python-SDK

Das SageMaker Python-SDK unterstützt das verwaltete Training von Modellen mit ML-Frameworks wie TensorFlow und PyTorch. Um einen Trainingsjob mit einem dieser Frameworks zu starten, definieren Sie einen Schätzer, einen SageMaker TensorFlow Schätzer oder einen SageMaker generischen SageMaker PyTorch Schätzer, um das modifizierte Trainingsskript und die Konfiguration der Modellparallelität zu verwenden.

PyTorch Verwenden Sie die und Estimators SageMaker TensorFlow

Die Klassen TensorFlow und PyTorch Estimator enthalten den distribution Parameter, mit dem Sie Konfigurationsparameter für die Verwendung verteilter Trainings-Frameworks angeben können. Die SageMaker Modellparallelbibliothek verwendet intern MPI für Hybriddaten und Modellparallelität, daher müssen Sie die MPI-Option mit der Bibliothek verwenden.

Die folgende Vorlage eines TensorFlow PyTorch OR-Schätzers zeigt, wie der distribution Parameter für die Verwendung der SageMaker Modellparallelbibliothek mit MPI konfiguriert wird.

Using the SageMaker TensorFlow estimator
import sagemaker from sagemaker.tensorflow import TensorFlow smp_options = { "enabled":True, # Required "parameters": { "partitions": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "horovod": True, # Use this for hybrid model and data parallelism } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = TensorFlow( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='2.6.3', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')
Using the SageMaker PyTorch estimator
import sagemaker from sagemaker.pytorch import PyTorch smp_options = { "enabled":True, "parameters": { # Required "pipeline_parallel_degree": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "ddp": True, } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = PyTorch( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='1.13.1', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

Um die Bibliothek zu aktivieren, müssen Sie über das distribution Argument der Estimator-Konstruktoren Konfigurationswörterbücher an die "mpi" Schlüssel "smdistributed" und übergeben. SageMaker

Konfigurationsparameter für Modellparallelität SageMaker
  • Übergeben Sie für den "smdistributed" Schlüssel ein Wörterbuch mit dem "modelparallel" Schlüssel und den folgenden inneren Wörterbüchern.

    Anmerkung

    Die Verwendung von "modelparallel" und "dataparallel" in einem Trainingsjob wird nicht unterstützt.

    • "enabled" – Erforderlich. Um die Modellparallelität zu aktivieren, legen Sie "enabled": True fest.

    • "parameters" – Erforderlich. Geben Sie eine Reihe von Parametern für die SageMaker Modellparallelität an.

  • Übergeben Sie für den "mpi" Schlüssel ein Wörterbuch, das Folgendes enthält:

    • "enabled" – Erforderlich. True ist so eingestellt, dass der verteilte Trainingsjob mit MPI gestartet wird.

    • "processes_per_host" – Erforderlich. Geben Sie die Anzahl der Prozesse an, die MPI auf jedem Host starten soll. SageMakerIn ist ein Host eine einzelne Amazon EC2 ML-Instance. Das SageMaker Python-SDK verwaltet eine one-to-one Zuordnung zwischen Prozessen und GPUs über Modell- und Datenparallelität hinweg. Das bedeutet, dass jeder SageMaker Prozess auf einer einzelnen, separaten GPU geplant wird und keine GPU mehr als einen Prozess enthält. Wenn Sie verwenden PyTorch, müssen Sie jeden Prozess über auf sein eigenes Gerät beschränkentorch.cuda.set_device(smp.local_rank()). Weitere Informationen hierzu finden Sie unter Automatisiertes Teilen mit PyTorch.

      Wichtig

      process_per_hostdarf nicht größer als die Anzahl der GPUs pro Instance sein und entspricht in der Regel der Anzahl der GPUs pro Instance.

    • "custom_mpi_options" (optional) – Verwenden Sie diesen Schlüssel, um alle benutzerdefinierten MPI-Optionen zu übergeben, die Sie möglicherweise benötigen. Wenn Sie dem Schlüssel keine benutzerdefinierten MPI-Optionen übergeben, ist die MPI-Option standardmäßig auf das folgende Flag gesetzt.

      --mca btl_vader_single_copy_mechanism none
      Anmerkung

      Sie müssen dieses Standardflag nicht explizit für den Schlüssel angeben. Wenn Sie es explizit angeben, schlägt Ihr paralleles Trainingsjob für verteilte Modelle möglicherweise mit dem folgenden Fehler fehl:

      The following MCA parameter has been listed multiple times on the command line: MCA param: btl_vader_single_copy_mechanism MCA parameters can only be listed once on a command line to ensure there is no ambiguity as to its value. Please correct the situation and try again.
      Tipp

      Wenn Sie einen Trainingsjob mit einem EFA-fähigen Instance-Typ wie ml.p4d.24xlarge und ml.p3dn.24xlarge starten, verwenden Sie für optimale Leistung das folgende Kennzeichen:

      -x FI_EFA_USE_DEVICE_RDMA=1 -x FI_PROVIDER=efa -x RDMAV_FORK_SAFE=1

Um den Trainingsjob mit dem Schätzer und Ihrem SageMaker Modell parallel konfigurierten Trainingsskript zu starten, führen Sie die estimator.fit() Funktion aus.

Verwenden Sie die folgenden Ressourcen, um mehr über die Verwendung der Modellparallelitätsfunktionen im SageMaker Python-SDK zu erfahren:

Erweitern Sie einen vorgefertigten Docker-Container, der die SageMaker Distributed Model Parallel Library enthält

Um einen vorgefertigten Container zu erweitern und die Modellparallelitätsbibliothek zu verwenden SageMaker, müssen Sie eines der verfügbaren AWS Deep Learning Containers (DLC) -Images für oder verwenden. PyTorch TensorFlow Die SageMaker Modellparallelitätsbibliothek ist in den DLC-Images TensorFlow (2.3.0 und höher) und (1.6.0 und höher) mit CUDA PyTorch () enthalten. cuxyz Eine vollständige Liste der DLC-Images finden Sie unter Verfügbare Deep Learning Containers Learning-Container-Images im AWS Deep Learning Containers GitHub Container-Repository.

Tipp

Wir empfehlen, das Image zu verwenden, das die neueste Version der Modellparallelismus-Bibliothek enthält PyTorch , TensorFlow oder um auf die meisten up-to-date Versionen der SageMaker Modellparallelismus-Bibliothek zuzugreifen.

Ihr Dockerfile sollte beispielsweise eine FROM Anweisung wie die folgende enthalten:

# Use the SageMaker DLC image URI for TensorFlow or PyTorch FROM aws-dlc-account-id.dkr.ecr.aws-region.amazonaws.com/framework-training:{framework-version-tag} # Add your dependencies here RUN ... ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

Wenn Sie einen PyTorch TensorFlow Oder-Schätzer definieren, müssen Sie außerdem angeben, dass der entry_point für Ihr Trainingsskript gilt. Dies sollte derselbe Pfad sein, der in Ihrem Dockerfile mit ENV SAGEMAKER_SUBMIT_DIRECTORY angegeben ist.

Tipp

Sie müssen diesen Docker-Container an Amazon Elastic Container Registry (Amazon ECR) übertragen und mithilfe der Image-URI (image_uri) einen SageMaker Schätzer für das Training definieren. Weitere Informationen finden Sie unter Erweitern eines vorgefertigter Containers.

Nachdem Sie das Hosten des Docker-Containers und das Abrufen der Image-URI des Containers abgeschlossen haben, erstellen Sie wie folgt ein SageMaker PyTorch Estimator-Objekt. In diesem Beispiel wird davon ausgegangen, dass Sie bereits smp_options und mpi_options definiert haben.

smd_mp_estimator = Estimator( entry_point="your_training_script.py", role=sagemaker.get_execution_role(), instance_type='ml.p3.16xlarge', sagemaker_session=sagemaker_session, image_uri='your_aws_account_id.dkr.ecr.region.amazonaws.com/name:tag' instance_count=1, distribution={ "smdistributed": smp_options, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

Erstellen Sie Ihren eigenen Docker-Container mit der SageMaker Distributed Model Parallel Library

Um Ihren eigenen Docker-Container für das Training zu erstellen und die SageMaker Model Parallel Library zu verwenden, müssen Sie die richtigen Abhängigkeiten und die Binärdateien der SageMaker verteilten parallel Bibliotheken in Ihr Dockerfile aufnehmen. Dieser Abschnitt enthält die Mindestmenge an Codeblöcken, die Sie hinzufügen müssen, um eine SageMaker Trainingsumgebung und die Modellparallelbibliothek in Ihrem eigenen Docker-Container ordnungsgemäß vorzubereiten.

Anmerkung

Diese benutzerdefinierte Docker-Option mit der SageMaker Modellparallelbibliothek als Binärdatei ist nur für PyTorch verfügbar.

Um ein Dockerfile mit dem SageMaker Training Toolkit und der Model Parallel Library zu erstellen
  1. Beginnen Sie mit einem der NVIDIA CUDA-Basisimages.

    FROM <cuda-cudnn-base-image>
    Tipp

    Die offiziellen AWS Deep Learning Container (DLC) -Images werden aus den NVIDIA CUDA-Basisimages erstellt. Wir empfehlen Ihnen, in den offiziellen Dockerfiles von AWS Deep Learning Container nachzuschauen PyTorch, welche Versionen der Bibliotheken Sie installieren müssen und wie sie konfiguriert werden. Die offiziellen Dockerfiles sind vollständig, wurden auf Benchmarks getestet und werden von den Serviceteams SageMaker und Deep Learning Container verwaltet. Wählen Sie unter dem bereitgestellten Link die PyTorch Version aus, die Sie verwenden, wählen Sie den Ordner CUDA (cuxyz) und wählen Sie die Dockerfile, die mit oder endet. .gpu .sagemaker.gpu

  2. Um eine verteilte Trainingsumgebung einzurichten, müssen Sie Software für Kommunikations- und Netzwerkgeräte wie Elastic Fabric Adapter (EFA), NVIDIA Collective Communications Library (NCCL) und Open MPI installieren. Abhängig von der ausgewählten Version PyTorch und der CUDA-Version müssen Sie kompatible Versionen der Bibliotheken installieren.

    Wichtig

    Da die SageMaker Modellparallelbibliothek die SageMaker Datenparallelbibliothek in den nachfolgenden Schritten benötigt, empfehlen wir dringend, dass Sie die Anweisungen unter befolgen, Erstellen Sie Ihren eigenen Docker-Container mit der SageMaker verteilten Datenparallelbibliothek um eine SageMaker Trainingsumgebung für verteiltes Training ordnungsgemäß einzurichten.

    Weitere Informationen zur Einrichtung von EFA mit NCCL und Open MPI finden Sie unter Erste Schritte mit EFA und MPI und Erste Schritte mit EFA und NCCL.

  3. Fügen Sie die folgenden Argumente hinzu, um die URLs der SageMaker verteilten Trainingspakete für anzugeben PyTorch. Für die SageMaker Modellparallelbibliothek muss die SageMaker Datenparallelbibliothek den knotenübergreifenden Remote Direct Memory Access (RDMA) verwenden.

    ARG SMD_MODEL_PARALLEL_URL=https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/pytorch-1.10.0/build-artifacts/2022-02-21-19-26/smdistributed_modelparallel-1.7.0-cp38-cp38-linux_x86_64.whl ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.10.2/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
  4. Installieren Sie Abhängigkeiten, die für die SageMaker Model Parallel Library erforderlich sind.

    1. Installieren Sie die METIS-Bibliothek.

      ARG METIS=metis-5.1.0 RUN rm /etc/apt/sources.list.d/* \ && wget -nv http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/${METIS}.tar.gz \ && gunzip -f ${METIS}.tar.gz \ && tar -xvf ${METIS}.tar \ && cd ${METIS} \ && apt-get update \ && make config shared=1 \ && make install \ && cd .. \ && rm -rf ${METIS}.tar* \ && rm -rf ${METIS} \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
    2. Installieren Sie die RAPIDS Memory Manager-Bibliothek. Dies erfordert CMake 3.14 oder höher.

      ARG RMM_VERSION=0.15.0 RUN wget -nv https://github.com/rapidsai/rmm/archive/v${RMM_VERSION}.tar.gz \ && tar -xvf v${RMM_VERSION}.tar.gz \ && cd rmm-${RMM_VERSION} \ && INSTALL_PREFIX=/usr/local ./build.sh librmm \ && cd .. \ && rm -rf v${RMM_VERSION}.tar* \ && rm -rf rmm-${RMM_VERSION}
  5. Installieren Sie die SageMaker Modellparallelbibliothek.

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. Installieren Sie die SageMaker Data Parallel Library.

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. Installieren Sie das Sagemaker-Training-Toolkit. Das Toolkit enthält die allgemeinen Funktionen, die zur Erstellung eines Containers erforderlich sind, der mit der SageMaker Trainingsplattform und dem SageMaker Python-SDK kompatibel ist.

    RUN pip install sagemaker-training
  8. Wenn Sie mit der Erstellung des Dockerfiles fertig sind, erfahren Sie unter Anpassen Ihres eigenen Trainingscontainers, wie Sie den Docker-Container erstellen und in Amazon ECR hosten.

Tipp

Allgemeinere Informationen zum Erstellen eines benutzerdefinierten Dockerfiles für das Training finden Sie unter Verwenden Sie Ihre eigenen Trainingsalgorhythmen. SageMaker