View a markdown version of this page

SageMaker tutorial de pré-treinamento para trabalhos de treinamento (GPU) - SageMaker IA da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

SageMaker tutorial de pré-treinamento para trabalhos de treinamento (GPU)

Este tutorial orienta você no processo de configuração e execução de um trabalho de pré-treinamento usando trabalhos de treinamento com SageMaker instâncias de GPU.

  • Configure o ambiente.

  • Inicie um trabalho de treinamento usando SageMaker HyperPod receitas

Antes de começar, verifique se você atendeu aos pré-requisitos a seguir.

Pré-requisitos

Antes de começar a configurar seu ambiente, você deve:

  • Ter um sistema de arquivos do Amazon FSx ou um bucket do S3 onde possa carregar os dados e gerar os artefatos de treinamento.

  • Solicitou uma cota de serviço para 1x ml.p4d.24xlarge e 1x ml.p5.48xlarge na Amazon AI. SageMaker Para solicitar um aumento da cota de serviço, você pode seguir um dos seguintes procedimentos:

    1. No console AWS Service Cotas, navegue até AWS serviços,

    2. Escolha Amazon SageMaker AI.

    3. Escolha uma instância ml.p4d.24xlarge e uma instância ml.p5.48xlarge.

  • Crie uma função AWS Identity and Access Management(IAM) com as seguintes políticas gerenciadas para dar permissões à SageMaker IA para executar os exemplos.

    • AmazonSageMakerFullAccess

    • AmazonEC2FullAccess

  • Ter dados em um dos seguintes formatos:

    • JSON

    • JSONGZ (JSON compactado)

    • ARROW

  • (Opcional) Você deve receber um HuggingFace token se estiver usando os pesos do modelo HuggingFace para pré-treinamento ou ajuste fino. Para ter mais informações sobre como obter o token, consulte User access tokens.

Configuração do ambiente de trabalhos SageMaker de treinamento de GPU

Antes de executar um trabalho SageMaker de treinamento, configure suas AWS credenciais e sua região preferida executando o aws configure comando. Como alternativa ao comando configure, você pode fornecer suas credenciais por meio de variáveis de ambienteAWS_ACCESS_KEY_ID, comoAWS_SECRET_ACCESS_KEY, e AWS_SESSION_TOKEN. Para obter mais informações, consulte SageMaker AI Python SDK.

É altamente recomendável usar um notebook SageMaker AI Jupyter em SageMaker IA JupyterLab para iniciar um trabalho de SageMaker treinamento. Para obter mais informações, consulte SageMaker JupyterLab.

  • (Opcional) Configure o ambiente virtual e as dependências. Se você estiver usando um notebook Jupyter no Amazon SageMaker Studio, você pode pular esta etapa. Você deve usar o Python 3.9 ou posterior.

    # 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>
  • Instale o SageMaker SDK do AI Python

    pip3 install --upgrade sagemaker
  • Container: o contêiner da GPU é definido automaticamente pelo SDK do SageMaker AI Python. Você também pode fornecer seu próprio contêiner.

    nota

    Se você estiver executando uma tarefa de treinamento multimodal do Llama 3.2, a versão dos transformers deve ser 4.45.2 ou posterior.

    Anexe transformers==4.45.2 a requirements.txt in source_dir somente quando estiver usando o SDK do SageMaker AI Python. Por exemplo, anexe-o se você o estiver usando em um notebook na SageMaker IA. JupyterLab

    Se você estiver usando HyperPod receitas para iniciar usando o tipo de clustersm_jobs, isso será feito automaticamente.

Iniciar a tarefa de treinamento usando um caderno Jupyter

Você pode usar o código Python a seguir para executar um trabalho SageMaker de treinamento com sua receita. Ele aproveita o SDK PyTorch ModelTrainer do SageMaker AI Python para enviar a receita. O exemplo a seguir lança a receita llama3-8b na plataforma de treinamento de IA. SageMaker

import os import boto3 from sagemaker.core.debugger import TensorBoardOutputConfig from sagemaker.core.helper.session_helper import Session, get_execution_role from sagemaker.train import ModelTrainer from sagemaker.train.configs import Compute, InputData, OutputDataConfig sagemaker_session = Session() role = get_execution_role() bucket = sagemaker_session.default_bucket() output = os.path.join(f"s3://{bucket}", "output") output_path = "<s3-URI>" recipe_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=recipe_overrides["exp_manager"]["explicit_log_dir"] ) model_trainer = ModelTrainer( output_data_config=OutputDataConfig(s3_output_path=output_path), base_job_name=f"llama-recipe", role=role, compute=Compute(instance_type="ml.p5.48xlarge", instance_count=1), training_recipe="training/llama/hf_llama3_8b_seq8k_gpu_p5x16_pretrain", recipe_overrides=recipe_overrides, tensorboard_output_config=tensorboard_output_config, ) model_trainer.train(input_data_config=[ InputData(channel_name="train", data_source="s3 or fsx input"), InputData(channel_name="val", data_source="s3 or fsx input") ], wait=True)

O código anterior cria um ModelTrainer objeto com a receita de treinamento e depois treina o modelo usando o train() método. Use o parâmetro training_recipe para especificar a fórmula que você deseja usar para treinamento.

nota

Se você estiver executando uma tarefa de treinamento multimodal do Llama 3.2, a versão dos transformadores deve ser 4.45.2 ou posterior.

Anexe transformers==4.45.2 a requirements.txt in source_dir somente quando estiver usando o SDK do SageMaker AI Python diretamente. Por exemplo, você deve acrescentar a versão ao arquivo de texto quando estiver usando um caderno Jupyter.

Ao implantar o endpoint para um trabalho de SageMaker treinamento, você deve especificar o URI da imagem que está usando. Se não fornecer o URI da imagem, o ModelTrainer usará a imagem de treinamento como imagem para a implantação. As imagens de treinamento SageMaker HyperPod fornecidas não contêm as dependências necessárias para inferência e implantação. Veja abaixo um exemplo de como uma imagem de inferência pode ser usada para implantação:

from sagemaker.serve import ModelBuilder from sagemaker.core import image_uris inference_image = image_uris.retrieve(framework='pytorch',region='us-west-2',version='2.0',py_version='py310',image_scope='inference', instance_type='ml.p4d.24xlarge') model_builder = ModelBuilder( model=model_trainer, image_uri=inference_image, role_arn=role, instance_type='ml.p4d.24xlarge' ) model = model_builder.build() endpoint = model_builder.deploy(endpoint_name="my-endpoint")
nota

A execução do código anterior na instância do notebook Sagemaker pode precisar de mais do que os 5 GB de armazenamento padrão que a IA fornece. SageMaker JupyterLab Se você se deparar com problemas de espaço não disponível, crie uma instância de caderno em que você use outra instância de caderno e aumente o armazenamento do caderno.

Iniciar a tarefa de treinamento com o inicializador de fórmulas

Atualize o método no arquivo ./recipes_collection/cluster/sm_jobs.yaml para que fique como se segue:

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>"

Atualize o ./recipes_collection/config.yaml para especificar sm_jobs em cluster e 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.

Inicie o trabalho com o seguinte comando:

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

Para obter mais informações sobre como configurar trabalhos de SageMaker treinamento, consulte Executar um trabalho de treinamento em trabalhos SageMaker de treinamento.