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 TransformersHuggingFace 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
Uso de Keras
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.
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()
-
Elija la estrategia de entrenamiento distribuida adecuada.
-
En el caso de varias GPU de un solo nodo, utilíice
tf.distribute.MirroredStrategypara establecer la estrategia.strategy = tf.distribute.MirroredStrategy() -
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.MultiWorkerMirroredStrategypara establecer la estrategia.strategy = tf.distribute.MultiWorkerMirroredStrategy()
-
-
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.