TensorFlow - Amazon SageMaker AI

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.

TensorFlow

Lleve su propio modelo de TensorFlow a SageMaker AI y ejecute el trabajo de entrenamiento con el Compilador de entrenamiento de SageMaker.

Modelos de TensorFlow

El compilador de entrenamiento de Sagemaker optimiza automáticamente las cargas de trabajo de entrenamiento de modelos que se crean sobre la API nativa de TensorFlow o la API de alto nivel de Keras.

sugerencia

Para preprocesar el conjunto de datos de entrada, asegúrese de utilizar una forma de entrada estática. La forma de entrada dinámica puede iniciar la recompilación del modelo y aumentar el tiempo total de entrenamiento.

Uso de Keras (recomendado)

Para obtener la mejor aceleración del compilador, recomendamos usar modelos que sean subclases de TensorFlow Keras (tf.Keras.Model).

Para el entrenamiento con una sola GPU

No es necesario realizar ningún cambio adicional en el script de entrenamiento.

Sin Keras

El compilador de entrenamiento de Sagemaker no admite la ejecución intensiva en TensorFlow. En consecuencia, debe encapsular su modelo y sus bucles de entrenamiento con el decorador de función de TensorFlow (@tf.function) para aprovechar la aceleración del compilador.

El compilador de entrenamiento de Sagemaker realiza una optimización a nivel de gráfico y usa el decorador para asegurarse de que las funciones de TensorFlow estén configuradas para ejecutarse en modo gráfico.

Para el entrenamiento con una sola GPU

TensorFlow 2.0 o posterior tiene activada la ejecución rápida de forma predeterminada, por lo que debe añadir el decorador de @tf.function delante de cada función que utilice para construir un modelo de TensorFlow.

Modelos de TensorFlow con transformadores Hugging Face

Los modelos de TensorFlow con Hugging Face Transformers se basan en la API tf.Keras.Model de TensorFlow. Hugging Face Transformers también ofrece clases de modelos previamente entrenadas para TensorFlow para ayudar a reducir el esfuerzo de configurar modelos de procesamiento de lenguaje natural (NLP). Tras crear su propio script de entrenamiento mediante la biblioteca de Transformers, puede ejecutar el script de entrenamiento mediante el estimador HuggingFace SageMaker AI con la clase de configuración del Compilador de entrenamiento de SageMaker, tal y como se muestra en el tema anterior en Ejecutar trabajos de entrenamiento de TensorFlow con el Compilador de entrenamiento de SageMaker.

El compilador de entrenamiento de Sagemaker optimiza automáticamente las cargas de trabajo de entrenamiento de modelos que se crean sobre la API nativa de TensorFlow o la API de Keras de alto nivel, como los modelos de transformador de TensorFlow.

sugerencia

Cuando cree un tokenizador para un modelo de PNL con Transformers en su script de entrenamiento, asegúrese 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.

Uso de Keras

Para obtener la mejor aceleración del compilador, recomendamos usar modelos que sean subclases de TensorFlow Keras (tf.Keras.Model). Como se indica en la página Quick tour de la documentación de Hugging Face Transformers, puede usar los modelos como modelos Keras de TensorFlow normales.

Para el entrenamiento con una sola GPU

No es necesario realizar ningún cambio adicional en el script de entrenamiento.

Para entrenamiento distribuido

La aceleración del compilador de entrenamiento de Sagemaker funciona de forma transparente para cargas de trabajo con varias GPU cuando el modelo se construye y entrena utilizando las API de Keras dentro del ámbito de la llamada de tf.distribute.Strategy.scope().

  1. Elija la estrategia de entrenamiento distribuida adecuada.

    1. En el caso de varias GPU de un solo nodo, utilíice tf.distribute.MirroredStrategy para establecer la estrategia.

      strategy = tf.distribute.MirroredStrategy()
    2. En caso de varios nodos y varias GPU, agregue el siguiente código para configurar correctamente la configuración de entrenamiento distribuido de TensorFlow antes de crear la estrategia.

      def set_sm_dist_config(): DEFAULT_PORT = '8890' DEFAULT_CONFIG_FILE = '/opt/ml/input/config/resourceconfig.json' with open(DEFAULT_CONFIG_FILE) as f: config = json.loads(f.read()) current_host = config['current_host'] tf_config = { 'cluster': { 'worker': [] }, 'task': {'type': 'worker', 'index': -1} } for i, host in enumerate(config['hosts']): tf_config['cluster']['worker'].append("%s:%s" % (host, DEFAULT_PORT)) if current_host == host: tf_config['task']['index'] = i os.environ['TF_CONFIG'] = json.dumps(tf_config) set_sm_dist_config()

      Utilice tf.distribute.MultiWorkerMirroredStrategy para establecer la estrategia.

      strategy = tf.distribute.MultiWorkerMirroredStrategy()
  2. Usando la estrategia que elija, encapsule el modelo.

    with strategy.scope(): # create a model and do fit

Sin Keras

Si quiere crear modelos personalizados con bucles de entrenamiento personalizados con TensorFlow sin Keras, debe encapsular el modelo y el ciclo de entrenamiento con el decorador de funciones de TensorFlow (@tf.function) para aprovechar la aceleración del compilador.

El compilador de entrenamiento de Sagemaker realiza una optimización a nivel de gráfico y usa el decorador para asegurarse de que las funciones de TensorFlow estén configuradas para ejecutarse en modo gráfico.

Para el entrenamiento con una sola GPU

TensorFlow 2.0 o posterior tiene activada la ejecución rápida de forma predeterminada, por lo que debe añadir el decorador de @tf.function delante de cada función que utilice para construir un modelo de TensorFlow.

Para entrenamiento distribuido

Además de los cambios necesarios para usar Keras para el entrenamiento distribuido, debe asegurarse de que las funciones que se ejecutarán en cada GPU estén anotadas con @tf.function, mientras que las funciones de comunicación entre GPU no estén anotadas. El ejemplo deñ código de entrenamiento debería ser como el siguiente:

@tf.function() def compiled_step(inputs, outputs): with tf.GradientTape() as tape: pred=model(inputs, training=True) total_loss=loss_object(outputs, pred)/args.batch_size gradients=tape.gradient(total_loss, model.trainable_variables) return total_loss, pred, gradients def train_step(inputs, outputs): total_loss, pred, gradients=compiled_step(inputs, outputs) if args.weight_decay > 0.: gradients=[g+v*args.weight_decay for g,v in zip(gradients, model.trainable_variables)] optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss.update_state(total_loss) train_accuracy.update_state(outputs, pred) @tf.function() def train_step_dist(inputs, outputs): strategy.run(train_step, args= (inputs, outputs))

Tenga en cuenta que esta instrucción se puede utilizar tanto para varias GPU de un solo nodo como para varias GPU de varios nodos.