SageMaker Recomendaciones y consideraciones sobre Training Compiler - 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.

SageMaker Recomendaciones y consideraciones sobre Training Compiler

importante

Amazon Web Services (AWS) anuncia que no habrá nuevas versiones o versiones de SageMaker Training Compiler. Puede seguir utilizando SageMaker Training Compiler a través de los AWS Deep Learning Containers (DLCs) existentes para SageMaker formación. Es importante tener en cuenta que, si bien los existentes DLCs permanecen accesibles, ya no recibirán parches ni actualizaciones de ellos AWS, de acuerdo con la Política de soporte de AWS Deep Learning Containers Framework.

Revise las siguientes prácticas recomendadas y consideraciones al utilizar SageMaker Training Compiler.

Prácticas recomendadas

Utilice las siguientes pautas para lograr los mejores resultados cuando ejecute trabajos de formación con Training SageMaker Compiler.

Prácticas recomendadas generales
  • Asegúrese de utilizar una de Tipos de instancias admitidos y Modelos probados.

  • Cuando crees un tokenizador para un NLP modelo con la biblioteca Hugging Face Transformers de tu guion de entrenamiento, asegúrate de utilizar una forma de tensor de entrada estática especificando. padding='max_length' No utilice padding='longest' porque rellenar la secuencia más larga del lote puede cambiar la forma del tensor de cada lote de entrenamiento. La forma de entrada dinámica puede iniciar la recompilación del modelo y aumentar el tiempo total de entrenamiento. Para obtener más información sobre las opciones de relleno de los tokenizadores de Transformers, consulte Padding and truncation en la documentación de Hugging Face Transformers.

  • Mida el uso de la GPU memoria para asegurarse de que utiliza el tamaño de lote máximo que cabe en la memoria. GPU Amazon SageMaker Training Compiler reduce la huella de memoria del modelo durante el entrenamiento, lo que normalmente le permite incluir una GPU memoria más grandebatch_size. El uso de un tamaño mayor se batch_size traduce en una mejor GPU utilización y reduce el tiempo total de entrenamiento.

    Al ajustar el tamaño del lote, también hay que ajustar learning_rate adecuadamente. Por ejemplo, si aumentaste el tamaño del lote en un factor de k, tendrá que ajustar learning_rate linealmente (multiplicación simple por k) o multiplicar por la raíz cuadrada de k. Esto es para lograr un comportamiento de convergencia igual o similar en el reducido tiempo de entrenamiento. Para obtener una referencia sobre los modelos batch_size probados para los más populares, consulte Modelos probados.

  • Para depurar el trabajo de entrenamiento acelerado por el compilador, active la marca debug en el parámetro compiler_config. Esto permite SageMaker colocar los registros de depuración en los registros de trabajos de SageMaker formación.

    huggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )

    Tenga en cuenta que si habilita la depuración completa del trabajo de entrenamiento con el compilador, esto podría suponer una sobrecarga.

Mejores prácticas para PyTorch
  • Si traes un PyTorch modelo y quieres comprobarlo, asegúrate de utilizar la función de guardado XLA de modelos de PyTorch/para comprobar correctamente tu modelo. Para obtener más información sobre la función, consulta torch_xla.core.xla_model.savela documentación PyTorch relativa a los XLA dispositivos.

    Para obtener información sobre cómo añadir las modificaciones al PyTorch script, consulteModelos de idiomas de gran tamaño que se utilizan PyTorch directamente (sin la API Hugging Face Transformers Trainer).

    Para obtener más información sobre la aplicación real del uso de la función de guardar modelos, consulte el blog de formación Checkpoint Writing and Loading in the Hugging Face en PyTorch/XLATPUs: Faster and cheaper.

  • Para lograr el tiempo de entrenamiento más óptimo para un entrenamiento distribuido, tenga en cuenta lo siguiente.

    • Usa instancias con varias instancias GPUs en lugar de usar instancias de una sola GPU. Por ejemplo, una sola instancia ml.p3dn.24xlarge tiene un tiempo de entrenamiento más rápido en comparación con 8 instancias ml.p3.2xlarge.

    • Usa instancias con EFA soporte, como ml.p3dn.24xlarge yml.p4d.24xlarge. Estos tipos de instancias tienen una velocidad de red acelerada y reducen el tiempo de entrenamiento.

    • Ajuste el parámetro preprocessing_num_workers de los conjuntos de datos para que el entrenamiento del modelo no se retrase debido a la lentitud del preprocesamiento.

Consideraciones

Tenga en cuenta lo siguiente cuando utilice SageMaker Training Compiler.

Degradación del rendimiento debido al registro, los puntos de control y la creación de perfiles

  • Evite registrar, comprobar y perfilar los tensores del modelo que conducen a evaluaciones explícitas. Para entender qué es una evaluación explícita, considere el siguiente ejemplo de compilación de código.

    a = b+c e = a+d

    Un compilador interpreta el código de la siguiente manera y reduce el consumo de memoria de la variable a:

    e = b+c+d

    Consideremos ahora el siguiente caso en el que se cambia el código para añadir una función de impresión para la variable a.

    a = b+c e = a+d print(a)

    El compilador realiza una evaluación explícita de la variable a de la siguiente manera.

    e = b+c+d a = b+c # Explicit evaluation print(a)

    Por ejemplo PyTorch, evite usar torch.tensor.items (), ya que podría introducir evaluaciones explícitas. En el aprendizaje profundo, estas evaluaciones explícitas pueden provocar una sobrecarga porque rompen las operaciones combinadas en un gráfico de compilación de un modelo y conducen al recálculo de los tensores.

    Si quieres seguir evaluando periódicamente el modelo durante el entrenamiento mientras usas SageMaker Training Compiler, te recomendamos registrarlo y comprobarlo con una frecuencia menor para reducir la sobrecarga que supone realizar evaluaciones explícitas. Por ejemplo, registre cada 10 fechas de inicio en lugar de cada fecha de inicio.

  • La compilación de gráficos se ejecuta durante los primeros pasos del entrenamiento. Como resultado, se espera que los primeros pasos sean excepcionalmente lentos. Sin embargo, se trata de un coste de compilación único y se puede amortizar mediante una entrenamiento de mayor duración, ya que la compilación agiliza los pasos futuros. La sobrecarga de compilación inicial depende del tamaño del modelo, el tamaño de los tensores de entrada y la distribución de las formas de los tensores de entrada.

Uso incorrecto de PyTorch/XLAAPIscuando se usa directamente PyTorch

PyTorch/XLAdefine un conjunto de APIs para reemplazar parte de la PyTorch formación existenteAPIs. Si no se utilizan adecuadamente, la PyTorch formación fracasa.

  • Uno de los errores más comunes a la hora de compilar un PyTorch modelo se debe a un tipo de dispositivo incorrecto para los operadores y los tensores. Para compilar correctamente un PyTorch modelo, asegúrese de usar XLA devices (xm.xla_device()) en lugar de usar CUDA o mezclar CUDA dispositivos y XLA dispositivos.

  • mark_step()es una barrera solo paraXLA. Si no se configura correctamente, se interrumpe un trabajo de entrenamiento.

  • PyTorch/XLAproporciona formación distribuida adicionalAPIs. Si no se programa APIs correctamente, los gradientes se recopilan de forma incorrecta, lo que provoca un fallo de convergencia en el entrenamiento.

Para configurar correctamente su PyTorch script y evitar los API usos incorrectos antes mencionados, consulteModelos de idiomas de gran tamaño que se utilizan PyTorch directamente (sin la API Hugging Face Transformers Trainer).