Empezando con Transformers en Habana Gaudi

Comenzando con Transformers en Habana Gaudí.

Hace un par de semanas, tuvimos el placer de anunciar que Habana Labs y Hugging Face se asociarían para acelerar el entrenamiento de modelos Transformer.

Los aceleradores Habana Gaudi ofrecen hasta un 40% mejor rendimiento en relación calidad-precio para el entrenamiento de modelos de aprendizaje automático en comparación con las últimas instancias basadas en GPU de Amazon EC2. Estamos muy emocionados de llevar estas ventajas en rendimiento y precio a los Transformers 🚀

En esta publicación práctica, te mostraré cómo configurar rápidamente una instancia de Habana Gaudi en Amazon Web Services y luego ajustar un modelo BERT para la clasificación de texto. Como de costumbre, se proporciona todo el código para que puedas reutilizarlo en tus proyectos.

¡Comencemos!

Configuración de una instancia de Habana Gaudi en AWS

La forma más sencilla de trabajar con los aceleradores Habana Gaudi es lanzar una instancia Amazon EC2 DL1. Estas instancias están equipadas con 8 procesadores Habana Gaudi que se pueden poner fácilmente a trabajar gracias a la imagen de máquina de aprendizaje profundo de Habana (AMI) de Amazon. Esta AMI viene preinstalada con el kit de desarrollo de software (SDK) de Habana SynapseAI® y las herramientas necesarias para ejecutar contenedores Docker acelerados por Gaudi. Si deseas utilizar otras AMI o contenedores, las instrucciones están disponibles en la documentación de Habana.

Comenzando desde la consola de EC2 en la región us-east-1, primero hago clic en Lanzar una instancia y defino un nombre para la instancia (“habana-demo-julsimon”).

Luego, busco en el Marketplace de Amazon las AMI de Habana.

Selecciono la AMI base de aprendizaje profundo de Habana (Ubuntu 20.04).

A continuación, selecciono el tamaño de instancia dl1.24xlarge (el único tamaño disponible).

Luego, selecciono el par de claves que utilizaré para conectarme a la instancia con ssh. Si no tienes un par de claves, puedes crear uno en su lugar.

Como siguiente paso, me aseguro de que la instancia permita el tráfico entrante de ssh. No restrinjo la dirección de origen por simplicidad, pero definitivamente deberías hacerlo en tu cuenta.

Por defecto, esta AMI iniciará una instancia con 8 GB de almacenamiento Amazon EBS, lo cual no será suficiente aquí. Aumento el almacenamiento a 50 GB.

A continuación, asigno un rol de IAM de Amazon a la instancia. En la vida real, este rol debería tener el conjunto mínimo de permisos requeridos para ejecutar tu trabajo de entrenamiento, como la capacidad de leer datos de uno de tus buckets de Amazon S3. Este rol no es necesario aquí, ya que el conjunto de datos se descargará desde el repositorio de Hugging Face. Si no estás familiarizado con IAM, te recomiendo leer la documentación de Introducción.

Luego, solicito a EC2 que provisione mi instancia como una instancia Spot, una excelente manera de reducir el costo de $13.11 por hora.

Finalmente, inicio la instancia. Un par de minutos después, la instancia estará lista y podré conectarme a ella con ssh. Los usuarios de Windows pueden hacer lo mismo con PuTTY siguiendo la documentación.

ssh -i ~/.ssh/julsimon-keypair.pem [email protected]

En esta instancia, el último paso de configuración es descargar el contenedor de Habana para PyTorch, que es el framework que utilizaré para ajustar mi modelo. Puedes encontrar información sobre otros contenedores preconstruidos y cómo construir los tuyos propios en la documentación de Habana.

docker pull \
vault.habana.ai/gaudi-docker/1.5.0/ubuntu20.04/habanalabs/pytorch-installer-1.11.0:1.5.0-610

Una vez que la imagen se ha extraído en la instancia, la ejecuto en modo interactivo.

docker run -it \
--runtime=habana \
-e HABANA_VISIBLE_DEVICES=all \
-e OMPI_MCA_btl_vader_single_copy_mechanism=none \
--cap-add=sys_nice \
--net=host \
--ipc=host vault.habana.ai/gaudi-docker/1.5.0/ubuntu20.04/habanalabs/pytorch-installer-1.11.0:1.5.0-610

Ahora estoy listo para ajustar mi modelo.

Ajuste fino de un modelo de clasificación de texto en Habana Gaudi

Primero clono el repositorio de Optimum Habana dentro del contenedor que acabo de iniciar.

git clone https://github.com/huggingface/optimum-habana.git

Luego, instalo el paquete Optimum Habana desde la fuente.

cd optimum-habana
pip install .

A continuación, me dirijo al subdirectorio que contiene el ejemplo de clasificación de texto e instalo los paquetes de Python requeridos.

cd examples/text-classification
pip install -r requirements.txt

Ahora puedo lanzar el trabajo de entrenamiento, que descarga el modelo bert-large-uncased-whole-word-masking del repositorio de Hugging Face y lo ajusta en la tarea MRPC del benchmark GLUE.

Tenga en cuenta que estoy obteniendo la configuración de Habana Gaudi para BERT desde el repositorio de Hugging Face, pero también puede usar la suya propia. Además, se admiten otros modelos populares y puede encontrar sus archivos de configuración en la organización de Habana.

python run_glue.py \
--model_name_or_path bert-large-uncased-whole-word-masking \
--gaudi_config_name Habana/bert-large-uncased-whole-word-masking \
--task_name mrpc \
--do_train \
--do_eval \
--per_device_train_batch_size 32 \
--learning_rate 3e-5 \
--num_train_epochs 3 \
--max_seq_length 128 \
--use_habana \
--use_lazy_mode \
--output_dir ./output/mrpc/

Después de 2 minutos y 12 segundos, el trabajo se completa y logra una excelente puntuación F1 de 0.9181, que podría mejorar con más épocas.

***** métricas de entrenamiento *****
  epoch                    =        3.0
  train_loss               =      0.371
  train_runtime            = 0:02:12.85
  train_samples            =       3668
  train_samples_per_second =     82.824
  train_steps_per_second   =      2.597

***** métricas de evaluación *****
  epoch                   =        3.0
  eval_accuracy           =     0.8505
  eval_combined_score     =     0.8736
  eval_f1                 =     0.8968
  eval_loss               =      0.385
  eval_runtime            = 0:00:06.45
  eval_samples            =        408
  eval_samples_per_second =     63.206
  eval_steps_per_second   =      7.901

Por último, pero no menos importante, termino la instancia de EC2 para evitar cargos innecesarios. Al ver el Resumen de Ahorros en la consola de EC2, veo que ahorré un 70% gracias a las Instancias Spot, pagando solo $3.93 por hora en lugar de $13.11.

Como puedes ver, la combinación de Transformers, Habana Gaudi e instancias de AWS es poderosa, sencilla y rentable. Pruébalo y dinos qué piensas. Definitivamente, agradecemos tus preguntas y comentarios en el Foro de Hugging Face.


Ponte en contacto con Habana para obtener más información sobre cómo entrenar modelos de Hugging Face en procesadores Gaudi.