

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.

# Modelle mit HyperPod CLI und SDK trainieren und bereitstellen
<a name="getting-started-hyperpod-training-deploying-models"></a>

Amazon SageMaker HyperPod hilft Ihnen dabei, Modelle für maschinelles Lernen in großem Maßstab zu trainieren und bereitzustellen. Die AWS HyperPod CLI ist eine einheitliche Befehlszeilenschnittstelle, die Workflows für maschinelles Lernen (ML) vereinfacht. AWS Sie abstrahiert die Komplexität der Infrastruktur und bietet eine optimierte Oberfläche für das Einreichen, Überwachen und Verwalten von ML-Schulungsaufträgen. Die CLI wurde speziell für Datenwissenschaftler und ML-Ingenieure entwickelt, die sich eher auf die Modellentwicklung als auf das Infrastrukturmanagement konzentrieren möchten. In diesem Thema werden drei wichtige Szenarien vorgestellt: das Trainieren eines PyTorch Modells, das Bereitstellen eines benutzerdefinierten Modells mithilfe trainierter Artefakte und das Bereitstellen eines JumpStart Modells. Dieses kurze Tutorial wurde für Erstbenutzer entwickelt und stellt sicher, dass Sie Modelle mühelos mit der HyperPod CLI oder dem SDK einrichten, trainieren und bereitstellen können. Der Handshake-Prozess zwischen Training und Inferenz hilft Ihnen dabei, Modellartefakte effektiv zu verwalten. 

## Voraussetzungen
<a name="prerequisites"></a>

Bevor Sie Amazon nutzen, stellen Sie sicher SageMaker HyperPod, dass Sie über Folgendes verfügen:
+ Ein AWS Konto mit Zugriff auf Amazon SageMaker HyperPod
+ Python 3.9, 3.10 oder 3.11 installiert
+ AWS CLI mit entsprechenden Anmeldeinformationen konfiguriert. 

## Installieren Sie die HyperPod CLI und das SDK
<a name="install-cli-sdk"></a>

Installieren Sie das erforderliche Paket, um auf die CLI und das SDK zuzugreifen:

```
pip install sagemaker-hyperpod
```

Dieser Befehl richtet die Tools ein, die für die Interaktion mit HyperPod Clustern erforderlich sind.

## Konfigurieren Sie Ihren Clusterkontext
<a name="configure-cluster"></a>

HyperPod arbeitet auf Clustern, die für maschinelles Lernen optimiert sind. Führen Sie zunächst die verfügbaren Cluster auf, um einen für Ihre Aufgaben auszuwählen.

1. Listen Sie alle verfügbaren Cluster auf:

   ```
   hyp list-cluster
   ```

1. Wählen Sie Ihren aktiven Cluster aus und legen Sie ihn fest:

   ```
   hyp set-cluster-context your-eks-cluster-name
   ```

1. Überprüfen Sie die Konfiguration:

   ```
   hyp get-cluster-context
   ```

**Anmerkung**  
Alle nachfolgenden Befehle zielen auf den Cluster ab, den Sie als Kontext festgelegt haben.

## Wählen Sie Ihr Szenario
<a name="choose-scenario"></a>

Für detaillierte Anweisungen zu den einzelnen Szenarien klicken Sie auf die folgenden Themen:

**Topics**
+ [Voraussetzungen](#prerequisites)
+ [Installieren Sie die HyperPod CLI und das SDK](#install-cli-sdk)
+ [Konfigurieren Sie Ihren Clusterkontext](#configure-cluster)
+ [Wählen Sie Ihr Szenario](#choose-scenario)
+ [Trainiere ein PyTorch Modell](train-models-with-hyperpod.md)
+ [Bereitstellen eines benutzerdefinierten Modells](deploy-trained-model.md)
+ [Stellen Sie ein JumpStart Modell bereit](deploy-jumpstart-model.md)

# Trainiere ein PyTorch Modell
<a name="train-models-with-hyperpod"></a>

Dieses Thema führt Sie durch den Prozess des Trainings eines PyTorch Modells mithilfe von HyperPod.

In diesem Szenario trainieren wir ein PyTorch Modell anhand der `hyp-pytorch-job` Vorlage, die die Erstellung von Jobs vereinfacht, indem häufig verwendete Parameter verfügbar gemacht werden. Die Modellartefakte werden in einem S3-Bucket gespeichert, um sie später als Inferenz zu verwenden. Dies ist jedoch optional, und Sie können Ihren bevorzugten Speicherort wählen.

## Erstellen eines Trainingsjobs
<a name="create-training-job"></a>

Sie können das Modell entweder mit der CLI oder dem Python-SDK trainieren.

### Verwenden der -CLI
<a name="using-cli"></a>

Erstellen Sie einen Trainingsjob mit dem folgenden Befehl:

```
hyp create hyp-pytorch-job \
    --version 1.0 \
    --job-name test-pytorch-job \
    --image pytorch/pytorch:latest \
    --command '["python", "train.py"]' \
    --args '["--epochs", "10", "--batch-size", "32"]' \
    --environment '{"PYTORCH_CUDA_ALLOC_CONF": "max_split_size_mb:32"}' \
    --pull-policy "IfNotPresent" \
    --instance-type ml.p4d.24xlarge \
    --tasks-per-node 8 \
    --label-selector '{"accelerator": "nvidia", "network": "efa"}' \
    --deep-health-check-passed-nodes-only true \
    --scheduler-type "kueue" \
    --queue-name "training-queue" \
    --priority "high" \
    --max-retry 3 \
    --volumes '["data-vol", "model-vol", "checkpoint-vol"]' \
    --persistent-volume-claims '["shared-data-pvc", "model-registry-pvc"]' \
    --output-s3-uri s3://my-bucket/model-artifacts
```

**Die wichtigsten erforderlichen Parameter werden erklärt**:
+ `--job-name`: Eindeutige Kennung für Ihren Ausbildungsjob
+ `--image`: Docker-Image, das Ihre Trainingsumgebung enthält

Dieser Befehl startet einen Trainingsjob mit dem Namen`test-pytorch-job`. Der `--output-s3-uri` gibt an, wo die trainierten Modellartefakte gespeichert werden, zum Beispiel`s3://my-bucket/model-artifacts`. Notieren Sie sich diesen Speicherort, da Sie ihn für die Bereitstellung des benutzerdefinierten Modells benötigen.

### Verwenden des Python SDK
<a name="using-python-sdk"></a>

Verwenden Sie für die programmgesteuerte Steuerung das SDK. Erstellen Sie ein Python-Skript, um denselben Trainingsjob zu starten.

```
from sagemaker.hyperpod import HyperPodPytorchJob
from sagemaker.hyperpod.job 
import ReplicaSpec, Template, Spec, Container, Resources, RunPolicy, Metadata

# Define job specifications
nproc_per_node = "1"  # Number of processes per node
replica_specs = 
[
    ReplicaSpec
    (
        name = "pod",  # Replica name
        template = Template
        (
            spec = Spec
            (
                containers =
                [
                    Container
                    (
                        # Container name
                        name="container-name",  
                        
                        # Training image
                        image="448049793756.dkr.ecr.us-west-2.amazonaws.com/ptjob:mnist",  
                        
                        # Always pull image
                        image_pull_policy="Always",  
                        resources=Resources\
                        (
                            # No GPUs requested
                            requests={"nvidia.com/gpu": "0"},  
                            # No GPU limit
                            limits={"nvidia.com/gpu": "0"},   
                        ),
                        # Command to run
                        command=["python", "train.py"],  
                        # Script arguments
                        args=["--epochs", "10", "--batch-size", "32"],  
                    )
                ]
            )
        ),
    )
]
# Keep pods after completion
run_policy = RunPolicy(clean_pod_policy="None")  

# Create and start the PyTorch job
pytorch_job = HyperPodPytorchJob
(
    # Job name
    metadata = Metadata(name="demo"),  
    # Processes per node
    nproc_per_node = nproc_per_node,   
    # Replica specifications
    replica_specs = replica_specs,     
    # Run policy
    run_policy = run_policy,           
    # S3 location for artifacts
    output_s3_uri="s3://my-bucket/model-artifacts"  
)
# Launch the job
pytorch_job.create()
```

## Überwachen Sie Ihren Trainingsjob
<a name="monitor-training-job"></a>

Überwachen Sie den Fortschritt Ihres Jobs mit diesen Befehlen:

### Verwenden der -CLI
<a name="monitor-cli"></a>

```
# Check job status
hyp list hyp-pytorch-job

# Get detailed information
hyp describe hyp-pytorch-job --job-name test-pytorch-job

# View logs
hyp get-logs hyp-pytorch-job \
    --pod-name test-pytorch-job-pod-0 \
    --job-name test-pytorch-job
```

**Hinweis**: Die Trainingszeit variiert je nach Modellkomplexität und Instance-Typ. Überwachen Sie die Protokolle, um den Fortschritt zu verfolgen.

Mit diesen Befehlen können Sie den Status des Jobs überprüfen und Probleme beheben. Sobald der Job erfolgreich abgeschlossen wurde, werden die Modellartefakte unter gespeichert`s3://my-bucket/model-artifacts`.

### Verwenden des Python SDK
<a name="monitor-python-sdk"></a>

Fügen Sie den folgenden Code in Ihr Python-Skript ein:

```
print("List all pods created for this job:")
print(pytorch_job.list_pods())

print("Check the logs from pod0:")
print(pytorch_job.get_logs_from_pod(pod_name="demo-pod-0"))

print("List all HyperPodPytorchJobs:")
print(HyperPodPytorchJob.list())

print("Describe job:")
print(HyperPodPytorchJob.get(name="demo").model_dump())

pytorch_job.refresh()
print(pytorch_job.status.model_dump())
```

## Nächste Schritte
<a name="next-steps"></a>

Nach dem Training werden die Modellartefakte in dem von Ihnen angegebenen S3-Bucket gespeichert (`s3://my-bucket/model-artifacts`). Sie können diese Artefakte verwenden, um ein Modell bereitzustellen. Derzeit müssen Sie den Übergang vom Training zur Inferenz manuell verwalten. Dies beinhaltet:
+ **Artefakte lokalisieren**: Überprüfen Sie den S3-Bucket (`s3://my-bucket/model-artifacts`), um sicherzustellen, dass die trainierten Modelldateien vorhanden sind.
+ **Aufzeichnen des Pfads**: Notieren Sie sich den genauen S3-Pfad (z. B. `s3://my-bucket/model-artifacts/test-pytorch-job/model.tar.gz`) für die Verwendung in der Inferenzkonfiguration.
+ **Referenzierung bei der Bereitstellung**: Geben Sie diesen S3-Pfad bei der Konfiguration des benutzerdefinierten Endpunkts an, um sicherzustellen, dass das richtige Modell geladen wird.

# Bereitstellen eines benutzerdefinierten Modells
<a name="deploy-trained-model"></a>

Stellen Sie nach Abschluss des Trainings Ihr Modell für Inferenzzwecke bereit. Sie können ein benutzerdefiniertes Modell entweder mit der CLI oder dem SDK bereitstellen.

## Lokalisieren der Modellartefakte
<a name="locate-model-artifacts"></a>
+ **Überprüfen Sie Ihren S3-Bucket**: Stellen Sie sicher, dass Modellartefakte unter gespeichert sind `s3://my-bucket/model-artifacts/`
+ **Notieren Sie sich den genauen Pfad**: Sie benötigen den vollständigen Pfad (zum Beispiel`s3://my-bucket/model-artifacts/test-pytorch-job/model.tar.gz`)

## Bereitstellen mit der CLI
<a name="deploy-using-cli"></a>

Führen Sie den folgenden Befehl aus, um Ihr benutzerdefiniertes Modell bereitzustellen:

```
hyp create hyp-custom-endpoint \
    --version 1.0 \
    --env '{"HF_MODEL_ID":"/opt/ml/model", "SAGEMAKER_PROGRAM":"inference.py", }' \
    --model-source-type s3 \
    --model-location test-pytorch-job \
    --s3-bucket-name my-bucket \
    --s3-region us-east-2 \
    --prefetch-enabled true \ 
    --image-uri 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:latest \
    --model-volume-mount-name model-weights \
    --container-port 8080 \
    --resources-requests '{"cpu": "30000m", "nvidia.com/gpu": 1, "memory": "100Gi"}' \
    --resources-limits '{"nvidia.com/gpu": 1}' \
    --tls-output-s3-uri s3://<bucket_name> \
    --instance-type ml.g5.8xlarge \
    --endpoint-name endpoint-custom-pytorch \
    --model-name pytorch-custom-model
```

Dieser Befehl stellt das trainierte Modell als Endpunkt mit dem Namen `endpoint-custom-pytorch` bereit. Der `--model-location` verweist auf den Artefaktpfad aus dem Trainingsjob.

## Bereitstellung mit dem Python SDK
<a name="deploy-using-sdk"></a>

Erstellen Sie ein Python-Skript mit dem folgenden Inhalt:

```
from sagemaker.hyperpod.inference.config.hp_custom_endpoint_config import Model, Server, SageMakerEndpoint, TlsConfig, EnvironmentVariables
from sagemaker.hyperpod.inference.hp_custom_endpoint import HPCustomEndpoint

model = Model(
    model_source_type="s3",
    model_location="test-pytorch-job",
    s3_bucket_name="my-bucket",
    s3_region="us-east-2",
    prefetch_enabled=True
)

server = Server(
    instance_type="ml.g5.8xlarge",
    image_uri="763104351884.dkr.ecr.us-east-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.4.0-tgi2.3.1-gpu-py311-cu124-ubuntu22.04-v2.0",
    container_port=8080,
    model_volume_mount_name="model-weights"
)

resources = {
    "requests": {"cpu": "30000m", "nvidia.com/gpu": 1, "memory": "100Gi"},
    "limits": {"nvidia.com/gpu": 1}
}

env = EnvironmentVariables(
    HF_MODEL_ID="/opt/ml/model",
    SAGEMAKER_PROGRAM="inference.py",
    SAGEMAKER_SUBMIT_DIRECTORY="/opt/ml/model/code",
    MODEL_CACHE_ROOT="/opt/ml/model",
    SAGEMAKER_ENV="1"
)

endpoint_name = SageMakerEndpoint(name="endpoint-custom-pytorch")

tls_config = TlsConfig(tls_certificate_output_s3_uri="s3://<bucket_name>")

custom_endpoint = HPCustomEndpoint(
    model=model,
    server=server,
    resources=resources,
    environment=env,
    sage_maker_endpoint=endpoint_name,
    tls_config=tls_config
)

custom_endpoint.create()
```

## Rufen Sie den Endpunkt auf
<a name="invoke-endpoint"></a>

### Verwenden der -CLI
<a name="invoke-using-cli"></a>

Testen Sie den Endpunkt mit einer Beispieleingabe:

```
hyp invoke hyp-custom-endpoint \
    --endpoint-name endpoint-custom-pytorch \
    --body '{"inputs":"What is the capital of USA?"}'
```

Dies gibt die Antwort des Modells zurück, beispielsweise „Die Hauptstadt der USA ist Washington, D.C.“

### Verwenden der SDK
<a name="invoke-using-sdk"></a>

Fügen Sie den folgenden Code in Ihr Python-Skript ein:

```
data = '{"inputs":"What is the capital of USA?"}'
response = custom_endpoint.invoke(body=data).body.read()
print(response)
```

## Verwalten der Endpunkte
<a name="manage-endpoint"></a>

### Verwenden der -CLI
<a name="manage-using-cli"></a>

Listen Sie den Endpunkt auf und überprüfen Sie ihn:

```
hyp list hyp-custom-endpoint
hyp get hyp-custom-endpoint --name endpoint-custom-pytorch
```

### Verwenden der SDK
<a name="manage-using-sdk"></a>

Fügen Sie den folgenden Code in Ihr Python-Skript ein:

```
logs = custom_endpoint.get_logs()
print(logs)
```

## Bereinigen von Ressourcen
<a name="cleanup-resources"></a>

Wenn Sie fertig sind, löschen Sie den Endpunkt, um unnötige Kosten zu vermeiden.

### Verwenden der -CLI
<a name="cleanup-using-cli"></a>

```
hyp delete hyp-custom-endpoint --name endpoint-custom-pytorch
```

### Verwenden der SDK
<a name="cleanup-using-sdk"></a>

```
custom_endpoint.delete()
```

## Nächste Schritte
<a name="next-steps"></a>

Sie haben erfolgreich ein benutzerdefiniertes Modell bereitgestellt und getestet mit SageMaker HyperPod. Sie können diesen Endpunkt nun für Inferenzen in Ihren Anwendungen verwenden.

# Stellen Sie ein JumpStart Modell bereit
<a name="deploy-jumpstart-model"></a>

Sie können ein vortrainiertes JumpStart Modell für Inferenzen entweder mit der CLI oder dem SDK bereitstellen.

## Verwenden der -CLI
<a name="deploy-jumpstart-cli"></a>

Führen Sie den folgenden Befehl aus, um ein JumpStart Modell bereitzustellen:

```
hyp create hyp-jumpstart-endpoint \
  --version 1.0 \
  --model-id deepseek-llm-r1-distill-qwen-1-5b \
  --instance-type ml.g5.8xlarge \
  --endpoint-name endpoint-test-jscli
```

## Verwenden der SDK
<a name="deploy-jumpstart-sdk"></a>

Erstellen Sie ein Python-Skript mit dem folgenden Inhalt:

```
from sagemaker.hyperpod.inference.config.hp_jumpstart_endpoint_config import Model, Server, SageMakerEndpoint, TlsConfig
from sagemaker.hyperpod.inference.hp_jumpstart_endpoint import HPJumpStartEndpoint

model=Model(
    model_id='deepseek-llm-r1-distill-qwen-1-5b'
)

server=Server(
    instance_type='ml.g5.8xlarge',
)

endpoint_name=SageMakerEndpoint(name='<endpoint-name>')

# create spec
js_endpoint=HPJumpStartEndpoint(
    model=model,
    server=server,
    sage_maker_endpoint=endpoint_name
)
```

## Rufen Sie den Endpunkt auf
<a name="invoke-jumpstart-endpoint"></a>

### Verwenden der -CLI
<a name="invoke-jumpstart-cli"></a>

Testen Sie den Endpunkt mit einer Beispieleingabe:

```
hyp invoke hyp-jumpstart-endpoint \
    --endpoint-name endpoint-jumpstart \
    --body '{"inputs":"What is the capital of USA?"}'
```

### Verwenden der SDK
<a name="invoke-jumpstart-sdk"></a>

Fügen Sie den folgenden Code in Ihr Python-Skript ein:

```
data = '{"inputs":"What is the capital of USA?"}'
response = js_endpoint.invoke(body=data).body.read()
print(response)
```

## Verwalten der Endpunkte
<a name="manage-jumpstart-endpoint"></a>

### Verwenden der -CLI
<a name="manage-jumpstart-cli"></a>

Listen Sie den Endpunkt auf und überprüfen Sie ihn:

```
hyp list hyp-jumpstart-endpoint
hyp get hyp-jumpstart-endpoint --name endpoint-jumpstart
```

### Verwenden der SDK
<a name="manage-jumpstart-sdk"></a>

Fügen Sie den folgenden Code in Ihr Python-Skript ein:

```
endpoint_iterator = HPJumpStartEndpoint.list()
for endpoint in endpoint_iterator:
    print(endpoint.name, endpoint.status)

logs = js_endpoint.get_logs()
print(logs)
```

## Bereinigen von Ressourcen
<a name="cleanup-jumpstart-resources"></a>

Wenn Sie fertig sind, löschen Sie den Endpunkt, um unnötige Kosten zu vermeiden.

### Verwenden der -CLI
<a name="cleanup-jumpstart-cli"></a>

```
hyp delete hyp-jumpstart-endpoint --name endpoint-jumpstart
```

### Verwenden der SDK
<a name="cleanup-jumpstart-sdk"></a>

```
js_endpoint.delete()
```

## Nächste Schritte
<a name="jumpstart-next-steps"></a>

Nachdem Sie ein PyTorch Modell trainiert, es als benutzerdefinierten Endpunkt bereitgestellt und ein JumpStart Modell mithilfe der CLI und HyperPod des SDK bereitgestellt haben, erkunden Sie die erweiterten Funktionen:
+ Training **mit mehreren Knoten: Skalieren Sie das Training** auf mehrere Instances
+ **Benutzerdefinierte Container**: Erstellen Sie spezielle Schulungsumgebungen
+ **Integration mit SageMaker Pipelines**: Automatisieren Sie Ihre ML-Workflows
+ **Erweiterte Überwachung**: Richten Sie benutzerdefinierte Metriken und Benachrichtigungen ein

Weitere Beispiele und erweiterte Konfigurationen finden Sie im [SageMaker HyperPod GitHub Repository](https://github.com/aws/amazon-sagemaker-examples).