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.
- Clasificación de Opiniones con Kili y HuggingFace AutoTrain
- Muestra tus proyectos en Espacios utilizando Gradio
- Almacenando tus Modelos y Conjuntos de Datos en Hugging Face Spaces usando Streamlit
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Afinando CLIP con imágenes y subtítulos de Teledetección (Satélite)
- Modelos de Lenguaje Grandes ¿Una Nueva Ley de Moore?
- Escalando la inferencia del modelo similar a BERT en CPU modernas – Parte 2
- Acelerando el ajuste fino distribuido de PyTorch con tecnologías de Intel
- Presentando la Herramienta de Medición de Datos una herramienta interactiva para analizar conjuntos de datos.
- Presentamos Snowball Fight ☃️, nuestro primer entorno de ML-Agents.
- ¡Gradio se une a Hugging Face!