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
Utilice su propio TensorFlow modelo y ejecute el trabajo de formación con SageMaker Training Compiler. SageMaker
TensorFlow Modelos
SageMaker Training Compiler optimiza automáticamente las cargas de trabajo de entrenamiento de modelos que se crean sobre la TensorFlow API nativa o la API de Keras de alto nivel.
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 el entrenamiento con una sola GPU
No es necesario realizar ningún cambio adicional en el script de entrenamiento.
Sin Keras
SageMaker Training Compiler no admite la ejecución intensiva en. TensorFlow En consecuencia, deberías combinar tu modelo y tus ciclos de entrenamiento con la TensorFlow función decorator (@tf.function
) para aprovechar la aceleración del compilador.
Para el entrenamiento con una sola GPU
TensorFlow La versión 2.0 o posterior tiene activada la ejecución rápida de forma predeterminada, por lo que debes añadir el @tf.function
decorador delante de cada función que utilices para construir un modelo. TensorFlow
TensorFlow Modelos con Hugging Face Transformers
TensorFlow los modelos con Hugging FaceHuggingFace
estimador de la clase de configuración SageMaker Training Compiler, tal y como se muestra en el tema anterior en. Ejecute trabajos TensorFlow de entrenamiento con SageMaker Training Compiler
SageMaker Training Compiler optimiza automáticamente las cargas de trabajo de entrenamiento de modelos que se crean sobre la TensorFlow API nativa o la API de Keras de alto nivel, como los modelos de transformadores. 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 Keras (tf.Keras.Model). TensorFlow
Para el entrenamiento con una sola GPU
No es necesario realizar ningún cambio adicional en el script de entrenamiento.
Para entrenamiento distribuido
SageMaker La aceleración del compilador de entrenamiento 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 demanda. 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.MirroredStrategy
para establecer la estrategia.strategy = tf.distribute.MirroredStrategy()
-
En el caso de varios nodos y varias GPU, añade el siguiente código para configurar correctamente la configuración de entrenamiento TensorFlow distribuido 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()
-
-
Usando la estrategia que elija, encapsule el modelo.
with strategy.scope(): # create a model and do fit
Sin Keras
Si quieres crear modelos personalizados con bucles de entrenamiento personalizados TensorFlow sin usar Keras, deberías combinar el modelo y el ciclo de entrenamiento con la TensorFlow función decorator (@tf.function
) para aprovechar la aceleración del compilador.
SageMaker Training Compiler realiza una optimización a nivel de gráfico y utiliza el decorador para asegurarse de que las TensorFlow funciones estén configuradas para ejecutarse en modo gráfico.
Para el entrenamiento con una sola GPU
TensorFlow La versión 2.0 o posterior tiene activada la ejecución rápida de forma predeterminada, por lo que debes añadir el @tf.function
decorador delante de cada función que utilices para construir un modelo. 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.