

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# SageMaker didacticiel de pré-formation sur les tâches de formation (GPU)
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial"></a>

Ce didacticiel vous guide tout au long du processus de configuration et d'exécution d'une tâche de pré-formation à l'aide de tâches de SageMaker formation avec des instances de GPU.
+ Configuration de votre environnement
+ Lancez un travail de formation à l'aide de SageMaker HyperPod recettes

Avant de commencer, assurez-vous d’avoir rempli les conditions préalables suivantes.

**Conditions préalables**  
Avant de commencer à configurer votre environnement, assurez-vous d’avoir :  
Système de FSx fichiers Amazon ou compartiment Amazon S3 dans lequel vous pouvez charger les données et générer les artefacts d'entraînement.
J'ai demandé un quota de service pour 1 fichier ml.p4d.24xlarge et 1 fichier ml.p5.48xlarge sur Amazon AI. SageMaker Pour demander une augmentation du quota de service, procédez comme suit :  
Sur la console AWS Service Quotas, accédez aux AWS services,
Choisissez **Amazon SageMaker AI**.
Choisissez une instance ml.p4d.24xlarge et une instance ml.p5.48xlarge.
Créez un rôle Gestion des identités et des accès AWS(IAM) avec les politiques gérées suivantes pour autoriser l' SageMaker IA à exécuter les exemples.  
AmazonSageMakerFullAccess
Amazon EC2 FullAccess
Des données dans l’un des formats suivants :  
JSON
JSONGZ (JSON compressé)
ARROW
(Facultatif) Vous devez obtenir un HuggingFace jeton si vous utilisez les poids du modèle à des HuggingFace fins de pré-entraînement ou de réglage. Pour plus d’informations sur l’obtention du jeton, consultez [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configuration de l'environnement des tâches de SageMaker formation GPU
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-environment-setup"></a>

Avant d'exécuter une tâche de SageMaker formation, configurez vos AWS informations d'identification et votre région préférée en exécutant la `aws configure` commande. Comme alternative à la commande configure, vous pouvez fournir vos informations d'identification via des variables d'environnement telles que `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, et `AWS_SESSION_TOKEN.` pour plus d'informations, consultez le [SDK SageMaker AI Python](https://github.com/aws/sagemaker-python-sdk).

Nous vous recommandons vivement d'utiliser un bloc-notes SageMaker AI Jupyter dans SageMaker AI JupyterLab pour lancer une tâche de SageMaker formation. Pour de plus amples informations, veuillez consulter [SageMaker JupyterLab](studio-updated-jl.md).
+ (Facultatif) Configurez l’environnement virtuel et les dépendances. Si vous utilisez un bloc-notes Jupyter dans Amazon SageMaker Studio, vous pouvez ignorer cette étape. Assurez-vous d’utiliser Python 3.9 ou version supérieure.

  ```
  # set up a virtual environment
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  # install dependencies after git clone.
  
  git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  # Set the aws region.
  
  aws configure set <your_region>
  ```
+ Installez le SDK SageMaker AI Python

  ```
  pip3 install --upgrade sagemaker
  ```
+ `Container`: Le conteneur GPU est défini automatiquement par le SDK SageMaker AI Python. Vous pouvez également fournir votre propre conteneur.
**Note**  
Si vous exécutez une tâche d’entraînement multimodale Llama 3.2, la version des `transformers` doit être `4.45.2 ` ou supérieure.

  Ajoutez `transformers==4.45.2` à `requirements.txt` in `source_dir` uniquement lorsque vous utilisez le SDK SageMaker AI Python. Par exemple, ajoutez-le si vous l'utilisez dans un bloc-notes dans SageMaker AI JupyterLab.

  Si vous utilisez des HyperPod recettes pour lancer en utilisant le type de cluster`sm_jobs`, cela se fera automatiquement.

## Lancement de la tâche d’entraînement à l’aide d’un bloc-notes Jupyter
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-notebook"></a>

Vous pouvez utiliser le code Python suivant pour exécuter une tâche d' SageMaker entraînement avec votre recette. Il utilise l' PyTorch estimateur du [SDK AI SageMaker Python](https://sagemaker.readthedocs.io/en/stable/) pour soumettre la recette. L'exemple suivant lance la recette llama3-8b sur la plateforme AI Training. SageMaker 

```
import os
import sagemaker,boto3
from sagemaker.debugger import TensorBoardOutputConfig

from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()

bucket = sagemaker_session.default_bucket() 
output = os.path.join(f"s3://{bucket}", "output")
output_path = "<s3-URI>"

overrides = {
    "run": {
        "results_dir": "/opt/ml/model",
    },
    "exp_manager": {
        "exp_dir": "",
        "explicit_log_dir": "/opt/ml/output/tensorboard",
        "checkpoint_dir": "/opt/ml/checkpoints",
    },   
    "model": {
        "data": {
            "train_dir": "/opt/ml/input/data/train",
            "val_dir": "/opt/ml/input/data/val",
        },
    },
}

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=os.path.join(output, 'tensorboard'),
    container_local_output_path=overrides["exp_manager"]["explicit_log_dir"]
)

estimator = PyTorch(
    output_path=output_path,
    base_job_name=f"llama-recipe",
    role=role,
    instance_type="ml.p5.48xlarge",
    training_recipe="training/llama/hf_llama3_8b_seq8k_gpu_p5x16_pretrain",
    recipe_overrides=recipe_overrides,
    sagemaker_session=sagemaker_session,
    tensorboard_output_config=tensorboard_output_config,
)

estimator.fit(inputs={"train": "s3 or fsx input", "val": "s3 or fsx input"}, wait=True)
```

Le code précédent crée un objet PyTorch estimateur avec la recette d'apprentissage, puis ajuste le modèle à l'aide de la `fit()` méthode. Utilisez le paramètre training\$1recipe pour spécifier la recette que vous souhaitez utiliser pour l’entraînement.

**Note**  
Si vous exécutez une tâche d’entraînement multimodale Llama 3.2, la version des transformeurs doit être 4.45.2 ou supérieure.

Ajoutez `transformers==4.45.2` à `requirements.txt` in `source_dir` uniquement lorsque vous utilisez directement le SDK SageMaker AI Python. Par exemple, vous devez ajouter la version au fichier texte lorsque vous utilisez un bloc-notes Jupyter.

Lorsque vous déployez le point de terminaison pour une tâche de SageMaker formation, vous devez spécifier l'URI de l'image que vous utilisez. Si vous ne fournissez pas d’URI d’image, l’estimateur utilise l’image d’entraînement comme image pour le déploiement. Les images de formation SageMaker HyperPod fournies ne contiennent pas les dépendances requises pour l'inférence et le déploiement. Voici un exemple de la manière dont une image d’inférence peut être utilisée pour le déploiement :

```
from sagemaker import image_uris
container=image_uris.retrieve(framework='pytorch',region='us-west-2',version='2.0',py_version='py310',image_scope='inference', instance_type='ml.p4d.24xlarge')
predictor = estimator.deploy(initial_instance_count=1,instance_type='ml.p4d.24xlarge',image_uri=container)
```

**Note**  
L'exécution du code précédent sur une instance de bloc-notes Sagemaker peut nécessiter plus que les 5 Go de stockage par défaut fournis par l' SageMaker IA JupyterLab . Si vous rencontrez des problèmes d’espace non disponible, créez une nouvelle instance de bloc-notes dans laquelle vous utiliserez une autre instance de bloc-notes et augmentez l’espace de stockage du bloc-notes.

## Lancement de la tâche d’entraînement avec le lanceur de recettes
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-recipes"></a>

Mettez à jour le fichier `./recipes_collection/cluster/sm_jobs.yaml` pour qu’il se présente comme suit :

```
sm_jobs_config:
  output_path: <s3_output_path>
  tensorboard_config:
    output_path: <s3_output_path>
    container_logs_path: /opt/ml/output/tensorboard  # Path to logs on the container
  wait: True  # Whether to wait for training job to finish
  inputs:  # Inputs to call fit with. Set either s3 or file_system, not both.
    s3:  # Dictionary of channel names and s3 URIs. For GPUs, use channels for train and validation.
      train: <s3_train_data_path>
      val: null
  additional_estimator_kwargs:  # All other additional args to pass to estimator. Must be int, float or string.
    max_run: 180000
    enable_remote_debug: True
  recipe_overrides:
    exp_manager:
      explicit_log_dir: /opt/ml/output/tensorboard
    data:
      train_dir: /opt/ml/input/data/train
    model:
      model_config: /opt/ml/input/data/train/config.json
    compiler_cache_url: "<compiler_cache_url>"
```

Mettez à jour `./recipes_collection/config.yaml` pour spécifier `sm_jobs` dans `cluster` et `cluster_type`.

```
defaults:
  - _self_
  - cluster: sm_jobs  # set to `slurm`, `k8s` or `sm_jobs`, depending on the desired cluster
  - recipes: training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain
cluster_type: sm_jobs  # bcm, bcp, k8s or sm_jobs. If bcm, k8s or sm_jobs, it must match - cluster above.
```

Lancez la tâche à l’aide de la commande suivante :

```
python3 main.py --config-path recipes_collection --config-name config
```

Pour plus d'informations sur la configuration des tâches de SageMaker formation, voir Exécuter une tâche de formation sur des tâches de SageMaker formation.