Empezando con Hugging Face Transformers para IPUs con Optimum

'Comenzando con Hugging Face Transformers para IPUs con Optimum'

Los modelos Transformer han demostrado ser extremadamente eficientes en una amplia gama de tareas de aprendizaje automático, como el procesamiento de lenguaje natural, el procesamiento de audio y la visión por computadora. Sin embargo, la velocidad de predicción de estos modelos grandes puede hacerlos poco prácticos para casos de uso sensibles a la latencia, como aplicaciones de conversación o búsqueda. Además, optimizar su rendimiento en el mundo real requiere un tiempo considerable, esfuerzo y habilidades que están fuera del alcance de muchas empresas y organizaciones.

Afortunadamente, Hugging Face ha presentado Optimum, una biblioteca de código abierto que facilita en gran medida la reducción de la latencia de predicción de modelos Transformer en una variedad de plataformas de hardware. En esta publicación de blog, aprenderás cómo acelerar los modelos Transformer para la Unidad de Procesamiento de Inteligencia (IPU) de Graphcore, un procesador paralelo altamente flexible y fácil de usar diseñado desde cero para cargas de trabajo de IA.

Optimum se encuentra con Graphcore IPU

A través de esta asociación entre Graphcore y Hugging Face, ahora presentamos BERT como el primer modelo optimizado para IPU. Estaremos presentando muchos más de estos modelos optimizados para IPU en los próximos meses, abarcando aplicaciones como visión, habla, traducción y generación de texto.

Los ingenieros de Graphcore han implementado y optimizado BERT para nuestros sistemas IPU utilizando los transformadores de Hugging Face para ayudar a los desarrolladores a entrenar, ajustar y acelerar fácilmente sus modelos de vanguardia.

Comenzando con IPUs y Optimum

Usaremos BERT como ejemplo para ayudarte a comenzar a usar Optimum e IPUs.

En esta guía, utilizaremos un sistema IPU-POD16 en Graphcloud, la plataforma de aprendizaje automático basada en la nube de Graphcore, y seguiremos las instrucciones de configuración de PyTorch que se encuentran en Getting Started with Graphcloud.

El SDK Poplar de Graphcore ya está instalado en el servidor de Graphcloud. Si tienes una configuración diferente, puedes encontrar las instrucciones que se aplican a tu sistema en la Guía del usuario de PyTorch para IPU.

Configurar el entorno del SDK Poplar

Deberás ejecutar los siguientes comandos para configurar varias variables de entorno que habilitan las herramientas de Graphcore y las bibliotecas de Poplar. En el último sistema que ejecuta la versión 2.3 del SDK Poplar en Ubuntu 18.04, puedes encontrarlo en la carpeta /opt/gc/poplar_sdk-ubuntu_18_04-2.3.0+774-b47c577c2a/.

Debes ejecutar ambos scripts de habilitación para Poplar y PopART (Poplar Advanced Runtime) para usar PyTorch:

$ cd /opt/gc/poplar_sdk-ubuntu_18_04-2.3.0+774-b47c577c2a/
$ source poplar-ubuntu_18_04-2.3.0+774-b47c577c2a/enable.sh
$ source popart-ubuntu_18_04-2.3.0+774-b47c577c2a/enable.sh

Configurar PopTorch para la IPU

PopTorch es parte del SDK Poplar. Proporciona funciones que permiten que los modelos de PyTorch se ejecuten en la IPU con cambios mínimos en el código. Puedes crear y activar un entorno de PopTorch siguiendo la guía Setting up PyTorch for the IPU:

$ virtualenv -p python3 ~/workspace/poptorch_env
$ source ~/workspace/poptorch_env/bin/activate
$ pip3 install -U pip
$ pip3 install /opt/gc/poplar_sdk-ubuntu_18_04-2.3.0+774-b47c577c2a/poptorch-<sdk-version>.whl

Instalar Optimum Graphcore

Ahora que tu entorno tiene todas las bibliotecas de Graphcore Poplar y PopTorch disponibles, debes instalar el último paquete de 🤗 Optimum Graphcore en este entorno. Esta será la interfaz entre la biblioteca Transformers de 🤗 y las IPUs de Graphcore.

Asegúrate de que el entorno virtual de PopTorch que creaste en el paso anterior esté activado. Tu terminal debería tener un prefijo que muestre el nombre del entorno de poptorch como se muestra a continuación:

(poptorch_env) user@host:~/workspace/poptorch_env$ pip3 install optimum[graphcore] optuna

Clonar Repositorio Optimum Graphcore

El repositorio Optimum Graphcore contiene el código de muestra para utilizar modelos Optimum en IPU. Debes clonar el repositorio y cambiar el directorio a la carpeta example/question-answering que contiene la implementación de IPU de BERT.

$ git clone https://github.com/huggingface/optimum-graphcore.git
$ cd optimum-graphcore/examples/question-answering

Ahora, utilizaremos run_qa.py para ajustar finamente la implementación de IPU de BERT en el conjunto de datos SQUAD1.1.

Ejecutar un ejemplo para ajustar finamente BERT en SQuAD1.1

El script run_qa.py solo funciona con modelos que tienen un tokenizador rápido (respaldado por la biblioteca 🤗 Tokenizers), ya que utiliza características especiales de esos tokenizadores. Este es el caso de nuestro modelo BERT, y debes pasar su nombre como argumento de entrada a --model_name_or_path. Para utilizar IPU, Optimum buscará el archivo ipu_config.json en la ruta pasada al argumento --ipu_config_name.

$ python3 run_qa.py \
    --ipu_config_name=./ \
    --model_name_or_path bert-base-uncased \
    --dataset_name squad \
    --do_train \
    --do_eval \
    --output_dir output \
    --overwrite_output_dir \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
--learning_rate 6e-5 \
--num_train_epochs 3 \
--max_seq_length 384 \
--doc_stride 128 \
--seed 1984 \
--lr_scheduler_type linear \
--loss_scaling 64 \
--weight_decay 0.01 \
--warmup_ratio 0.1 \
--output_dir /tmp/debug_squad/

Un vistazo más de cerca a Optimum-Graphcore

Obteniendo los datos

Una forma muy sencilla de obtener conjuntos de datos es utilizar la biblioteca Hugging Face Datasets, que facilita a los desarrolladores descargar y compartir conjuntos de datos en el Hugging Face Hub. También tiene una versión preconstruida de datos basada en git y git-lfs, por lo que puedes iterar en versiones actualizadas de los datos simplemente apuntando al mismo repositorio.

Aquí, el conjunto de datos viene con los archivos de entrenamiento y validación, y las configuraciones del conjunto de datos ayudan a facilitar qué entradas utilizar en cada fase de ejecución del modelo. El argumento --dataset_name==squad apunta a SQuAD v1.1 en el Hugging Face Hub. También podrías proporcionar tus propios archivos de entrenamiento y evaluación en formato CSV/JSON/TXT siempre que sigan el mismo formato que el conjunto de datos SQuAD o algún otro conjunto de datos de preguntas y respuestas en la biblioteca Datasets.

Cargando el modelo preentrenado y el tokenizador

Para convertir palabras en tokens, este script requerirá un tokenizador rápido. Mostrará un error si no pasaste uno. A continuación, se muestra la lista de tokenizadores admitidos.

    # Verificación del tokenizador: este script requiere un tokenizador rápido.
    if not isinstance(tokenizer, PreTrainedTokenizerFast):
        raise ValueError("Este script de ejemplo solo funciona para modelos que tienen un tokenizador rápido. Consulta la tabla grande de modelos
            "en https://huggingface.co/transformers/index.html#supported-frameworks para encontrar los tipos de modelos que cumplen con este requisito"
                    )

El argumento “`–model_name_or_path==bert-base-uncased“ carga la implementación del modelo bert-base-uncased disponible en el Hugging Face Hub.

Desde la descripción del Hugging Face Hub:

” Modelo base BERT (sin mayúsculas): Modelo preentrenado en inglés utilizando un objetivo de modelado de lenguaje enmascarado (MLM). Se introdujo en este documento y se lanzó por primera vez en este repositorio. Este modelo no distingue entre inglés y English. “

Entrenamiento y Validación

Ahora puedes utilizar la clase IPUTrainer disponible en Optimum para aprovechar todo el conjunto de software y hardware de Graphcore, y entrenar tus modelos en IPUs con cambios mínimos en el código. Gracias a Optimum, puedes conectar y usar hardware de última generación para entrenar tus modelos de última generación.

Para entrenar y validar el modelo BERT, puedes pasar los argumentos --do_train y --do_eval al script run_qa.py. Después de ejecutar el script con los hyperparámetros anteriores, deberías ver los siguientes resultados de entrenamiento y validación:

"epoch": 3.0,
"train_loss": 0.9465060763888888,
"train_runtime": 368.4015,
"train_samples": 88524,
"train_samples_per_second": 720.877,
"train_steps_per_second": 2.809

El paso de validación produce los siguientes resultados:
***** métricas de evaluación *****
  epoch            =     3.0
  eval_exact_match = 80.6623
  eval_f1          = 88.2757
  eval_samples     =   10784

Puedes ver el resto de la implementación de BERT en IPU en el Optimum-Graphcore: Ejemplos de SQuAD.

Recursos para Transformers Óptimos en Sistemas IPU

  • Optimum-Graphcore: Ejemplos de SQuAD
  • Modelos y Conjuntos de Datos de Hugging Face de Graphcore
  • Tutorial en GitHub: Fine-tuning de BERT en IPU usando Hugging Face transformers
  • Portal de Desarrolladores de Graphcore
  • GitHub de Graphcore
  • Contenedores de SDK de Graphcore en Docker Hub

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Robot Sudoroso Puede Ayudar a los Humanos a Comprender el Impacto del Calor Abrasador

Un investigador de la Universidad Estatal de Arizona describió al robot Advanced Newton Dynamic Instrument como 'el p...

Inteligencia Artificial

Aprendizaje de Diferencia Temporal y la importancia de la exploración Una guía ilustrada

Recientemente, los algoritmos de Aprendizaje por Reforzamiento (RL) han ganado mucha atención al resolver problemas d...

Inteligencia Artificial

Descifrando el comportamiento colectivo Cómo la inferencia bayesiana activa impulsa los movimientos naturales de los grupos de animales

El fenómeno del movimiento colectivo en animales observado en actividades como los enjambres de langostas, los cardúm...

Inteligencia Artificial

Protección de datos fundamentales para la aceleración de LLM empresarial con Protopia AI

La publicación describe cómo puedes superar los desafíos de retener la propiedad de los datos y preservar la privacid...