

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# SageMaker tutorial di pre-formazione sui lavori di formazione (GPU)
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial"></a>

Questo tutorial illustra il processo di impostazione ed esecuzione di un processo di pre-formazione utilizzando i lavori di formazione con SageMaker istanze GPU.
+ Configurare l'ambiente
+ Avvia un processo di formazione utilizzando le ricette SageMaker HyperPod 

Prima di cominciare, assicurati che i requisiti seguenti siano soddisfatti.

**Prerequisiti**  
Prima di iniziare a configurare l’ambiente, assicurati di avere:  
Un file system Amazon FSx o un bucket Amazon S3 in cui caricare i dati e generare gli artefatti di addestramento.
Hai richiesto una quota di servizio per 1x ml.p4d.24xlarge e 1x ml.p5.48xlarge su Amazon AI. SageMaker Per richiedere un aumento delle Service Quotas, procedi come descritto di seguito:  
Nella console AWS Service Quotas AWS , vai ai servizi,
Scegli ** Amazon SageMaker AI**.
Scegli un’istanza ml.p4d.24xlarge e un’istanza ml.p5.48xlarge.
Crea un ruolo AWS Identity and Access Management(IAM) con le seguenti policy gestite per concedere all' SageMaker IA le autorizzazioni necessarie per eseguire gli esempi.  
AmazonSageMakerFullAccess
AmazonEC2FullAccess
I dati in uno dei seguenti formati:  
JSON
JSONGZ (JSON compresso)
ARROW
(Facoltativo) È necessario ottenere un HuggingFace token se si utilizzano i pesi del modello HuggingFace per il pre-training o la messa a punto. Per ulteriori informazioni su come ottenere il token, consulta [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configurazione dell'ambiente dei lavori di formazione tramite GPU SageMaker
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-environment-setup"></a>

Prima di eseguire un processo di SageMaker formazione, configura AWS le tue credenziali e la regione preferita eseguendo il `aws configure` comando. In alternativa al comando configure, puoi fornire le tue credenziali tramite variabili di ambiente come`AWS_ACCESS_KEY_ID`, e `AWS_SESSION_TOKEN.` Per ulteriori informazioni`AWS_SECRET_ACCESS_KEY`, vedi [ SageMaker AI Python SDK. ](https://github.com/aws/sagemaker-python-sdk)

Consigliamo vivamente di utilizzare un notebook SageMaker AI Jupyter in SageMaker AI JupyterLab per avviare un lavoro di formazione. SageMaker Per ulteriori informazioni, consulta [SageMaker JupyterLab](studio-updated-jl.md).
+ (Facoltativo) Configura l’ambiente virtuale e le dipendenze. Se utilizzi un notebook Jupyter in Amazon SageMaker Studio, puoi saltare questo passaggio. Assicurati di utilizzare Python 3.9 o versioni successive.

  ```
  # 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>}}
  ```
+ Installa AI Python SDK SageMaker 

  ```
  pip3 install --upgrade sagemaker
  ```
+ `Container`: il contenitore GPU viene impostato automaticamente da SageMaker AI Python SDK. Puoi anche fornire un tuo container.
**Nota**  
Se stai eseguendo un job di addestramento multimodale Llama 3.2, la versione di `transformers` deve essere `4.45.2 `o superiore.

  Si aggiunge `transformers==4.45.2` a `requirements.txt` in `source_dir` solo quando si utilizza l'AI Python SDK. SageMaker Ad esempio, aggiungilo se lo stai usando in un notebook in AI. SageMaker JupyterLab

  Se utilizzi HyperPod ricette per l'avvio utilizzando il tipo di cluster`sm_jobs`, questa operazione verrà eseguita automaticamente.

## Avvio del job di addestramento con un notebook Jupyter
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-notebook"></a>

Puoi usare il seguente codice Python per eseguire un lavoro di SageMaker formazione con la tua ricetta. Sfrutta l'SDK PyTorch ModelTrainer [ SageMaker AI Python ](https://sagemaker.readthedocs.io/en/stable/) per inviare la ricetta. L'esempio seguente avvia la ricetta llama3-8b sulla piattaforma AI Training. 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)
```

Il codice precedente crea un ModelTrainer oggetto con la ricetta di addestramento e quindi addestra il modello utilizzando il metodo. `train()` Utilizza il parametro training\_recipe per specificare la ricetta da utilizzare per l’addestramento.

**Nota**  
Se stai eseguendo un job di addestramento multimodale Llama 3.2, la versione di transformers deve essere 4.45.2 o superiore.

Aggiungi `transformers==4.45.2` a `requirements.txt` in `source_dir` solo quando usi direttamente SageMaker AI Python SDK. Ad esempio, devi aggiungere la versione al file di testo quando utilizzi un notebook Jupyter.

Quando distribuisci l'endpoint per un lavoro di SageMaker formazione, devi specificare l'URI dell'immagine che stai utilizzando. Se non fornisci l'URI dell'immagine, ModelTrainer utilizza l'immagine di addestramento come immagine per la distribuzione. Le immagini di addestramento SageMaker HyperPod fornite non contengono le dipendenze necessarie per l'inferenza e l'implementazione. Di seguito è riportato un esempio di come utilizzare un’immagine di inferenza per l’implementazione:

```
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**  
L'esecuzione del codice precedente sull'istanza del notebook Sagemaker potrebbe richiedere più dei 5 GB di spazio di archiviazione predefiniti forniti da AI. SageMaker JupyterLab Se riscontri problemi relativi allo spazio non disponibile, crea una nuova istanza del notebook di tipo diverso e aumenta lo spazio di archiviazione del notebook.

## Avvio del job di addestramento con l’utilità di avvio delle ricette
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-recipes"></a>

Aggiorna il file `./recipes_collection/cluster/sm_jobs.yaml` in modo che abbia il seguente aspetto:

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

Aggiorna `./recipes_collection/config.yaml` per specificare `sm_jobs` in `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.
```

Avvia il processo con il comando seguente.

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

Per ulteriori informazioni sulla configurazione dei job di SageMaker training, consulta Run a training job on training jobs. SageMaker 