Verwenden Sie die SageMaker Modellparallelitätsbibliothek v2 - 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.

Verwenden Sie die SageMaker Modellparallelitätsbibliothek v2

Auf dieser Seite erfahren Sie, wie Sie die SageMaker Modellparallelismus-Bibliothek v2 verwenden APIs und mit der Ausführung eines PyTorch Fully Sharded Data Parallel (FSDP) -Trainingsjobs auf der SageMaker Trainingsplattform oder in einem Cluster beginnen. SageMaker HyperPod

Es gibt verschiedene Szenarien für die Ausführung eines PyTorch Trainingsjobs mit Version 2. SMP

  1. Verwenden Sie für SageMaker Schulungen einen der vorgefertigten SageMaker Framework-Container für Version PyTorch 2.0.1 und höher, die im Lieferumfang von Version 2 enthalten sind. SMP

  2. Verwenden Sie die SMP v2-Binärdatei, um eine Conda-Umgebung für die Ausführung eines verteilten Trainingsworkloads auf einem Cluster einzurichten. SageMaker HyperPod

  3. Erweitern Sie die vorgefertigten SageMaker Framework-Container für Version PyTorch 2.0.1 und höher, um zusätzliche funktionale Anforderungen für Ihren Anwendungsfall zu installieren. Informationen zum Erweitern eines vorgefertigten Containers finden Sie unter. Erweitern eines vorgefertigter Containers

  4. Sie können auch Ihren eigenen Docker-Container mitbringen und die gesamte SageMaker Trainingsumgebung mithilfe des Training-Toolkits manuell einrichten und die SageMaker SMP v2-Binärdatei installieren. Diese Option wird aufgrund der Komplexität der Abhängigkeiten am wenigsten empfohlen. Informationen zum Ausführen Ihres eigenen Docker-Containers finden Sie unter Anpassung Ihres eigenen Trainingscontainers.

Dieser Leitfaden für die ersten Schritte behandelt die ersten beiden Szenarien.

Schritt 1: Passen Sie Ihr PyTorch FSDP Trainingsskript an

Um die SMP v2-Bibliothek zu aktivieren und zu konfigurieren, importieren und fügen Sie zunächst das torch.sagemaker.init() Modul oben im Skript hinzu. Dieses Modul enthält das SMP KonfigurationswörterbuchSMPKonfigurationsparameter der v2-Kernfunktion, in dem Sie sich vorbereiten werdenSchritt 2: Starten Sie einen Schulungsjob. Um die verschiedenen Kernfunktionen von SMP Version 2 nutzen zu können, müssen Sie möglicherweise weitere Änderungen vornehmen, um Ihr Trainingsskript anzupassen. Ausführlichere Anweisungen zur Anpassung Ihres Trainingsskripts an die Nutzung der SMP v2-Kernfunktionen finden Sie unterKernfunktionen der SageMaker Modellparallelitätsbibliothek v2.

SageMaker Training

Fügen Sie Ihrem Trainingsskript die folgenden zwei Codezeilen hinzu. Dies ist die Mindestanforderung, um mit dem Training mit SMP Version 2 zu beginnen. In Schritt 2: Starten Sie einen Schulungsjob richten Sie mithilfe des distribution Arguments der SageMaker PyTorch Schätzerklasse ein Objekt der Schätzerklasse mit einem SMP Konfigurationswörterbuch ein.

import torch.sagemaker as tsm tsm.init()
Anmerkung

Sie können dem Modul auch direkt ein Konfigurationswörterbuch von übergeben. SMPKonfigurationsparameter der v2-Kernfunktion torch.sagemaker.init() Die an den PyTorch Schätzer übergebenen Parameter haben jedoch Priorität Schritt 2: Starten Sie einen Schulungsjob und überschreiben die für das torch.sagemaker.init() Modul angegebenen Parameter.

SageMaker HyperPod

Fügen Sie Ihrem Trainingsskript die folgenden zwei Codezeilen hinzu. In Schritt 2: Starten Sie einen Schulungsjob richten Sie eine smp_config.json Datei zum Einrichten von SMP Konfigurationen im JSON Format ein und laden sie in einen Speicher oder ein Dateisystem hoch, das Ihrem SageMaker HyperPod Cluster zugeordnet ist. Wir empfehlen, dass Sie die Konfigurationsdatei in demselben Verzeichnis speichern, in das Sie Ihr Trainingsskript hochladen.

import torch.sagemaker as tsm tsm.init("/dir_to_training_files/smp_config.json")
Anmerkung

Sie können auch direkt ein Konfigurationswörterbuch von an SMPKonfigurationsparameter der v2-Kernfunktion das torch.sagemaker.init() Modul übergeben.

Schritt 2: Starten Sie einen Schulungsjob

Erfahren Sie, wie Sie SMP Verteilungsoptionen für den Start eines PyTorch FSDP Trainingsjobs mit SMP Kernfunktionen konfigurieren.

SageMaker Training

Wenn Sie ein Trainingsjob-Launcher-Objekt der PyTorch Framework-Estimator-Klasse in SageMaker Python einrichtenSDK, konfigurieren Sie das SMPKonfigurationsparameter der v2-Kernfunktion über das distribution Argument wie folgt.

Anmerkung

Die distribution Konfiguration für SMP v2 ist SDK ab v2.200 in SageMaker Python integriert. Stellen Sie sicher, dass Sie SageMaker Python SDK v2.200 oder höher verwenden.

Anmerkung

In SMP Version 2 sollten Sie smdistributed mit torch_distributed für das distribution Argument des Schätzers SageMaker PyTorch konfigurieren. Withtorch_distributed, SageMaker runstorchrun, der standardmäßige Job-Launcher für mehrere Knoten von PyTorch Distributed.

from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version=2.2.0, py_version="310" # image_uri="<smp-docker-image-uri>" # For using prior versions, specify the SMP image URI directly. entry_point="your-training-script.py", # Pass the training script you adapted with SMP from Step 1. ... # Configure other required and optional parameters distribution={ "torch_distributed": { "enabled": True }, "smdistributed": { "modelparallel": { "enabled": True, "parameters": { "hybrid_shard_degree": Integer, "sm_activation_offloading": Boolean, "activation_loading_horizon": Integer, "fsdp_cache_flush_warnings": Boolean, "allow_empty_shards": Boolean, "tensor_parallel_degree": Integer, "expert_parallel_degree": Integer, "random_seed": Integer } } } } )
Wichtig

Um eine der früheren Versionen von PyTorch oder SMP anstelle der neuesten Version zu verwenden, müssen Sie das SMP Docker-Image direkt mit dem image_uri Argument anstelle des framework_version und-Paars angeben. py_version Das Folgende ist ein Beispiel für

estimator = PyTorch( ..., image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121" )

Informationen zum SMP Docker-Image finden Sie URIs unterUnterstützte Frameworks.

SageMaker HyperPod

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind.

  • Ein FSx freigegebenes Amazon-Verzeichnis, das in Ihren HyperPod Cluster eingebunden ist (/fsx).

  • Conda wurde im FSx gemeinsamen Verzeichnis installiert. Um zu erfahren, wie Sie Conda installieren, folgen Sie den Anweisungen unter Installation unter Linux im Conda-Benutzerhandbuch.

  • cuda11.8oder auf den Haupt- und Rechenknoten Ihres HyperPod Clusters cuda12.1 installiert.

Wenn alle Voraussetzungen erfüllt sind, fahren Sie mit den folgenden Anweisungen zum Starten eines Workloads mit SMP Version 2 auf einem HyperPod Cluster fort.

  1. Bereiten Sie eine smp_config.json Datei vor, die ein Wörterbuch von enthältSMPKonfigurationsparameter der v2-Kernfunktion. Stellen Sie sicher, dass Sie diese JSON Datei in den Ordner hochladen, in dem Sie Ihr Trainingsskript oder den Pfad, den Sie in Schritt 1 für das torch.sagemaker.init() Modul angegeben haben, speichern. Wenn Sie das Konfigurationswörterbuch bereits an das torch.sagemaker.init() Modul im Trainingsskript in Schritt 1 übergeben haben, können Sie diesen Schritt überspringen.

    // smp_config.json { "hybrid_shard_degree": Integer, "sm_activation_offloading": Boolean, "activation_loading_horizon": Integer, "fsdp_cache_flush_warnings": Boolean, "allow_empty_shards": Boolean, "tensor_parallel_degree": Integer, "expert_parallel_degree": Integer, "random_seed": Integer }
  2. Laden Sie die smp_config.json Datei in ein Verzeichnis in Ihrem Dateisystem hoch. Der Verzeichnispfad muss mit dem Pfad übereinstimmen, den Sie in Schritt 1 angegeben haben. Wenn Sie das Konfigurationswörterbuch bereits im Trainingsskript an das torch.sagemaker.init() Modul übergeben haben, können Sie diesen Schritt überspringen.

  3. Starten Sie auf den Rechenknoten Ihres Clusters eine Terminalsitzung mit dem folgenden Befehl.

    sudo su -l ubuntu
  4. Erstellen Sie eine Conda-Umgebung auf den Rechenknoten. Der folgende Code ist ein Beispielskript für die Erstellung einer Conda-Umgebung und die Installation vonSMP, SMDDPCUDA, und anderen Abhängigkeiten.

    # Run on compute nodes SMP_CUDA_VER=<11.8 or 12.1> source /fsx/<path_to_miniconda>/miniconda3/bin/activate export ENV_PATH=/fsx/<path to miniconda>/miniconda3/envs/<ENV_NAME> conda create -p ${ENV_PATH} python=3.10 conda activate ${ENV_PATH} # Verify aws-cli is installed: Expect something like "aws-cli/2.15.0*" aws ‐‐version # Install aws-cli if not already installed # https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#cliv2-linux-install # Install the SMP library conda install pytorch="2.0.1=sm_py3.10_cuda${SMP_CUDA_VER}*" packaging ‐‐override-channels \ -c https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/smp-2.0.0-pt-2.0.1/2023-12-11/smp-v2/ \ -c pytorch -c numba/label/dev \ -c nvidia -c conda-forge # Install dependencies of the script as below python -m pip install packaging transformers==4.31.0 accelerate ninja tensorboard h5py datasets \ && python -m pip install expecttest hypothesis \ && python -m pip install "flash-attn>=2.0.4" ‐‐no-build-isolation # Install the SMDDP wheel SMDDP_WHL="smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl" \ && wget -q https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/${SMDDP_WHL} \ && pip install ‐‐force ${SMDDP_WHL} \ && rm ${SMDDP_WHL} # cuDNN installation for Transformer Engine installation for CUDA 11.8 # Please download from below link, you need to agree to terms # https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.5/local_installers/11.x/cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz tar xf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \ && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \ && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \ && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \ && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \ && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive/ # Please download from below link, you need to agree to terms # https://developer.download.nvidia.com/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ # cuDNN installation for TransformerEngine installation for cuda12.1 tar xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \ && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \ && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \ && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive/ # TransformerEngine installation export CUDA_HOME=/usr/local/cuda-$SMP_CUDA_VER export CUDNN_PATH=/usr/local/cuda-$SMP_CUDA_VER/lib export CUDNN_LIBRARY=/usr/local/cuda-$SMP_CUDA_VER/lib export CUDNN_INCLUDE_DIR=/usr/local/cuda-$SMP_CUDA_VER/include export PATH=/usr/local/cuda-$SMP_CUDA_VER/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-$SMP_CUDA_VER/lib python -m pip install ‐‐no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@v1.0
  5. Führen Sie einen Test-Trainingsjob aus.

    1. Klonen Sie im gemeinsam genutzten Dateisystem (/fsx) das Awsome Distributed GitHub Training-Repository und wechseln Sie zu dem 3.test_cases/11.modelparallel Ordner.

      git clone https://github.com/aws-samples/awsome-distributed-training/ cd awsome-distributed-training/3.test_cases/11.modelparallel
    2. Reichen Sie einen Job sbatch wie folgt ein.

      conda activate <ENV_PATH> sbatch -N 16 conda_launch.sh

      Wenn die Auftragsübermittlung erfolgreich ist, sollte die Ausgabenachricht dieses sbatch Befehls ähnlich wie lautenSubmitted batch job ABCDEF.

    3. Überprüfen Sie die Protokolldatei im aktuellen Verzeichnis unterlogs/.

      tail -f ./logs/fsdp_smp_ABCDEF.out