Führen Sie PyTorch-Trainingsjobs mit dem SageMaker Training Compiler aus
Sie können jede der SageMaker-AI-Schnittstellen verwenden, um einen Trainingsjob mit dem SageMaker Training Compiler auszuführen: Amazon SageMaker Studio Classic, Notebook-Instances für Amazon SageMaker, AWS SDK für Python (Boto3) und AWS Command Line Interface.
Verwenden des SageMaker Python SDK
Der SageMaker Training Compiler für PyTorch ist über die Framework-Schätzerklassen PyTorch und HuggingFace von SageMaker AI verfügbar. Um den SageMaker Training Compiler zu aktivieren, fügen Sie den compiler_config-Parameter zu den SageMaker-AI-Schätzern hinzu. Importieren Sie die TrainingCompilerConfig-Klasse und übergeben Sie eine Instance davon an den compiler_config-Parameter. Die folgenden Codebeispiele zeigen die Struktur der SageMaker-AI-Schätzerklassen bei aktiviertem SageMaker Training Compiler.
Um mit den von PyTorch oder Transformers bereitgestellten vorgefertigten Modellen zu beginnen, sollten Sie die in der Referenztabelle bei Getestete Modelle angegebenen Losgrößen verwenden.
Die native PyTorch-Unterstützung ist im SageMaker Python SDK v2.121.0 und höher verfügbar. Stellen Sie sicher, dass Sie das SageMaker Python SDK entsprechend aktualisieren.
Ab PyTorch v1.12.0 sind SageMaker Training Compiler-Container für PyTorch verfügbar. Beachten Sie, dass die SageMaker Training Compiler-Container für PyTorch nicht mit Hugging Face Transformers vorkonfiguriert sind. Wenn Sie die Bibliothek im Container installieren müssen, stellen Sie sicher, dass Sie die requirements.txt Datei im Quellverzeichnis hinzufügen, wenn Sie einen Trainingsjob einreichen.
Verwenden Sie für PyTorch v1.11.0 und früher die vorherigen Versionen der SageMaker Training Compiler-Container für Hugging Face und PyTorch.
Eine vollständige Liste der Framework-Versionen und der entsprechenden Container-Informationen finden Sie unter Unterstützte Frameworks.
Weitere Informationen, die zu Ihrem Anwendungsfall passen, finden Sie unter einer der folgenden Optionen.
- PyTorch v1.12.0 and later
-
Um ein PyTorch-Modell zu kompilieren und zu trainieren, konfigurieren Sie einen PyTorch-Schätzer von SageMaker AI mit dem SageMaker Training Compiler, wie im folgenden Codebeispiel gezeigt.
Diese native PyTorch-Unterstützung ist im SageMaker AI Python SDK v2.120.0 und höher verfügbar. Stellen Sie sicher, dass Sie das SageMaker AI Python SDK aktualisieren.
from sagemaker.pytorch import PyTorch, TrainingCompilerConfig
# the original max batch size that can fit into GPU memory without compiler
batch_size_native=12
learning_rate_native=float('5e-5')
# an updated max batch size that can fit into GPU memory with compiler
batch_size=64
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size
hyperparameters={
"n_gpus": 1,
"batch_size": batch_size,
"learning_rate": learning_rate
}
pytorch_estimator=PyTorch(
entry_point='train.py',
source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages.
instance_count=1,
instance_type='ml.p3.2xlarge',
framework_version='1.13.1',
py_version='py3',
hyperparameters=hyperparameters,
compiler_config=TrainingCompilerConfig(),
disable_profiler=True,
debugger_hook_config=False
)
pytorch_estimator.fit()
- Hugging Face Transformers with PyTorch v1.11.0 and before
-
Um ein Transformer-Modell mit PyTorch zu kompilieren und zu trainieren, konfigurieren Sie einen Hugging-Face-Schätzer von SageMaker AI mit dem SageMaker Training Compiler, wie im folgenden Codebeispiel gezeigt.
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig
# the original max batch size that can fit into GPU memory without compiler
batch_size_native=12
learning_rate_native=float('5e-5')
# an updated max batch size that can fit into GPU memory with compiler
batch_size=64
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size
hyperparameters={
"n_gpus": 1,
"batch_size": batch_size,
"learning_rate": learning_rate
}
pytorch_huggingface_estimator=HuggingFace(
entry_point='train.py',
instance_count=1,
instance_type='ml.p3.2xlarge',
transformers_version='4.21.1',
pytorch_version='1.11.0',
hyperparameters=hyperparameters,
compiler_config=TrainingCompilerConfig(),
disable_profiler=True,
debugger_hook_config=False
)
pytorch_huggingface_estimator.fit()
Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.
End-to-End-Beispiele finden Sie in den folgenden Notebooks:
- PyTorch v1.12
-
Für PyTorch v1.12 können Sie verteiltes Training mit dem SageMaker Training Compiler ausführen, indem Sie die angegebene pytorch_xla-Option dem distribution-Parameter der PyTorch-Schätzerklasse von SageMaker AI hinzufügen.
Diese native PyTorch-Unterstützung ist im SageMaker AI Python SDK v2.121.0 und höher verfügbar. Stellen Sie sicher, dass Sie das SageMaker AI Python SDK aktualisieren.
from sagemaker.pytorch import PyTorch, TrainingCompilerConfig
# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4
# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')
# an updated max batch size that can fit to GPU memory with compiler
batch_size=26
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count
hyperparameters={
"n_gpus": num_gpus,
"batch_size": batch_size,
"learning_rate": learning_rate
}
pytorch_estimator=PyTorch(
entry_point='your_training_script.py',
source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages.
instance_count=instance_count,
instance_type=instance_type,
framework_version='1.13.1',
py_version='py3',
hyperparameters=hyperparameters,
compiler_config=TrainingCompilerConfig(),
distribution ={'pytorchxla' : { 'enabled': True }},
disable_profiler=True,
debugger_hook_config=False
)
pytorch_estimator.fit()
Informationen zur Vorbereitung Ihres Trainingsskripts finden Sie unter PyTorch
- Transformers v4.21 with PyTorch v1.11
-
Für PyTorch v1.11 und höher ist der SageMaker Training Compiler für verteiltes Training mit der im Parameter distribution angegebenen pytorch_xla Option verfügbar.
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig
# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4
# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')
# an updated max batch size that can fit to GPU memory with compiler
batch_size=26
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count
hyperparameters={
"n_gpus": num_gpus,
"batch_size": batch_size,
"learning_rate": learning_rate
}
pytorch_huggingface_estimator=HuggingFace(
entry_point='your_training_script.py',
instance_count=instance_count,
instance_type=instance_type,
transformers_version='4.21.1',
pytorch_version='1.11.0',
hyperparameters=hyperparameters,
compiler_config=TrainingCompilerConfig(),
distribution ={'pytorchxla' : { 'enabled': True }},
disable_profiler=True,
debugger_hook_config=False
)
pytorch_huggingface_estimator.fit()
Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.
- Transformers v4.17 with PyTorch v1.10.2 and before
-
Für die unterstützte Version von PyTorch v1.10.2 und früher benötigt der SageMaker Training Compiler einen alternativen Mechanismus zum Starten eines verteilten Trainingsjobs. Um verteiltes Training durchzuführen, verlangt der SageMaker Training Compiler, dass Sie ein SageMaker-AI-Startskript für verteilte Trainings an das entry_point-Argument übergeben und Ihr Trainingsskript an das hyperparameters-Argument übergeben. Das folgende Code-Beispiel veranschaulicht, wie Sie einen Hugging-Face-Schätzer von SageMaker AI konfigurieren, indem Sie die erforderlichen Änderungen anfügen.
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig
# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4
# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')
# an updated max batch size that can fit to GPU memory with compiler
batch_size=26
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count
training_script="your_training_script.py"
hyperparameters={
"n_gpus": num_gpus,
"batch_size": batch_size,
"learning_rate": learning_rate,
"training_script": training_script # Specify the file name of your training script.
}
pytorch_huggingface_estimator=HuggingFace(
entry_point='distributed_training_launcher.py', # Specify the distributed training launcher script.
instance_count=instance_count,
instance_type=instance_type,
transformers_version='4.17.0',
pytorch_version='1.10.2',
hyperparameters=hyperparameters,
compiler_config=TrainingCompilerConfig(),
disable_profiler=True,
debugger_hook_config=False
)
pytorch_huggingface_estimator.fit()
Das Startskript sollte wie folgt aussehen. Es umschließt Ihr Trainingsskript und konfiguriert die verteilte Trainingsumgebung in Abhängigkeit von der Größe der Trainings-Instance Ihrer Wahl.
# distributed_training_launcher.py
#!/bin/python
import subprocess
import sys
if __name__ == "__main__":
arguments_command = " ".join([arg for arg in sys.argv[1:]])
"""
The following line takes care of setting up an inter-node communication
as well as managing intra-node workers for each GPU.
"""
subprocess.check_call("python -m torch_xla.distributed.sm_dist " + arguments_command, shell=True)
Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.
End-to-End-Beispiele finden Sie in den folgenden Notebooks:
Die folgende Liste enthält die minimalen Parameter, die für die Ausführung eines SageMaker-Trainingsjobs mit dem Compiler erforderlich sind.
Wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden, müssen Sie die Parameter transformers_version, pytorch_version, hyperparameters und compiler_config angeben, um den SageMaker Training Compiler zu aktivieren. Sie können image_uri nicht verwenden, um die unter Unterstützte Frameworks aufgelisteten integrierten Deep-Learning-Container für den Trainingscompiler manuell anzugeben.
-
entry_point (str) – Erforderlich. Geben Sie den Dateinamen Ihres Trainingsskripts an.
Um ein verteiltes Training mit SageMaker Training Compiler und PyTorch v1.10.2 und früher durchzuführen, geben Sie den Dateinamen eines Launcher-Skripts für diesen Parameter an. Das Launcher-Skript sollte so vorbereitet sein, dass es Ihr Trainingsskript umschließt und die verteilte Trainingsumgebung konfiguriert. Weitere Informationen finden Sie in den folgenden Notebook-Beispielen:
-
source_dir (str) – Optional. Fügen Sie dies hinzu, wenn Sie zusätzliche Pakete installieren müssen. Um Pakete zu installieren, müssen Sie eine requirements.txt Datei in diesem Verzeichnis vorbereiten.
-
instance_count (int) – Erforderlich. Geben Sie die Anzahl der Instances an.
-
instance_type (str) – Erforderlich. Geben Sie den Instance-Typ an.
-
transformers_version (str) – Nur erforderlich, wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden. Geben Sie die Hugging Face Transformers-Bibliotheksversion an, die vom SageMaker Training Compiler unterstützt wird. Die verfügbaren Versionen finden Sie unter Unterstützte Frameworks.
-
framework_version oder pytorch_version (str) – Erforderlich. Geben Sie die PyTorch-Version an, die vom SageMaker Training Compiler unterstützt wird. Die verfügbaren Versionen finden Sie unter Unterstützte Frameworks.
Wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden, müssen Sie sowohl transformers_version als auch pytorch_version angeben.
-
hyperparameters (dict) – Optional. Geben Sie Hyperparameter für den Trainingsjob an, z. B. n_gpusbatch_size, und learning_rate. Wenn Sie den SageMaker Training Compiler aktivieren, probieren Sie größere Batchgrößen aus und passen Sie die Lernrate entsprechend an. Fallstudien zur Verwendung des Compilers und zur Anpassung der Batchgrößen zur Verbesserung der Trainingsgeschwindigkeit finden Sie unter Getestete Modelle und Beispiel-Notebooks und Blogs für den SageMaker Training Compiler.
Um ein verteiltes Training mit SageMaker Training Compiler und PyTorch v1.10.2 und früher durchzuführen, müssen Sie einen zusätzlichen Parameter hinzufügen, "training_script", um Ihr Trainingsskript zu spezifizieren, wie im vorherigen Codebeispiel gezeigt.
-
compiler_config(TrainingCompilerConfig-Objekt) – Erforderlich, um den SageMaker Training Compiler zu aktivieren. Fügen Sie diesen Parameter hinzu, um den SageMaker Training Compiler zu aktivieren. Nachfolgend sind die Parameter für die Klasse TrainingCompilerConfig aufgeführt.
-
enabled (bool) – Optional. Geben Sie True oder False an, um den SageMaker Training Compiler zu aktivieren oder zu deaktivieren. Der Standardwert ist True.
-
debug (bool) – Optional. Um detailliertere Trainingsprotokolle von Ihren Compiler-beschleunigten Trainingsaufträgen zu erhalten, ändern Sie es zu True. Die zusätzliche Protokollierung kann jedoch den Aufwand erhöhen und den kompilierten Trainingsjob verlangsamen. Der Standardwert ist False.
-
distribution (dict) – Fakultativ. Um einen verteilten Trainingsjob mit dem SageMaker Training Compiler auszuführen, fügen Sie distribution = { 'pytorchxla' : {
'enabled': True }} hinzu.
Wenn Sie den SageMaker Debugger aktivieren, kann dies die Leistung von SageMaker Training Compiler beeinträchtigen. Wir empfehlen, den Debugger zu deaktivieren, wenn Sie den SageMaker Training Compiler ausführen, um sicherzustellen, dass die Leistung nicht beeinträchtigt wird. Weitere Informationen finden Sie unter Überlegungen. Um die Debugger-Funktionen auszuschalten, fügen Sie dem Schätzer die folgenden beiden Argumente hinzu:
disable_profiler=True,
debugger_hook_config=False
Wenn der Trainingsjob mit dem Compiler erfolgreich gestartet wurde, erhalten Sie während der Job-Initialisierungsphase die folgenden Protokolle:
-
Mit TrainingCompilerConfig(debug=False)
Found configuration for Training Compiler
Configuring SM Training Compiler...
-
Mit TrainingCompilerConfig(debug=True)
Found configuration for Training Compiler
Configuring SM Training Compiler...
Training Compiler set to debug mode
Verwenden der CreateTrainingJob-API-Operation von SageMaker AI
SageMaker Training Compiler-Konfigurationsoptionen müssen über die Felder AlgorithmSpecification und HyperParameters in der Anforderungssyntax für den CreateTrainingJobAPI-Vorgang angegeben werden.
"AlgorithmSpecification": {
"TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>"
},
"HyperParameters": {
"sagemaker_training_compiler_enabled": "true",
"sagemaker_training_compiler_debug_mode": "false",
"sagemaker_pytorch_xla_multi_worker_enabled": "false" // set to "true" for distributed training
}
Eine vollständige Liste der Deep-Learning-Container-Image-URIs, für die der SageMaker Training Compiler implementiert wurde, finden Sie unter Unterstützte Frameworks.