Deploy LLM to Production on Single GPU: REST API for Falcon 7B (with QLoRA) on Inference Endpoints
Despliegue de un modelo de lenguaje con Hugging Face
Resumen de la sección: En este video, el presentador muestra cómo desplegar un modelo de lenguaje que ha sido ajustado con QORA en un punto final de inferencia en Hugging Face. También explica cómo realizar consultas a la API para obtener respuestas a las solicitudes.
Cómo desplegar el modelo ajustado con Wav2Vec2
- Comienza explicando cómo desplegar el modelo ajustado con Wav2Vec2 en producción.
- Se inicia fusionando los pesos del adaptador QR con el modelo original Falcon 7B.
- Luego, se muestra cómo utilizar los puntos finales de inferencia para implementar el modelo detrás de una API REST.
Uso del Handler personalizado y biblioteca Request
- El presentador menciona que al final del video mostrará cómo utilizar la biblioteca Request para enviar solicitudes POST a la API y obtener respuestas en formato JSON.
Recursos adicionales y tutorial completo
- Se menciona que hay un tutorial completo disponible para suscriptores de ML Expert Pro, junto con un enlace al cuaderno Google Colab correspondiente.
- El presentador muestra su entorno actual, incluyendo una notebook ejecutándose en Google Colab con una GPU Tesla T4 y 16 GB de VRAM.
- Se instalan las dependencias necesarias y se importan las bibliotecas requeridas.
- Se carga el modelo Falcon 7B original y los archivos del adaptador QR desde un repositorio.
- El presentador muestra cómo fusionar los pesos del adaptador con el modelo base utilizando la función
model_merge_and_unwrap.
- Se muestra el resultado de la fusión de modelos, donde el modelo ajustado ya no tiene el adaptador QR.
- Explica que es más conveniente fusionar todos los componentes en un solo archivo para facilitar su despliegue.
- Muestra cómo se realiza la fusión de modelos utilizando la función
model_merge_and_unwrap.
- Después de la fusión, se muestra el nuevo modelo resultante sin el componente Water Model.
Subida del modelo a Hugging Face Hub
- El presentador explica cómo subir el modelo fusionado al Hugging Face Hub utilizando comandos específicos.
- Muestra cómo empujar el modelo fusionado a un repositorio específico en Hugging Face Hub.
- Luego, sube también el tokenizer original Falcon 7B al mismo repositorio.
Resultados y conclusiones
El presentador muestra los archivos cargados en el repositorio después de completar la subida. Se pueden ver los archivos binarios del modelo, el archivo index.json y el tokenizer junto con su configuración.
Este resumen cubre los puntos principales del video, incluyendo la fusión de modelos, la subida al Hugging Face Hub y el uso de un Handler personalizado y la biblioteca Request para realizar consultas a la API.
Configuración del modelo de lenguaje
Resumen de la sección: En esta sección, el orador explica cómo obtener y configurar los archivos necesarios para el modelo de lenguaje.
Obtención y configuración de archivos
- Se puede obtener la configuración fija desde el repositorio Falcon 7B o desde el tutorial ml expert IO.
- La configuración apunta a los archivos correctos que se cargarán.
- Se copia la configuración del proyecto Boom en un nuevo archivo llamado "configuration_RW.py".
- Se copia el archivo "modeling_RW.py" del proyecto Boom y se corrige un error tipográfico en su nombre.
- Los archivos se agregan al repositorio y se confirman los cambios.
Descarga y carga del modelo
Resumen de la sección: En esta sección, el orador descarga y carga los archivos del modelo necesario para su uso.
- Se descargan los archivos "modeling_RW.py" y "model.h5".
- El proceso de descarga puede llevar tiempo dependiendo de la velocidad de internet.
- Una vez descargados, el modelo se carga completamente en la GPU.
Creación de una configuración de generación
Resumen de la sección: En esta sección, el orador crea una configuración para generar texto utilizando el modelo cargado.
- Se utiliza la biblioteca Transformers para envolver el modelo dentro de un pipeline de generación de texto.
- A pesar de recibir una advertencia sobre que no es compatible con causal language modeling, parece funcionar correctamente.
- Se ejecuta un ejemplo utilizando una frase como entrada y se obtiene una respuesta generada por el modelo.
Implementación del modelo detrás de una API
Resumen de la sección: En esta sección, el orador explica cómo implementar el modelo como un servicio web utilizando endpoints de inferencia.
- Se utiliza la opción de endpoints de inferencia en Heavy Face para implementar el modelo.
- Se menciona que es necesario proporcionar información de pago ya que es un servicio pago por hora o minuto.
- Se destaca que la estrategia de implementación puede variar dependiendo del proveedor utilizado.
- Se menciona que los endpoints de inferencia son rápidos y eficientes para este tipo de modelos.
- Se hace referencia a la documentación oficial para obtener instrucciones detalladas sobre cómo crear y desplegar modelos utilizando Heavy Face.
Agregar archivos adicionales para implementación
Resumen de la sección: En esta sección, el orador explica qué archivos adicionales deben agregarse para completar la implementación del modelo como un servicio web.
- Se agrega un archivo llamado "endpoint_handler.py" que será responsable de cargar el modelo y generar respuestas basadas en las solicitudes recibidas a través del código API proporcionado.
- El archivo "endpoint_handler.py" incluye la configuración del tokenizer, el modelo, la configuración de generación y el pipeline utilizado anteriormente.
- El método "call" dentro del archivo maneja las entradas recibidas y ejecuta todo el proceso necesario para generar una respuesta.
Cargar el modelo en memoria
Resumen de la sección: En esta sección, el presentador explica que va a cargar el modelo en memoria para su uso. Como ya han descargado el modelo previamente, este proceso no debería llevar mucho tiempo.
Cargar el modelo en memoria
- El presentador carga el modelo en memoria o en la GPU.
- Este paso es necesario antes de probar el Handler y ejecutarlo.
Probar el Handler
Resumen de la sección: En esta sección, el presentador muestra cómo probar el Handler y obtener una predicción utilizando una solicitud API.
Probar el Handler
- Crear un prompt y crear un diccionario con las entradas requeridas por el Handler.
- Obtener la predicción e imprimirla.
- El código necesario para esto se encuentra en un archivo llamado "Handler.py" que debe ser agregado al repositorio.
Agregar archivos adicionales al repositorio
Resumen de la sección: En esta sección, se explica qué archivos adicionales deben ser agregados al repositorio antes de implementar el modelo.
Archivos adicionales necesarios
- Agregar un archivo llamado "requirements.txt" que contiene las dependencias necesarias para ejecutar correctamente el modelo.
- Este archivo está disponible en la documentación del tutorial proporcionada por ml expert IO.
Preparación para implementar el modelo
Resumen de la sección: En esta sección, se prepara todo lo necesario para implementar y desplegar correctamente el modelo.
Preparación para implementar el modelo
- Todo está listo para implementar el modelo.
- Utilizar el repositorio original creado anteriormente.
- Hacer clic en "deploy" para iniciar la implementación.
- Se presentan diferentes opciones de implementación, como la API de inferencia y los puntos de enlace de inferencia.
- Seleccionar los puntos de enlace de inferencia y crear un nuevo punto de enlace.
Configuración del punto de enlace
Resumen de la sección: En esta sección, se configura el punto de enlace para la implementación del modelo.
Configuración del punto de enlace
- Seleccionar el tipo de instancia adecuado (small instance).
- Elegir una configuración avanzada utilizando un marco personalizado (pytorch) y un tipo de contenedor predeterminado.
- Establecer el nivel de seguridad como "protected" para utilizar un token Hanging Face para la autenticación.
- Revisar y confirmar la configuración antes de crear el punto final.
Inicialización del punto final
Resumen de la sección: En esta sección, se muestra cómo inicializar y verificar que el punto final esté funcionando correctamente.
Inicialización del punto final
- Después de crear el punto final, esperar a que se inicialice correctamente.
- Obtener la URL del punto final una vez que esté activo.
- Probar las entradas utilizando la URL del punto final y verificar si funciona correctamente.
Verificación del repositorio y dependencias instaladas
Resumen de la sección: En esta sección, se verifica que el repositorio y las dependencias estén correctamente instaladas en el punto final.
Verificación del repositorio y dependencias
- Comprobar que el ID del repositorio sea el mismo que se agregó al inicio.
- Verificar la instalación correcta de las dependencias personalizadas, como torch 2.0 y la última versión de Transformers Library.
- Confirmar que el modelo ha sido inicializado correctamente.
Llamada al modelo a través de la API
Resumen de la sección: En esta sección, se muestra cómo llamar al modelo utilizando la API y obtener una respuesta.
Llamada al modelo a través de la API
- Importar la biblioteca "requests".
- Realizar una solicitud POST a la URL del punto final con los datos necesarios.
- Proporcionar un token de autorización válido.
- Obtener una respuesta del modelo a través de la API.
Resultados obtenidos
Resumen de la sección: En esta sección, se muestra el resultado obtenido después de llamar al modelo a través de la API.
Resultados obtenidos
- La respuesta recibida es similar a los resultados anteriores cuando se probó directamente el modelo.
- El tiempo necesario para obtener una respuesta es aproximadamente entre ocho y nueve segundos.
- A pesar del costo relativamente bajo (60 centavos por hora), los resultados son satisfactorios.
Este resumen proporciona una visión general del contenido del video y destaca los puntos clave presentados en cada sección.
Bibliotecas en Python
Resumen de la sección: En esta sección, el presentador menciona la importancia de las bibliotecas en Python y anima a los espectadores a unirse al canal de Discord para obtener acceso completo al tutorial en texto del video.
Unirse al canal de Discord
- El presentador invita a los espectadores a unirse al canal de Discord.
- Se proporcionará un enlace en la descripción del video.
Suscribirse y compartir
- El presentador pide a los espectadores que den like, compartan y se suscriban al canal.
- También anima a considerar unirse como suscriptores Pro para acceder al tutorial completo en texto.
Importancia de las bibliotecas en Python
- El presentador destaca la importancia de las bibliotecas en Python para ampliar las capacidades del lenguaje.
- Menciona que existen numerosas bibliotecas disponibles para diferentes propósitos, como ciencia de datos, aprendizaje automático, visualización, etc.
Recuerda que puedes acceder al tutorial completo uniéndote como suscriptor Pro y también puedes encontrar el enlace al canal de Discord en la descripción del video.