

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Utilice la formación incremental en Amazon SageMaker AI
<a name="incremental-training"></a>

Con el paso del tiempo, puede que un modelo genere inferencias que no sean tan buenas como lo eran antes. Con la capacitación incremental, puede utilizar los artefactos de un modelo ya existente y utilizar un conjunto de datos ampliado para capacitar un nuevo modelo. La capacitación incremental le ahorra tiempo y recursos.

Utilice la capacitación incremental para:
+ Capacitar un nuevo modelo utilizando un conjunto de datos ampliado que contenga un patrón subyacente que no se haya tenido en cuenta en la capacitación anterior que generó un rendimiento de modelo deficiente.
+ Utilizar los artefactos de modelo o una parte de los artefactos de modelo de un modelo disponible públicamente en un trabajo de capacitación. No es necesario capacitar un nuevo modelo desde cero.
+ Reanudar un trabajo de capacitación que se detuvo.
+ Capacitar varias variantes de un modelo, ya sea con una configuración de hiperparámetros diferente o con varios conjuntos de datos diferentes.

Para obtener más información sobre cómo capacitar trabajos, consulte [Entrena a un modelo con Amazon SageMaker](how-it-works-training.md).

Puede entrenar de forma incremental mediante la consola de SageMaker IA o el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable).

**importante**  
Solo tres algoritmos integrados admiten actualmente la capacitación incremental: [Detección de objetos - MXNet](object-detection.md), [Clasificación de imágenes - MXNet](image-classification.md) y [Algoritmo de segmentación semántica](semantic-segmentation.md).

**Topics**
+ [Realización de una capacitación incremental (consola)](#incremental-training-console)
+ [Realización de un entrenamiento incremental (API)](#incremental-training-api)

## Realización de una capacitación incremental (consola)
<a name="incremental-training-console"></a>

Para completar este procedimiento, se necesita lo siguiente:
+ El URI del bucket de Amazon Simple Storage Service (Amazon S3) en el que se almacenaron los datos de entrenamiento.
+ El bucket de S3 en el que desea almacenar la salida del trabajo. 
+ La ruta de Amazon Elastic Container Registry donde se almacena el código de entrenamiento. Para obtener más información, consulte las [Rutas de Docker Registry y código de ejemplo](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths).
+ La dirección URL del bucket de S3 donde ha almacenado los artefactos de modelo que desee utilizar en la capacitación incremental. Para encontrar la dirección URL de artefactos de modelo, consulte la página de detalles del trabajo de capacitación utilizado para crear el modelo. Para encontrar la página de detalles, en la consola de SageMaker IA, selecciona **Inferencia**, elige **Modelos** y, a continuación, elige el modelo.

Para reiniciar un trabajo de capacitación detenido, utilice la dirección URL para los artefactos del modelo que están almacenados en la página de detalles, como lo haría con un modelo o un trabajo de capacitación completado.

**Para realizar una capacitación incremental (consola)**

1. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación, elija **Entrenamiento**; a continuación, elija **Trabajos de entrenamiento**. 

1. Elija **Crear trabajo de entrenamiento**.

1. Proporcione un nombre para el trabajo de entrenamiento. El nombre debe ser único dentro de una AWS región de la AWS cuenta. El trabajo de capacitación nombre debe tener entre 1 y 63 caracteres. Los caracteres válidos son: a-z, A-Z, 0-9 y . : \$1 = @ \$1 % - (guion).

1. Elija el algoritmo que desee usar. Para obtener información acerca de algoritmos, consulte [Algoritmos integrados y modelos previamente entrenados en Amazon SageMaker](algos.md). 

1. (Opcional) Para **Configuración de recursos**, deje los valores predeterminados o aumente el consumo de recursos para reducir el tiempo de cálculo.

   1. (Opcional) En **Tipo de instancia**, elija el tipo de instancia de computación de machine learning que desea utilizar. En la mayoría de los casos, **ml.m4.xlarge** es suficiente. 

   1. En **Recuento de instancias**, use el valor predeterminado 1.

   1. (Opcional) En **Volumen adicional por instancia (GB)**, elija el tamaño del volumen de almacenamiento de machine learning que desea aprovisionar. En la mayoría de los casos, puede usar el valor predeterminado, que es 1. Si usa un conjunto de datos voluminoso, utilice un tamaño más grande.

1. Proporcione información sobre los datos de entrada para el conjunto de datos de capacitación.

   1. Para **Nombre de canal**, deje el valor predeterminado (**train**) o escriba un nombre más significativo para el conjunto de datos de entrenamiento, como por ejemplo **expanded-training-dataset**.

   1. Para **InputMode**, elija **Archivo**. Para capacitaciones incrementales, debe utilizar el modo de entrada de archivos.

   1. Para el **tipo de distribución de datos S3**, elija **FullyReplicated**. Esto hace que cada instancia de computación de machine learning use una replicación completa del conjunto de datos ampliado al realizar entrenamientos incrementales.

   1. Si el conjunto de datos ampliado no está comprimido, establezca el **Tipo de compresión** en **Ninguno**. Si el conjunto de datos ampliado se comprime utilizando Gzip, establézcalo en **Gzip**.

   1. (Opcional) Si utiliza el modo de entrada de archivos, deje **Tipo de contenido** vacío. Para el modo de entrada de canalización, especifique el tipo MIME adecuado. El *Tipo de contenido* es el tipo de extensiones multipropósito de correo Internet (MIME) de los datos.

   1. Para **Contenedor de registros**, si el conjunto de datos se guarda en formato RecordIO, elija **RecordIO**. Si su conjunto de datos no se guarda como archivo con formato RecordIO, elija **Ninguno**.

   1. Para **Tipo de datos de S3**, si el conjunto de datos se almacena como archivo único, elija **S3Prefix**. Si el conjunto de datos se almacena como varios archivos en una carpeta, elija **Manifiesto**.

   1. Para **Ubicación de S3**, proporcione la dirección URL a la ruta donde ha almacenado el conjunto de datos ampliado.

   1. Seleccione **Listo**.

1. Para utilizar artefactos de modelos en un trabajo de capacitación, tiene que añadir un nuevo canal y proporcionar la información necesaria sobre los artefactos de modelo.

   1. Para **Configuración de datos de entrada**, seleccione **Agregar canal**.

   1. Para **Nombre de canal**, escriba **model** para identificar este canal como el origen de los artefactos de modelo.

   1. Para **InputMode**, elija **Archivo**. Los artefactos de modelo se almacenan como archivos.

   1. Para el **tipo de distribución de datos S3**, elija **FullyReplicated**. Esto indica que cada instancia de computación de machine learning debe utilizar todos los artefactos de modelos para el entrenamiento. 

   1. Para **Tipo de compresión**, seleccione **Ninguno** ya que estamos utilizando un modelo para el canal.

   1. Deje **Tipo de contenido** vacío. El Tipo de contenido es el tipo de extensiones multipropósito de correo Internet (MIME) de los datos. Para los artefactos de los modelos, lo dejamos vacío.

   1. Establezca **Contenedor de registros** en **Ninguno** porque los artefactos de modelos no se almacenan en formato RecordIO.

   1. Para **Tipo de datos de S3**, si está utilizando un algoritmo integrado o un algoritmo que almacena el modelo como único archivo, elija **S3Prefix**. Si utiliza un algoritmo que almacena el modelo como varios archivos, elija **Manifiesto**.

   1. Para **Ubicación de S3**, proporcione la dirección URL a la ruta donde ha almacenado los artefactos del modelo. Normalmente, el modelo se almacena con el nombre `model.tar.gz`. Para encontrar la dirección URL de los artefactos del modelo, en el panel de navegación, haga clic en **Inferencia** y luego elija **Modelos**. En la lista de modelos, elija un modelo para mostrar su página de detalles. La dirección URL de los artefactos del modelo se muestra en **Contenedor principal**.

   1. Seleccione **Listo**.

1. En **Configuración de datos de salida**, proporcione la siguiente información:

   1. En **Ubicación de S3**, escriba la ruta al bucket de S3 donde desea almacenar los datos de salida.

   1. (Opcional) En **Clave de cifrado**, puede añadir su clave de cifrado AWS Key Management Service (AWS KMS) para cifrar los datos de salida en reposo. Proporcione el ID de clave o su número de recurso de Amazon (ARN). Para obtener más información, consulte [Claves de cifrado administradas por KMS](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html).

1. (Opcional) En **Etiquetas**, agregue una o más etiquetas al trabajo de entrenamiento. Una *etiqueta* son los metadatos que puede definir y asignar a los recursos de AWS . En este caso, puede usar las etiquetas para ayudarle a administrar sus trabajos de capacitación. Una etiqueta consta de una clave y un valor que define el usuario. Por ejemplo, es posible que desee crear una etiqueta con **Project** como una clave y un valor haciendo referencia a un proyecto que está relacionado con el trabajo de capacitación como, por ejemplo, **Home value forecasts**.

1. Elija **Crear trabajo de formación**. SageMaker La IA crea y ejecuta un trabajo de formación.

Una vez que el trabajo de entrenamiento se haya completado, los artefactos del modelo recién entrenado se almacenan en **Ruta de salida de S3** que ha proporcionado en el campo **Configuración de datos de salida**. Para implementar el modelo para obtener predicciones, consulte [Implementación del modelo en Amazon EC2](ex1-model-deployment.md).

## Realización de un entrenamiento incremental (API)
<a name="incremental-training-api"></a>

En este ejemplo, se muestra cómo usar la SageMaker IA APIs para entrenar un modelo mediante el algoritmo de clasificación de imágenes de SageMaker IA y el [conjunto de datos de imágenes Caltech 256](https://data.caltech.edu/records/nyy15-4j048) y, a continuación, entrenar un modelo nuevo con el primero. Utiliza Amazon S3 para orígenes de entrada y salida. Consulte el [bloc de notas de muestra de capacitación incremental](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-incremental-training-highlevel.html) para obtener más información acerca de cómo usar la capacitación incremental.

**nota**  
En este ejemplo hemos usado el conjunto de datos originales en la capacitación incremental; sin embargo puede utilizar diferentes conjuntos de datos, como, por ejemplo, los que contienen muestras que se han añadido recientemente. Cargue los nuevos conjuntos de datos en S3 y realice ajustes en la variable `data_channels` utilizada para capacitar el nuevo modelo.

Obtenga un rol AWS Identity and Access Management (IAM) que otorgue los permisos necesarios e inicialice las variables de entorno:

```
import sagemaker
from sagemaker import get_execution_role

role = get_execution_role()
print(role)

sess = sagemaker.Session()

bucket=sess.default_bucket()
print(bucket)
prefix = 'ic-incr-training'
```

Obtenga la imagen de capacitación para el algoritmo de clasificación de imágenes:

```
from sagemaker.amazon.amazon_estimator import get_image_uri

training_image = get_image_uri(sess.boto_region_name, 'image-classification', repo_version="latest")
#Display the training image
print (training_image)
```

Descargue los conjuntos de datos de entrenamiento y de validación y cárguelos en Amazon Simple Storage Service (Amazon S3):

```
import os
import urllib.request
import boto3

# Define a download function
def download(url):
    filename = url.split("/")[-1]
    if not os.path.exists(filename):
        urllib.request.urlretrieve(url, filename)

# Download the caltech-256 training and validation datasets
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-train.rec')
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-val.rec')

# Create four channels: train, validation, train_lst, and validation_lst
s3train = 's3://{}/{}/train/'.format(bucket, prefix)
s3validation = 's3://{}/{}/validation/'.format(bucket, prefix)

# Upload the first files to the train and validation channels
!aws s3 cp caltech-256-60-train.rec $s3train --quiet
!aws s3 cp caltech-256-60-val.rec $s3validation --quiet
```

Defina los hiperparámetros de entrenamiento:

```
# Define hyperparameters for the estimator
hyperparams = { "num_layers": "18",
                "resize": "32",
                "num_training_samples": "50000",
                "num_classes": "10",
                "image_shape": "3,28,28",
                "mini_batch_size": "128",
                "epochs": "3",
                "learning_rate": "0.1",
                "lr_scheduler_step": "2,3",
                "lr_scheduler_factor": "0.1",
                "augmentation_type": "crop_color",
                "optimizer": "sgd",
                "momentum": "0.9",
                "weight_decay": "0.0001",
                "beta_1": "0.9",
                "beta_2": "0.999",
                "gamma": "0.9",
                "eps": "1e-8",
                "top_k": "5",
                "checkpoint_frequency": "1",
                "use_pretrained_model": "0",
                "model_prefix": "" }
```

Cree un objeto de estimador y capacite el primer modelo utilizando los conjuntos de datos de entrenamiento y validación:

```
# Fit the base estimator
s3_output_location = 's3://{}/{}/output'.format(bucket, prefix)
ic = sagemaker.estimator.Estimator(training_image,
                                   role,
                                   instance_count=1,
                                   instance_type='ml.p2.xlarge',
                                   volume_size=50,
                                   max_run=360000,
                                   input_mode='File',
                                   output_path=s3_output_location,
                                   sagemaker_session=sess,
                                   hyperparameters=hyperparams)

train_data = sagemaker.inputs.TrainingInput(s3train, distribution='FullyReplicated',
                                        content_type='application/x-recordio', s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3validation, distribution='FullyReplicated',
                                             content_type='application/x-recordio', s3_data_type='S3Prefix')

data_channels = {'train': train_data, 'validation': validation_data}

ic.fit(inputs=data_channels, logs=True)
```

Para utilizar el modelo para capacitar de manera incremental otro modelo, cree un nuevo objeto de estimador y utilice los artefactos del modelo (`ic.model_data`, en este ejemplo) para el argumento de entrada `model_uri`:

```
# Given the base estimator, create a new one for incremental training
incr_ic = sagemaker.estimator.Estimator(training_image,
                                        role,
                                        instance_count=1,
                                        instance_type='ml.p2.xlarge',
                                        volume_size=50,
                                        max_run=360000,
                                        input_mode='File',
                                        output_path=s3_output_location,
                                        sagemaker_session=sess,
                                        hyperparameters=hyperparams,
                                        model_uri=ic.model_data) # This parameter will ingest the previous job's model as a new channel
incr_ic.fit(inputs=data_channels, logs=True)
```

Una vez que haya completado el trabajo de capacitación, los artefactos del modelo recién capacitado se almacenan en la `S3 output path` que ha proporcionado en `Output_path`. Para implementar el modelo para obtener predicciones, consulte [Implementación del modelo en Amazon EC2](ex1-model-deployment.md).