Ejecutando Falcon en una CPU con Hugging Face Pipelines.

Running Falcon on a CPU with Hugging Face Pipelines.

Fuente de imagen

Aprenda cómo ejecutar inferencias con Falcon de 7 mil millones y 40 mil millones en una CPU Xeon de cuarta generación con Hugging Face Pipelines

Es fácil suponer que la única forma de realizar inferencias con LLM que están compuestos por miles de millones de parámetros es con una GPU. Si bien es cierto que las GPU proporcionan aceleraciones significativas sobre las CPU en el aprendizaje profundo, el hardware siempre debe seleccionarse en función del caso de uso. Por ejemplo, suponga que sus usuarios finales solo necesitan una respuesta cada 30 segundos. En ese caso, hay un rendimiento decreciente si está luchando (financiera y logísticamente) para reservar aceleradores que le den respuestas en < 30 segundos.

Todo esto se remonta a un principio fundamental, siendo un “Desarrollador de IA consciente de la computación”: trabajar hacia atrás desde los objetivos de su aplicación hasta el software y hardware adecuados para usar. Imagine comenzar un proyecto en casa como colgar un nuevo estante y usar directamente un mazo sin siquiera considerar que un martillo más pequeño y preciso sería la herramienta adecuada para el proyecto.

En este artículo, realizaremos inferencias con Falcon-7b y Falcon-40b en una CPU Xeon de cuarta generación utilizando Hugging Face Pipelines. Falcon-40b es un modelo exclusivo de decodificador de 40 mil millones de parámetros desarrollado por el Instituto de Innovación Tecnológica (TII) en Abu Dhabi. Supera a varios modelos como LLaMA, StableLM, RedPajama y MPT, utilizando el método FlashAttention para lograr inferencias más rápidas y optimizadas, lo que resulta en mejoras significativas de velocidad en diferentes tareas.

Configuración del entorno

Una vez que haya accedido a su instancia de cómputo Xeon, debe asegurar suficiente almacenamiento para descargar los puntos de control y fragmentos de modelo para Falcon. Recomendamos asegurar al menos 150 GB de almacenamiento si desea probar ambas versiones de Falcon, 7 mil millones y 40 mil millones. También debe proporcionar suficiente RAM para cargar el modelo en la memoria y núcleos para ejecutar la carga de trabajo de manera eficiente. Ejecutamos con éxito las versiones de Falcon de 7 mil millones y 40 mil millones en una VM de 32 núcleos y 64 GB de RAM (Xeon de cuarta generación) en la nube de Intel Developer. Sin embargo, esta es solo una de las muchas especificaciones de cómputo válidas y es probable que las pruebas adicionales mejoren el rendimiento.

  1. Instale miniconda. Puede encontrar la última versión en su sitio web: https://docs.conda.io/en/latest/miniconda.html
  2. Cree un entorno conda conda create -n falcon python==3.8.10
  3. Instale las dependencias pip install -r requirements.txt. Puede encontrar el contenido del archivo requirements.txt a continuación.
transformers==4.29.2torch==2.0.1accelerate==0.19.0einops==0.6.1# requirements.txt

4. Active su entorno conda conda activate falcon

Ejecutando Falcon con Hugging Face Pipelines

Las pipelines de Hugging Face proporcionan una interfaz simple y de alto nivel para aplicar modelos pre-entrenados a varias tareas de procesamiento de lenguaje natural (PLN), como clasificación de texto, reconocimiento de entidades nombradas, generación de texto y más. Estas pipelines abstraen las complejidades de la carga del modelo, la tokenización y la inferencia, lo que permite a los usuarios utilizar rápidamente modelos de última generación para tareas de PLN con solo unas pocas líneas de código.

A continuación, se muestra un script conveniente que puede ejecutar en cmd/terminal para experimentar con los modelos Falcon pre-entrenados sin procesar.

from transformers import AutoTokenizer, AutoModelForCausalLMimport transformersimport torchimport argparseimport timedef main(FLAGS):        model = f"tiiuae/falcon-{FLAGS.falcon_version}"            tokenizer = AutoTokenizer.from_pretrained(model, trust_remote_code=True)                generator = transformers.pipeline(        "text-generation",        model=model,        tokenizer=tokenizer,        torch_dtype=torch.bfloat16,        trust_remote_code=True,        device_map="auto",    )    user_input = "start"    while user_input != "stop":        user_input = input(f"Provide Input to {model} parameter Falcon (not tuned): ")                start = time.time()        if user_input != "stop":            sequences = generator(             f""" {user_input}""",            max_length=FLAGS.max_length,            do_sample=False,            top_k=FLAGS.top_k,            num_return_sequences=1,            eos_token_id=tokenizer.eos_token_id,)        inference_time = time.time() - start                for seq in sequences:         print(f"Result: {seq['generated_text']}")                 print(f'Total Inference Time: {inference_time} seconds')if __name__ == "__main__":    parser = argparse.ArgumentParser()        parser.add_argument('-fv',                        '--falcon_version',                        type=str,                        default="7b",                        help="select 7b or 40b version of falcon")    parser.add_argument('-ml',                        '--max_length',                        type=int,                        default="25",                        help="used to control the maximum length of the generated text in text generation tasks")    parser.add_argument('-tk',                        '--top_k',                        type=int,                        default="5",                        help="specifies the number of highest probability tokens to consider at each step")    parser.add_argument('-it',                        '--inference_time',                        type=bool,                        default=True,                        help="specifies the number of highest probability tokens to consider at each step")        FLAGS = parser.parse_args()    main(FLAGS)# falcon-demo.py

Para ejecutar el script (falcon-demo.py) es necesario proporcionar el script y varios parámetros:

python falcon-demo.py --falcon_version "7b" --max_length 25 --top_k 5

El script tiene 3 parámetros opcionales para ayudar a controlar la ejecución del pipeline de Hugging Face:

  • falcon_version: te permite seleccionar entre las versiones de 7 billones o 40 billones de parámetros de Falcon.
  • max_length: se utiliza para controlar la longitud máxima del texto generado en tareas de generación de texto.
  • top_k: especifica el número de tokens con mayor probabilidad a considerar en cada paso.

Puedes modificar el script para agregar/quitar/editar los parámetros. ¡Lo importante es que ahora tienes acceso a uno de los modelos de código abierto más potentes jamás lanzados!

Jugando con Raw Falcon

Raw Falcon no está ajustado para ningún propósito en particular, por lo que probablemente generará tonterías (Figura 2). Aun así, esto no nos impide hacer algunas preguntas para probarlo. Cuando el script termine de descargar el modelo y crear el pipeline, se te pedirá que proporciones una entrada al modelo. Cuando estés listo para detenerte, escribe “stop”.

Figura 2. Prueba de inferencia de la interfaz de línea de comandos del modelo Falcon de 7 billones de parámetros en Intel 4th Gen Xeon con los parámetros de script predeterminados - Imagen de Autor

El script imprime el tiempo de inferencia para darte una idea de cuánto tiempo tarda el modelo en responder en función de los parámetros actuales proporcionados al pipeline y la computación que has disponible para esta carga de trabajo.

Consejo: Puedes alterar significativamente el tiempo de inferencia ajustando el parámetro max_length.

Este tutorial está diseñado para compartir cómo ejecutar Falcon en una CPU con Hugging Face Transformers, pero no explora opciones para optimizaciones adicionales en las CPUs de Intel. Bibliotecas como la Extensión de Intel para Transformers ofrecen capacidades para acelerar modelos basados en Transformers mediante técnicas como la cuantización, destilación y poda. La cuantización es una técnica de compresión de modelos ampliamente utilizada que puede reducir el tamaño del modelo y mejorar la latencia de la inferencia, este sería un valioso siguiente paso para explorar la mejora del rendimiento de este flujo de trabajo.

Resumen y Discusión

Los LLMs fundamentales crean oportunidades para que los desarrolladores construyan emocionantes aplicaciones de IA. Sin embargo, la mitad de la batalla suele ser encontrar un modelo con la licencia correcta que permita derivados comerciales. Falcon presenta una rara oportunidad porque intersecciona el rendimiento y la flexibilidad de la licencia.

Aunque Falcon es bastante democratizado desde una perspectiva de código abierto, su tamaño crea nuevos desafíos para los ingenieros/entusiastas. Este tutorial ayudó a abordar esto combinando la licencia “realmente abierta” de Falcon, los Pipelines de Hugging Face y la disponibilidad/accesibilidad de las CPUs para dar a los desarrolladores más acceso a este potente modelo.

Algunas cosas emocionantes para probar serían:

  • Ajustar Falcon a una tarea específica aprovechando la Extensión de Intel para PyTorch
  • Usar herramientas de compresión de modelos disponibles en el Compresor Neural de Intel (INC) y la Extensión de Intel para Transformers
  • Jugar con los parámetros de los Pipelines de Hugging Face para optimizar el rendimiento para tu caso de uso particular.

No te olvides de seguir mi perfil para más artículos como este!

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

Automatiza la creación de subtítulos y la búsqueda de imágenes a escala empresarial utilizando la inteligencia artificial generativa y Amazon Kendra

Amazon Kendra es un servicio de búsqueda inteligente impulsado por aprendizaje automático (ML). Amazon Kendra redefin...

Inteligencia Artificial

Una Guía Completa para la División de Entrenamiento-Prueba-Validación en 2023

Introducción Un objetivo del aprendizaje supervisado es construir un modelo que funcione bien en un conjunto de datos...

Inteligencia Artificial

Estas herramientas podrían ayudar a proteger nuestras imágenes de la IA

Sin embargo, estas herramientas no son perfectas, ni suficientes por sí solas.

Inteligencia Artificial

La Desesperada Búsqueda del Premio Más Indispensable del Auge de la Inteligencia Artificial

Para alimentar los productos de inteligencia artificial, las nuevas empresas y los inversores están tomando medidas e...