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.
SageMakerdidacticiel de pré-formation sur les tâches de formation (GPU)
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 une 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
.
Configuration de l'environnement des tâches de SageMaker formation GPU
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_IDAWS_SECRET_ACCESS_KEY, et AWS_SESSION_TOKEN. pour plus d'informations, consultez le SDK SageMaker AI Python
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.
-
(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
transformersdoit être4.45.2ou supérieure.Ajoutez
transformers==4.45.2àrequirements.txtinsource_diruniquement 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
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
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_recipe 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
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.