Cómo SageMaker proporciona Amazon la información sobre formación - Amazon SageMaker

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.

Cómo SageMaker proporciona Amazon la información sobre formación

En esta sección se explica cómo SageMaker hace que la información de entrenamiento, como los datos de entrenamiento, los hiperparámetros y otra información de configuración, esté disponible en su contenedor de Docker.

Cuando envías una CreateTrainingJobsolicitud SageMaker para iniciar el entrenamiento con modelos, especificas la ruta de Amazon Elastic Container Registry (Amazon ECR) de la imagen de Docker que contiene el algoritmo de entrenamiento. También especificas la ubicación de Amazon Simple Storage Service (Amazon S3) en la que se almacenan los datos de entrenamiento y los parámetros específicos del algoritmo. SageMaker pone esta información a disposición del contenedor de Docker para que su algoritmo de entrenamiento pueda utilizarla. Esta sección explica cómo hacemos que esta información esté disponible para su contenedor de Docker. Para obtener información sobre un trabajo de entrenamiento, consulte CreateTrainingJob. Para obtener más información sobre la forma en que SageMaker los contenedores organizan la información, consulteUso de los kits SageMaker de herramientas de formación e inferencia .

Hiperparámetros

SageMaker hace que los hiperparámetros de una CreateTrainingJob solicitud estén disponibles en el contenedor Docker del /opt/ml/input/config/hyperparameters.json archivo.

A continuación se muestra un ejemplo de una configuración de hiperparámetros en hyperparameters.json para especificar los hiperparámetros num_round y eta en la operación CreateTrainingJob de XGBoost.

{ "num_round": "128", "eta": "0.001" }

Para obtener una lista completa de los hiperparámetros que se pueden usar para el algoritmo XGBoost SageMaker integrado, consulte Hiperparámetros de XGBoost.

Los hiperparámetros que puede ajustar dependen del algoritmo que esté entrenando. Para obtener una lista de los hiperparámetros disponibles para un algoritmo SageMaker integrado, búsquelos en la sección Hiperparámetros, en el enlace del algoritmo, en Use Amazon Builted Algorithms or SageMaker Pre-Training Models.

Variables de entorno

SageMaker establece las siguientes variables de entorno en su contenedor:

  • TRAINING_JOB_NAME: se especifica en el parámetro TrainingJobName de la solicitud CreateTrainingJob.

  • TRAINING_JOB_ARN: es el nombre de recurso de Amazon (ARN) del trabajo de entrenamiento devuelto como TrainingJobArn en la respuesta CreateTrainingJob.

  • Todas las variables de entorno especificadas en el parámetro Environment de la solicitud CreateTrainingJob.

Configuración de datos de entrada

SageMaker hace que la información del canal de datos del InputDataConfig parámetro de su CreateTrainingJob solicitud esté disponible en el /opt/ml/input/config/inputdataconfig.json archivo de su contenedor de Docker.

Por ejemplo, supongamos que especifica tres canales de datos (train, evaluation y validation) en su solicitud. SageMaker proporciona el siguiente JSON:

{ "train" : {"ContentType": "trainingContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "evaluation" : {"ContentType": "evalContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "validation" : {"TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"} }
nota

SageMaker proporciona al contenedor solo información relevante sobre cada canal de datos (por ejemplo, el nombre del canal y el tipo de contenido), como se muestra en el ejemplo anterior. S3DistributionTypese configurará como FullyReplicated si especificara EFS o F SxLustre como fuentes de datos de entrada.

Datos de capacitación

El parámetro TrainingInputMode en la AlgorithmSpecification de la solicitud CreateTrainingJob especifica cómo se pone a disposición del contenedor el conjunto de datos de entrenamiento. Están disponibles los siguientes modos de entrada.

  • Modo File

    Si usa File mode como TrainingInputMode valor, SageMaker establece los siguientes parámetros en su contenedor.

    • El parámetro TrainingInputMode se escribe en inputdataconfig.json como “File”.

    • Su directorio de canales de datos e escribe en /opt/ml/input/data/channel_name.

    Si usa el File modo, SageMaker crea un directorio para cada canal. Por ejemplo, si tiene tres canales con el nombre trainingvalidation, ytesting, SageMaker crea los tres directorios siguientes en su contenedor de Docker:

    • /opt/ml/input/data/training

    • /opt/ml/input/data/validation

    • /opt/ml/input/data/testing

    El modo File también admite los siguientes orígenes de datos:

    • Amazon Simple Storage Service (Amazon S3)

    • Amazon Elastic File System (Amazon EFS)

    • Amazon FSx para Lustre

    nota

    Los canales que utilizan orígenes de datos del sistema de archivos como Amazon EFS y Amazon FSx deben utilizar el modo File. En este caso, la ruta del directorio proporcionada en el canal se monta en/opt/ml/input/data/channel_name.

  • Modo FastFile

    Si utilizas el FastFile modo como tuTrainingInputNodeParameter, SageMaker establece los siguientes parámetros en tu contenedor.

    • Al igual que en modo File, en el modo FastFile, el parámetro TrainingInputMode se escribe en inputdataconfig.json como “File”.

    • Su directorio de canales de datos e escribe en /opt/ml/input/data/channel_name.

    El modo FastFile admite los siguientes orígenes de datos:

    • Amazon S3

    Si utiliza el modo FastFile, el directorio de canales se monta con permiso de solo lectura.

    Históricamente, el modo File precedía al modo FastFile. Para garantizar la compatibilidad con versiones anteriores, los algoritmos que admiten el modo File también pueden funcionar sin problemas con el modo FastFile siempre que el parámetro TrainingInputMode esté configurado en File en inputdataconfig.json..

    nota

    Los canales que utilizan el modo FastFile deben utilizar un S3DataType “S3Prefix”.

    El modo FastFile presenta una vista de carpetas que utiliza la barra diagonal (/) como delimitador para agrupar los objetos de Amazon S3 en carpetas. Los prefijos S3Uri no deben corresponder a un nombre de carpeta parcial. Por ejemplo, si un conjunto de datos de Amazon S3 contiene s3://my-bucket/train-01/data.csv, ni s3://my-bucket/train ni s3://my-bucket/train-01 están permitidos como prefijos S3Uri.

    Se recomienda usar una barra diagonal final para definir el canal correspondiente a una carpeta. Por ejemplo, el canal s3://my-bucket/train-01/ para la carpeta train-01. Sin la barra diagonal final, el canal sería ambiguo si existiera otra carpeta s3://my-bucket/train-011/ o archivo s3://my-bucket/train-01.txt/.

  • Modo Pipe

    • Parámetro TrainingInputMode escrito en inputdataconfig.json: “Pipe”

    • Directorio de canales de datos en el contenedor de Docker: /opt/ml/input/data/channel_name_epoch_number

    • Fuentes de datos compatibles: Amazon S3

    Debe leer desde una canalización independiente para cada canal. Por ejemplo, si dispone de tres canales denominados training, validation y testing, tienes que realizar la lectura desde las siguientes canalizaciones:

    • /opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...

    • /opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...

    • /opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...

    Lea las canalizaciones de forma secuencial. Por ejemplo, si dispone de un canal denominado training, lea las canalizaciones en este orden:

    1. Ábrelo /opt/ml/input/data/training_0 en modo lectura y léelo hasta end-of-file (EOF) o, si has terminado con la primera época, cierra el archivo de canalización antes de tiempo.

    2. Después de cerrar el primer archivo de canalización, busque /opt/ml/input/data/training_1 y léalo hasta que haya completado la segunda fecha de inicio y así sucesivamente.

    Si el archivo de una fecha de inicio determinada no existe aún, es posible que tenga que volver a intentarlo con el código hasta que se cree la canalización. No hay restricción de secuenciación entre tipos de canales. Por ejemplo, puede leer varias fechas de inicio para el canal training, por ejemplo, y solo comenzar a leer el canal validation cuando esté preparado. También puede leerlos simultáneamente si su algoritmo lo requiere.

    Para ver un ejemplo de una libreta de Jupyter que muestra cómo usar el modo Pipe al traer tu propio contenedor, consulta Bring your own Pipe-mode algorithm to Amazon. SageMaker

SageMaker El entrenamiento con modelos admite depósitos de directorio S3 Express One Zone de alto rendimiento como ubicación de entrada de datos en los modos de archivo, rápido y canalizado. Para usar S3 Express One Zone, introduzca la ubicación del bucket del directorio S3 Express One Zone en lugar de un bucket de uso general de Amazon S3. Proporcione el ARN del rol de IAM con la política de permisos y control de acceso requerida. Consulte AmazonSageMakerFullAccesspolicy para obtener más información. Para obtener más información, consulte S3 Express One Zone.

Configuración de entrenamiento distribuido

Si está realizando una formación distribuida con varios contenedores, SageMaker hace que la información sobre todos los contenedores esté disponible en el /opt/ml/input/config/resourceconfig.json archivo.

Para permitir la comunicación entre contenedores, este archivo JSON contiene información de todos los contenedores. SageMaker hace que este archivo esté disponible tanto para los algoritmos como para File Pipe los algoritmos. El archivo proporciona la siguiente información:

  • current_host: el nombre del contenedor actual en la red del contenedor. Por ejemplo, algo-1. Los valores de host pueden cambiar en cualquier momento. No escriba código con valores específicos para esta variable.

  • hosts: la lista de nombres de todos los contenedores en la red de contenedores ordenada lexicográficamente. Por ejemplo, ["algo-1", "algo-2", "algo-3"] para un clúster de tres nodos. Los contenedores pueden utilizar estos nombres para dirigirse a otros contenedores en la red de contenedores. Los valores de host pueden cambiar en cualquier momento. No escriba código con valores específicos para estas variables.

  • network_interface_name: el nombre de la interfaz de red que se expone al contenedor. Por ejemplo, los contenedores que ejecuten Message Passing Interface (MPI) pueden usar esta información para establecer el nombre de la interfaz de red.

  • No utilice la información en /etc/hostname o /etc/hosts porque puede ser inexacta.

  • La información del nombre de host podría no estar disponible de inmediato en el contenedor de algoritmos. Recomendamos agregar una política de reintentos en las operaciones de resolución de nombres de host a medida que los nodos estén disponibles en el clúster.

A continuación se muestra un archivo de ejemplo en el nodo 1 en un clúster de tres nodos:

{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"], "network_interface_name":"eth1" }