Curso
La irrupción de los grandes modelos de lenguaje ha transformado sectores enteros, llevando el potencial de tecnologías como GPT-3.5 y GPT-4 de OpenAI a multitud de aplicaciones. Sin embargo, su alto coste y las preocupaciones sobre la confidencialidad de los datos suelen frenar a posibles adoptantes. Ahí es donde entran los modelos de código abierto como Vicuna-13B, que ofrecen un rendimiento comparable sin el gasto ni el riesgo para la información sensible.
Si quieres saber más sobre GPT-3.5 y GPT-4, nuestro tutorial Using GPT-3.5 and GPT-4 via the OpenAI API in Python es un buen punto de partida para entender cómo trabajar con el paquete de Python de OpenAI y conversar con ChatGPT de forma programática.
¿Qué es Vicuna-13B?
Vicuna-13B es un modelo conversacional de código abierto, ajustado a partir de LLaMa 13B utilizando conversaciones compartidas por usuarios obtenidas de ShareGPT.
Una evaluación preliminar con GPT-4 como juez mostró que Vicuna-13B alcanzaba más del 90% de la calidad de chatGPT y Google Bard, superando además a otros modelos como LLaMa y Alpaca en más del 90% de los casos. A continuación se ilustra el flujo completo de ajuste fino y evaluación:

Flujo de ajuste fino y evaluación de Vicuna-13B (fuente)
Aunque esto pone de relieve la solidez de Vicuna-13B, también tiene limitaciones propias y no está especializado en tareas como matemáticas y razonamiento.

Imagen de LMSYSORG modificada por el autor
Aplicaciones de Vicuna-13B
Como chatbot inteligente, las aplicaciones de Vicuna-13B son innumerables. A continuación se muestran algunos ejemplos en distintos sectores como atención al cliente, salud, educación, finanzas y viajes/hospitalidad.

Cinco aplicaciones de Vicuna-13 en la vida real
- Atención al cliente: gracias a su capacidad para dar servicio 24/7, los chatbots pueden apoyar a clientes y automatizar consultas repetitivas y sencillas. Por ejemplo, Sephora utiliza chatbots para ayudar a sus clientes a encontrar productos, consultar el estado de sus pedidos y obtener consejos de maquillaje desde su web.
- Salud: los pacientes pueden obtener rápidamente información sanitaria personalizada, lo que permite a los especialistas centrarse en otras investigaciones para descubrir nuevos tratamientos. Por ejemplo, Babylon Health utiliza chatbots con IA para realizar evaluaciones de salud y así monitorizar mejor a los pacientes.
- Educación: muchas instituciones educativas de referencia, como Duolingo, han utilizado bots de IA de forma creativa para aumentar la implicación del alumnado y facilitar la comprensión de conceptos más avanzados.
- Finanzas: mi primera interacción con el banco cuando necesito ayuda suele ser mediante un bot inteligente, y muchos bancos, como Wells Fargo, emplean tecnologías similares para asistir a sus clientes en tareas repetitivas como consultar saldos, transferir dinero o gestionar cuentas.
- Viajes/hospitalidad: de forma similar a la banca, los chatbots pueden ayudar a encontrar los mejores destinos según el presupuesto y las preferencias de viaje del usuario, e incluso actuar como conserje virtual. El chatbot Omar del Equinox Hotel New York gestiona casi el 85% de las consultas de clientes. Les permitió tramitar 2600 consultas nuevas en menos de tres meses y generar 150 clientes potenciales cualificados en solo cuatro meses.
La lista anterior no es exhaustiva. En nuestro artículo How NLP is changing the future of Data Science analizamos cómo el PLN impulsa el futuro de la ciencia de datos y el aprendizaje automático, sus aplicaciones futuras, riesgos y cómo mitigarlos.
Importancia y relevancia de aprender a ejecutar Vicuna-13B
A la vista de estas aplicaciones reales, no hay duda de que la demanda de agentes conversacionales con IA como Vicuna-13B es enorme en las principales industrias.
Por ello, dominar cómo implementar e integrar esta tecnología en los flujos de trabajo del sector se está convirtiendo en una competencia cada vez más valiosa, a medida que más empresas la utilizan para potenciar la relación con sus clientes, generar más oportunidades y, en general, mejorar el retorno de la inversión.
La buena noticia es que este tutorial está pensado justo para ayudarte a desarrollar las habilidades necesarias para ejecutar el modelo Vicuna-13B y poder integrarlo en cualquier flujo de sistemas de información de negocio.
Requisitos previos
Antes de ponernos manos a la obra con la ejecución del modelo Vicuna-13B, es importante preparar bien los requisitos previos, que incluyen:
- Entender el flujo de trabajo de Vicuna-13B
- Configurar el hardware y software necesarios
- Obtener los pesos de LLaMa para Vicuna-13B
Una vez cumplidos estos requisitos, comprenderemos mejor los formatos de entrada y salida y podremos ejecutar el modelo con éxito.
Entender el flujo de trabajo de Vicuna-13B
Comprender mejor el formato de entrada y salida de Vicuna-13B proporciona al desarrollador un conocimiento mínimo de los factores que pueden afectar a la toma de decisiones del modelo.
En esta sección se explican los principales parámetros de entrada necesarios, junto con el formato de salida esperado del modelo Vicuna-13B.

Flujo minimalista de extremo a extremo
Veamos el flujo anterior. Primero, el usuario envía la entrada deseada, que incluye el prompt, es decir, la solicitud de texto principal para la que quiere una respuesta.
El prompt se acompaña de los siguientes parámetros adicionales:
- Max-length: especifica el número máximo de caracteres que el modelo debe considerar en la respuesta final.
- Temperature: este valor va de 0 a 1. Cuanto menor es, más determinista es el resultado. Por el contrario, un valor alto introduce más aleatoriedad y, por tanto, resultados más diversos y creativos.
- Top-p: controla la diversidad de las predicciones, seleccionando los tokens más probables cuya probabilidad acumulada supera un umbral dado. Partiendo de cero, un valor más alto aumenta la probabilidad de obtener una mejor salida, pero requiere más cómputo.
- Repetition_penalty: si una palabra se repite con frecuencia, este parámetro ayuda a evitar su sobreuso, haciendo el resultado más variado.
- Seed: para garantizar un resultado consistente para una misma entrada en ejecuciones sucesivas.
- Debug: activa el modo depuración, útil para diagnosticar el comportamiento y el rendimiento del modelo.
Tras enviar el prompt con los parámetros anteriores, el modelo Vicuna-13B realiza el procesamiento necesario para generar la salida requerida, que sigue el siguiente esquema:
- Text: la salida textual generada por el modelo Vicuna
- Metadata: información adicional generada por el modelo. Se ofrece una explicación detallada en las siguientes secciones.
Configurar el hardware y software necesarios
Ahora que entendemos mejor las entradas y salidas, podemos identificar las bibliotecas principales para ejecutar el modelo Vicuna con éxito.
- Conda: garantiza un entorno limpio y aislado para las dependencias del modelo Vicuna.
- FastAPI: proporciona un framework moderno para desarrollar la API del modelo Vicuna con análisis automático del prompt del usuario.
- Uvicorn: sirve la aplicación FastAPI de Vicuna, asegurando un rendimiento eficiente y fiable.
- LLaMa.cpp: gestiona la complejidad de procesamiento de los grandes modelos de lenguaje que conforman Vicuna.
Crear el entorno virtual
Todos los comandos de esta sección se ejecutan desde una terminal. Con la instrucción conda create, creamos un entorno virtual llamado vicuna-env.
conda create --name vicuna-env
Tras crear el entorno virtual, lo activamos con la instrucción conda activate de la siguiente forma:
conda activate vicuna-env
El comando anterior debería mostrar el nombre del entorno entre corchetes al inicio de la terminal, como sigue:

Nombre del entorno virtual tras la activación
Instalación de las bibliotecas
Las bibliotecas anteriores pueden instalarse de dos formas. La primera es ejecutar pip install manualmente para cada una, lo que puede llevar mucho tiempo cuando hay muchas dependencias y no es óptimo a nivel industrial.
La segunda es la mejor opción: usar un archivo requirements.txt con todas las dependencias necesarias. A continuación tienes el contenido del archivo y la instalación con un único comando pip install.
# Contenido del archivo requirements.txt
llama-cpp-python==0.1.48
fastapi
uvicorn[standard]
Las tres bibliotecas se pueden instalar así:
pip install -r requirements.txt
Obtener los pesos de LLaMa
Desde la plataforma Hugging Face podemos descargar los pesos del modelo Vicuna, como se muestra a continuación:

Dos pasos para descargar los pesos de Vicuna-13B desde Hugging Face
Para organizar mejor el código, podemos mover los pesos descargados del modelo a una carpeta nueva llamada model.
Empaquetado y creación de una API
Aunque ya cumplimos los requisitos para ejecutar el modelo por línea de comandos, desplegar una API que interactúe con él es una opción mucho más práctica. Así el modelo será accesible para mucha más gente.
Para conseguirlo, necesitamos los siguientes pasos:
- Cargar el modelo desde la máquina local
- Crear una API para exponer el modelo
La estructura general del código fuente se muestra a continuación, y el código completo está disponible en GitHub.
------ model
|------- ggml-vicuna-13b-4bit.bin
------ requirements.txt
------ vicuna_app.py
ggml-vicuna-13b-4bit.binson los pesos del modelo descargados en la carpeta modelrequirements.txtcontiene las dependencias para ejecutar el modelovicuna_app.pycontiene el código Python para crear la API, que es el foco de esta sección.
Definición de las rutas principales de la API
En nuestro caso, necesitamos dos rutas principales. Antes, importamos las bibliotecas relevantes, cargamos el modelo y creamos una instancia de FastAPI.
# Importar las bibliotecas
from fastapi import FastAPI, HTTPException
from llama_cpp import Llama
# Cargar el modelo
vicuna_model_path = "./model/ggml-vicuna-13b-4bit.bin"
vicuna_model = Llama(model_path=vicuna_model_path)
app = FastAPI()
- Primera ruta: la ruta por defecto
"/"devuelve el siguiente JSON"Message": "Welcome to the Vicuna Demo FastAPI"mediante la funciónhome(), que no recibe parámetros.
# Definir la ruta por defecto
@app.get("/")
def home():
return {"Message": "Welcome to the Vicuna Demo FastAPI"}
- Segunda ruta:
"/vicuna_says", que ejecuta la funciónanswer_prompt(). Recibe como parámetro el prompt del usuario y devuelve una respuesta JSON con el resultado del modelo Vicuna y metadatos adicionales.
@app.post("/vicuna_says")
def answer_prompt(user_prompt):
if (not (user_prompt)):
raise HTTPException(status_code=400,
detail="Please Provide a valid text message")
response = vicuna_model(user_prompt)
return {"Answer": response}
Ejecución de las rutas
Por fin podemos ejecutar la API con la siguiente instrucción desde la línea de comandos, en la carpeta donde está el archivo vicuna_app.py.
uvicorn vicuna_app:app --reload
uvicorn: inicia el servidor Uvicorn.vicuna_app: corresponde al archivo Pythonvicuna_app.py. Es lo que va a la izquierda de los dos puntos.app: es el objeto creado dentro devicuna_app.pycon la instrucciónapp = FastAPI(). Si el archivo se llamaramain.py, el comando seríauvicorn main:app --reload--reload: opción para reiniciar el servidor tras cambios en el código. Úsala solo en desarrollo, no en producción.
Este es el resultado al ejecutar el comando anterior: el servidor está funcionando en localhost en el puerto 8000 (http://127.0.0.1:8000)

URL de la API ejecutándose en localhost
Acceder a la ruta por defecto es muy sencillo: solo tienes que escribir la siguiente URL en cualquier navegador.

Respuesta de la ruta por defecto
Aquí viene lo interesante. La URL http://127.0.0.1:8000/docs proporciona un panel completo para interactuar con la API, y este es el resultado.

Visualización gráfica de las dos rutas
En la imagen anterior, al seleccionar /vicuna_says en el recuadro verde, obtenemos la guía completa para interactuar con nuestra API, como se muestra a continuación.

Los tres pasos principales para ejecutar el prompt del usuario
Solo tienes que seleccionar la pestaña Try it out y escribir el mensaje para el que quieres la predicción en el área text_message.
Por último, al pulsar el botón Execute obtenemos el siguiente resultado.

Respuesta del servidor del modelo Vicuna a la consulta del usuario
La respuesta del modelo Vicuna se proporciona en el campo "text", y el resultado es bastante impresionante.
También se incluyen metadatos adicionales, como el modelo utilizado, la fecha de creación de la respuesta, el número de tokens del prompt y el número de tokens de la respuesta, entre otros.
Cómo el despliegue facilita el uso de Vicuna-13B
Desplegar un modelo tan potente mejora la experiencia del usuario y la eficiencia operativa de varias formas, entre ellas:
- Facilidad de acceso: el despliegue permite acceder al modelo mediante una API, sin necesidad de descargarlo ni configurarlo localmente.
- Gestión de recursos: servidores con recursos adecuados pueden gestionar múltiples peticiones simultáneas y ofrecer un servicio fiable.
- Escalabilidad: es posible escalar recursos para cubrir picos de demanda y mantener un rendimiento constante.
- Actualizaciones y mantenimiento: las actualizaciones y el mantenimiento centralizados garantizan el acceso a la versión más reciente del modelo.
- Integración: la integración con otros sistemas y aplicaciones es más sencilla, ampliando casos de uso y versatilidad.
En definitiva, el despliegue facilita un uso más accesible, fiable y versátil de Vicuna-13B, ampliando su aplicabilidad para distintos usuarios y aplicaciones.
Buenas prácticas y consejos para Vicuna-13B
Al trabajar con el modelo Vicuna-13B, algunas buenas prácticas y consejos pueden ayudarte a optimizar la experiencia, mejorar resultados y resolver problemas comunes.
Consejos para optimizar el rendimiento de Vicuna-13B
Siguiendo estas recomendaciones, asegurarás una experiencia más fluida y mejores resultados al trabajar con Vicuna-13B.

4 consejos para optimizar el rendimiento del modelo Vicuna-13B
- Optimización de hardware: asegúrate de que el servidor que aloja Vicuna-13B dispone de suficiente RAM y CPU para cubrir sus necesidades computacionales.
- Procesamiento por lotes: aprovecha el procesamiento en paralelo del modelo y procesa datos en lotes siempre que sea posible.
- Cacheo de resultados: implementa caché para resultados de consultas frecuentes y así reducir cómputos redundantes y mejorar tiempos de respuesta.
- Preprocesamiento de entradas: preprocesa los datos de entrada para confirmar que están en el formato óptimo, lo que ayuda a mejorar precisión y rendimiento.
Resolución de problemas comunes
Además de optimizar el rendimiento, conviene saber resolver incidencias habituales durante el uso de Vicuna-13B. Aquí tienes cuatro ejemplos:

Algunos problemas comunes y cómo resolverlos
- Errores de memoria: si aparecen errores de memoria, plantéate aumentar la RAM del servidor u optimizar el tamaño de la entrada para que el modelo lo gestione mejor.
- Tiempos de respuesta lentos: mejora la CPU del servidor o usa procesamiento por lotes para reducir la latencia del modelo.
- Salidas incorrectas: si obtienes resultados erróneos o inesperados, revisa minuciosamente los datos de entrada en busca de anomalías o errores que puedan afectarlos.
- Problemas de integración: si hay dificultades al integrar Vicuna-13B con otros sistemas o aplicaciones, revisa a fondo la documentación de la API y verifica que todos los puntos de integración estén configurados correctamente.
Conclusión
En resumen, este artículo te ha ofrecido una visión completa sobre cómo preparar y utilizar el modelo Vicuna-13B. Hemos cubierto los requisitos previos necesarios, incluido hardware, software y la obtención de los pesos de LLaMa, imprescindibles para ejecutar el modelo con éxito.
Te hemos dado instrucciones detalladas para configurar el entorno de trabajo, instalar el software necesario y preparar los pesos de Vicuna-13B, destacando la importancia de los pesos en los modelos de lenguaje.
Además, hemos profundizado en el empaquetado y el despliegue de Vicuna-13B, y cómo el despliegue facilita su uso como interfaz web y API.
Por último, compartimos recomendaciones prácticas para interactuar con Vicuna-13B, ejemplos de sus capacidades y buenas prácticas para optimizar su rendimiento y solucionar problemas frecuentes.
¿Listo para profundizar en el mundo de la IA y el aprendizaje automático? Potencia tus habilidades con el framework de deep learning que usan los profesionales de IA. Únete hoy al curso Deep Learning with PyTorch.
Zoumana desarrolla herramientas de IA LLM para ayudar a las empresas a llevar a cabo la diligencia debida en materia de sostenibilidad y evaluaciones de riesgos. Anteriormente trabajó como científico de datos e ingeniero de aprendizaje automático en Axionable e IBM. Zoumana es la fundadora de la plataforma tecnológica educativa de aprendizaje entre iguales ETP4Africa. Ha escrito más de 20 tutoriales para DataCamp.





