Explorando alternativas de código abierto a los modelos de OpenAI

Explorando opciones de software libre como alternativas a los modelos de OpenAI

Introducción

Noviembre ha sido dramático en el espacio de la IA. Ha sido un viaje emocionante desde el lanzamiento de las tiendas GPT, GPT-4-turbo, hasta el fiasco de OpenAI. Pero esto plantea una pregunta importante: ¿qué tan confiables son los modelos cerrados y las personas detrás de ellos? No será una experiencia agradable cuando el modelo que utilizas en producción falle debido a algún drama corporativo interno. Esto no es un problema con los modelos de código abierto. Tienes control total sobre los modelos que implementas. Tienes soberanía sobre tus datos y modelos por igual. Pero ¿es posible sustituir un modelo de código abierto con los GPT? Afortunadamente, muchos modelos de código abierto ya están funcionando al nivel o incluso mejor que los modelos GPT-3.5. Este artículo explorará algunas de las mejores alternativas de alto rendimiento para LLMs y LMMs de código abierto.

Objetivos de aprendizaje

  • Discutir sobre los modelos de lenguaje de código abierto.
  • Explorar los modelos de lenguaje de código abierto y los modelos multimodales de última generación.
  • Una introducción suave a la cuantificación de modelos de lenguaje de gran tamaño.
  • Conocer las herramientas y servicios para ejecutar LLMs localmente y en la nube.

Este artículo fue publicado como parte del Data Science Blogathon.

¿Qué es un modelo de código abierto?

Un modelo se llama de código abierto cuando los pesos y la arquitectura del modelo están disponibles de forma gratuita. Estos pesos son parámetros preentrenados de un modelo de lenguaje de gran tamaño, por ejemplo, el Llama de Meta. Estos suelen ser modelos base o modelos sin ajuste fino. Cualquiera puede utilizar los modelos y ajustarlos con datos personalizados para realizar acciones posteriores.

Pero ¿son realmente abiertos? ¿Qué sucede con los datos? La mayoría de los laboratorios de investigación no publican los datos que se utilizan para entrenar los modelos base debido a preocupaciones sobre contenido con derechos de autor y sensibilidad de los datos. Esto también nos lleva a la parte de la licencia de los modelos. Cada modelo de código abierto viene con una licencia similar a cualquier otro software de código abierto. Muchos modelos base como Llama-1 venían con una licencia no comercial, lo que significa que no se pueden utilizar estos modelos para ganar dinero. Pero modelos como Mistral7B y Zephyr7B vienen con licencias Apche-2.0 y MIT, que se pueden utilizar en cualquier lugar sin preocupaciones.

Alternativas de código abierto

Desde el lanzamiento de Llama, ha habido una carrera armamentista en el espacio de código abierto para alcanzar a los modelos de OpenAI. Y hasta ahora, los resultados han sido alentadores. En menos de un año después del lanzamiento de GPT-3.5, ya tenemos modelos que tienen un rendimiento igual o mejor que GPT-3.5 pero con menos parámetros. Pero GPT-4 sigue siendo el mejor modelo para realizar tareas generales, desde razonamiento y matemáticas hasta generación de código. Si observamos el ritmo de innovación y financiación en los modelos de código abierto, pronto tendremos modelos que se aproximarán al rendimiento de GPT-4. Por ahora, discutamos algunas excelentes alternativas de código abierto a estos modelos.

Llama 2 de Meta

Meta lanzó su mejor modelo, Llama-2, en julio de este año y se convirtió en un éxito instantáneo gracias a sus impresionantes capacidades. Meta lanzó cuatro modelos de Llama-2 con diferentes tamaños de parámetros. Llama-7b, 13b, 34b y 70b. Los modelos eran lo suficientemente buenos como para superar a otros modelos abiertos en sus respectivas categorías. Pero ahora, múltiples modelos como Mistral-7b y Zephyr-7b superan a los modelos más pequeños de Llama en muchos puntos de referencia. Llama-2 70b sigue siendo uno de los mejores en su categoría y es una alternativa digna a GPT-4 para tareas como resumir, traducción automática, entre otras.

En varios puntos de referencia, Llama-2 ha tenido un mejor rendimiento que GPT-3.5, y ha logrado acercarse a GPT-4, lo que lo convierte en un sustituto valioso de GPT-3.5 y, en algunos casos, de GPT-4. El siguiente gráfico muestra una comparación de rendimiento entre los modelos de Llama y GPT por Anyscale.

Para obtener más información sobre Llama-2, consulta este blog en HuggingFace. Estos LLM han demostrado un buen rendimiento cuando se afinan sobre conjuntos de datos personalizados. Podemos afinar los modelos para que funcionen mejor en tareas específicas.

Diferentes laboratorios de investigación también han lanzado versiones afinadas de Llama-2. Estos modelos han mostrado mejores resultados que los modelos originales en muchos puntos de referencia. Este modelo afinado de Llama-2, Nous-Hermes-Llama2-70b de Nous Research, ha sido afinado sobre más de 300.000 instrucciones personalizadas, lo que lo hace mejor que el modelo original meta-llama/Llama-2-70b-chat-hf.

Echa un vistazo al leaderboard de HuggingFace. Puedes encontrar modelos afinados de Llama-2 con mejores resultados que los modelos originales. Este es uno de los beneficios de los modelos de código abierto. Hay una gran cantidad de modelos para elegir según los requisitos.

Mistral-7B

Desde el lanzamiento de Mistral-7B, se ha convertido en el favorito de la comunidad de código abierto. Ha demostrado un rendimiento mucho mejor que cualquier modelo en la categoría y se acerca a las capacidades de GPT-3.5. Este modelo puede ser un sustituto de Gpt-3.5 en muchos casos, como resúmenes, parafraseo, clasificación, etc.

Pocos parámetros del modelo garantizan un modelo más pequeño que puede ejecutarse localmente o alojarse a tarifas más económicas que los más grandes. Aquí está el espacio original de huggingFace para Mistral-7b. Además de ser un gran rendidor, una cosa que hace destacar a Mistral-7b es que es un modelo en bruto sin censura alguna. La mayoría de los modelos están lobotomizados con RLHF pesados antes del lanzamiento, lo que los hace indeseables para muchas tareas. Pero esto hace que Mistral-7B sea adecuado para realizar tareas del mundo real y específicas.

Gracias a la vibrante comunidad de código abierto, existen algunas alternativas afinadas con mejor rendimiento que los modelos originales de Mistral7b.

OpenHermes-2.5

OpenHermes-2.5 es un modelo afinado de Mistral. Ha mostrado resultados notables en métricas de evaluación (GPT4ALL, TruthfullQA, AgiEval, BigBench). Para muchas tareas, esto es indistinguible de GPT-3.5. Para obtener más información sobre OpenHermes, consulta este repositorio de HF: teknium/OpenHermes-2.5-Mistral-7B.

Zephyr-7b

Zephyr-7b es otro modelo afinado de Mistral-7b por HuggingFace. Huggingface ha afinado completamente el Mistral-7b utilizando DPO (Direct Preference Optimization). Zephyr-7b-beta tiene un rendimiento comparable a modelos más grandes como GPT-3.5 y Llama-2-70b en muchas tareas, incluyendo escritura, temas humanísticos y juego de roles. A continuación se muestra una comparación entre Zephyr-7b y otros modelos en MTbench. Esto puede ser un buen sustituto de GPT-3.5 en muchos aspectos.

Aquí está el repositorio oficial de HuggingFace: HuggingFaceH4/zephyr-7b-beta.

Intel Neural Chat

El chat neural es un modelo LLM de 7B afinado a partir de Mistral-7B por Intel. Ha mostrado un rendimiento notable, liderando el ranking de Huggingface entre todos los modelos de 7B. El NeuralChat-7b está afinado y entrenado sobre Gaudi-2, un chip de Intel para realizar tareas de IA más rápidamente. El excelente rendimiento de NeuralChat es resultado de un afinado supervisado y una optimización directa de preferencia (DPO) sobre conjuntos de datos de Orca y slim-orca.

Aquí está el repositorio de HuggingFace de NeuralChat: Intel/neural-chat-7b-v3-1.

Modelos Abiertos Multi-Modales de Gran Tamaño

Después del lanzamiento de GPT-4 Vision, ha habido un mayor interés en los modelos multi-modales. Los Modelos de Lenguaje con Visión pueden ser excelentes en muchos casos de uso del mundo real, como responder preguntas sobre imágenes y narrar videos. En un caso de uso de este tipo, Tldraw ha lanzado un pizarra de IA que te permite crear componentes web a partir de dibujos en la pizarra usando la capacidad increíble de GPT-4V para interpretar imágenes como código.

Pero el código abierto está avanzando más rápido. Muchos laboratorios de investigación han lanzado modelos multi-modales de gran tamaño como Llava, Baklava, Fuyu-8b, etc.

Llava

El modelo multi-modal Llava (Large Language and Vision Assistant) tiene 13 mil millones de parámetros. Llava conecta el LLM Vicuna-13b y un codificador visual pre-entrenado CLIP ViT-L/14. Ha sido ajustado a través del conjunto de datos Visual Chat y Science QA para lograr un rendimiento similar a GPT-4V en muchas ocasiones. Esto se puede utilizar en tareas de preguntas y respuestas visuales.

BakLlava

BakLlava de SkunkWorksAI es otro modelo multi-modal de gran tamaño. Tiene a Mistral-7b como LLM base con arquitectura Llava-1.5 agregada. Ha mostrado resultados prometedores en comparación con Llava-13b a pesar de ser más pequeño. Este es el modelo a buscar cuando necesitas un modelo más pequeño con una buena inferencia visual.

Fuyu-8b

Otra alternativa de código abierto es Fuyu-8b. Es un modelo de lenguaje multi-modal capaz de Adept. Fuyu es un transformador solo decodificador sin un codificador visual; esto es diferente de Llava, donde se utiliza CLIP.

A diferencia de otros modelos multi-modales que utilizan un codificador de imágenes para alimentar a LLM con datos de imágenes, este proyecta linealmente las partes de las imágenes en la primera capa del transformador. Trata el decodificador del transformador como un transformador de imágenes. A continuación, se muestra una ilustración de la arquitectura de Fuyu.

Para obtener más información sobre Fuyu-8b, consulta este artículo. Repositorio de HuggingFace adept/fuyu-8b

¿Cómo usar LLMs Abiertos?

Ahora que estamos familiarizados con algunos de los LLMs y LMMs de código abierto con mejor rendimiento, la pregunta es cómo obtener inferencias de un modelo abierto. Hay dos formas de obtener inferencias de los modelos de código abierto. Ya sea descargamos los modelos en hardware personal o nos suscribimos a un proveedor de servicios en la nube. Esto depende de tu caso de uso. Estos modelos, incluso los más pequeños, son intensivos en cómputo y requieren de una gran cantidad de RAM y VRAM. Inferir con estos modelos en hardware comercial es muy difícil. Para facilitar esta tarea, los modelos deben ser cuantizados. Entonces, veamos qué es la cuantización del modelo.

Cuantización

La cuantización es la técnica de reducir la precisión de los números flotantes. Por lo general, los laboratorios lanzan modelos con pesos y activaciones de alta precisión de punto flotante para lograr un rendimiento de vanguardia (SOTA). Esto hace que los modelos sean exigentes en cuanto a computación y no sean ideales para ejecutarse localmente o alojarse en la nube. La solución para esto es reducir la precisión de los pesos y las incrustaciones. Esto se llama cuantización.

Los modelos SOTA generalmente tienen una precisión de float32. Hay diferentes casos en la cuantización, desde fp32 -> fp16, fp32 -> int8, fp32 -> fp8 y fp32 -> fp4. Esta sección solo discutirá la cuantización a int8 o cuantización de enteros de 8 bits.

Cuantización a int8

La representación de int8 solo puede acomodar 256 caracteres (firmados [-128,127], no firmados [0, 256]), mientras que fp32 puede tener una amplia gama de números. La idea es encontrar la proyección equivalente de los valores fp32 en [a,b] al formato int8.

Si X es un número fp32 en el rango [a,b], entonces el esquema de cuantización es

X = S*(X_q – z)

  • X_q = el valor cuantizado asociado con X
  • S es el parámetro de escala. Un número fp32 positivo.
  • z es el punto cero. Es el valor int8 correspondiente al valor 0 en fp32.

Por lo tanto, X_q = round(X/S + z) para todo X en [a,b]

Para los valores fp3,2, más allá de [a,b] se recortan hasta la representación más cercana

X_q = clip( X_q = round(a/S + z) + round(X/S + z) + X_q = round(b/S + z)  )

  • round(a/S + z) es el número más pequeño y round(b/S + z) es el número más grande en el formato numérico mencionado.

Esta es la ecuación para la cuantización afín o de punto cero. Esto se trata de la cuantización de enteros de 8 bits; también existen esquemas de cuantización para fp8 de 8 bits, fp4 de 4 bits (fp4, nf4) y fp2 de 2 bits. Para obtener más información sobre la cuantización, consulte este artículo en HuggingFace.

La cuantización de modelos es una tarea compleja. Hay varias herramientas de código abierto para cuantizar LLMs, como Llama.cpp, AutoGPTQ, llm-awq, etc. Llama cpp cuantiza modelos con GGUF, AutoGPTQ utiliza GPTQ y llm-awq utiliza el formato AWQ. Estos son diferentes métodos de cuantización para reducir el tamaño del modelo.

Entonces, si desea usar un modelo de código abierto para inferencia, tiene sentido usar un modelo cuantizado. Sin embargo, deberá sacrificar algo de calidad de inferencia por un modelo más pequeño que no cueste una fortuna.

Consulte este repositorio de HuggingFace para modelos cuantizados: https://huggingface.co/TheBloke

Ejecución de modelos localmente

A menudo, para diversas necesidades, es posible que necesitemos ejecutar modelos localmente. Hay mucha libertad al ejecutar modelos localmente. Ya sea para construir una solución personalizada para documentos confidenciales o con fines de experimentación, los LLM locales brindan mucha más libertad y tranquilidad que los modelos de código cerrado.

Existen varias herramientas para ejecutar modelos localmente. Los más populares son vLLM, Ollama y LMstudio.

VLLM

El vLLM es un software de código abierto alternativo escrito en Python que le permite ejecutar LLMs localmente. Para ejecutar modelos en vLLM, se requieren ciertas especificaciones de hardware, generalmente, con capacidad de cálculo vRAM de más de siete y RAM superior a 16 GB. Debería poder ejecutarlo en una colaboración para realizar pruebas. VLLM actualmente admite el formato de cuantización AWQ. Estos son los modelos que puedes usar con vLLM. Y así es como podemos ejecutar un modelo localmente.

from vllm import LLM, SamplingParamsprompts = [    "Hola, mi nombre es",    "El presidente de los Estados Unidos es",    "La capital de Francia es",    "El futuro de la IA es",]sampling_params = SamplingParams(temperature=0.8, top_p=0.95)llm = LLM(model="mistralai/Mistral-7B-v0.1")outputs = llm.generate(prompts, sampling_params)for output in outputs:    prompt = output.prompt    generated_text = output.outputs[0].text    print(f"Prompt: {prompt!r}, Texto generado: {generated_text!r}")

El vLLM también es compatible con los puntos finales de OpenAI. Por lo tanto, puede utilizar el modelo como un reemplazo directo para la implementación existente de OpenAI.

import openai# Modifique la clave de API y la base de API de OpenAI para usar el servidor de API de vLLM.openai.api_key = "VACÍO"openai.api_base = "http://localhost:8000/v1"completion = openai.Completion.create(model="mistralai/Mistral-7B-v0.1",                                      prompt="San Francisco es un")print("Resultado de la finalización:", completion)

Aquí, inferiremos desde el modelo local utilizando la SDK de OpenAI.

Ollama

Ollama es otra herramienta CLI de código abierto en Go que nos permite ejecutar modelos de código abierto en hardware local. Ollama admite modelos cuantizados GGUF.

Cree un archivo de modelo en su directorio y ejecútelo

FROM ./mistral-7b-v0.1.Q4_0.gguf

Cree un modelo de Ollama a partir del archivo del modelo.

ollama create example -f ArchivoDeModelo

Ahora, ejecute su modelo.

ollama run example "¿Cómo matar un proceso de Python?"

Ollama también le permite ejecutar modelos de Pytorch y HuggingFace. Para más información, consulte su repositorio oficial.

LMstudio

LMstudio es un software de código cerrado que le permite ejecutar cualquier modelo en su PC de manera conveniente. Esto es ideal si desea un software dedicado para ejecutar modelos. Tiene una interfaz de usuario agradable para utilizar modelos locales. Está disponible en Macs (M1, M2), Linux (beta) y Windows.

También admite modelos con formato GGUF. Consulte su página oficial para obtener más información. Asegúrese de que admita las especificaciones de su hardware.

Modelos de proveedores en la nube

Ejecutar modelos localmente es excelente para experimentación y casos de uso personalizados, pero utilizarlos en aplicaciones requiere que los modelos estén alojados en la nube. Puede alojar su modelo en la nube a través de proveedores de modelos de LLM dedicados, como Replicate y Brev Dev. Puede alojar, ajustar y obtener inferencias de modelos. Proporcionan un servicio escalable y elástico para alojar LLMs. La asignación de recursos cambiará según el tráfico en su modelo.

Conclusión

El desarrollo de modelos de código abierto está ocurriendo a un ritmo vertiginoso. En menos de un año de ChatGPT, tenemos modelos más pequeños que lo superan en muchos puntos de referencia. Esto es solo el comienzo, y es posible que haya un modelo a la par de GPT-4 en el futuro. Últimamente, se han planteado preguntas sobre la integridad de las organizaciones detrás de los modelos de código cerrado. Como desarrollador, no querrá que su modelo y los servicios construidos sobre él se vean comprometidos. El código abierto resuelve esto. Conoce tu modelo y eres dueño del modelo. Los modelos de código abierto brindan mucha libertad. También puede tener una estructura híbrida con modelos de código abierto y OpenAI para reducir costos y dependencias. Por lo tanto, este artículo trata sobre una introducción a algunos modelos de código abierto que tienen un rendimiento excelente y los conceptos relacionados con su ejecución.

Entonces, aquí están los puntos clave:

  • Los modelos abiertos son sinónimo de soberanía. Los modelos de código abierto brindan el factor de confianza tan necesario que los modelos cerrados no logran brindar.
  • Los modelos de lenguaje grandes como Llama-2 y Mistral, y sus afinamientos, han superado a GPT-3.5 en muchas tareas, lo que los convierte en sustitutos ideales.
  • Los modelos multimodales grandes como Llava, BakLlava y Fuyu-8b han demostrado ser prometedores en muchas tareas de preguntas y clasificación.
  • Los LLM son grandes y requieren mucha capacidad de cálculo. Por lo tanto, para ejecutarlos localmente, se requiere cuantización.
  • La cuantización es una técnica para reducir el tamaño del modelo al convertir los pesos y las activaciones en números de menor tamaño.
  • La implementación y la inferencia local desde modelos de código abierto requieren herramientas como LMstudio, Ollama y vLLM. Para implementar en la nube, utilice servicios como Replicate y Brev.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y son utilizados a discreción del autor.

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

Potenciando los juegos a otro nivel Sports Vision AI, una startup para transmitir atletismo en todo el mundo

Pixellot está anotando con la visión de inteligencia artificial – facilitando a las organizaciones ofrecer tran...

Inteligencia Artificial

Toma el control NVIDIA NeMo SteerLM permite a las empresas personalizar las respuestas de un modelo durante la inferencia

Los desarrolladores tienen un nuevo volante de conducción asistida por IA para ayudarles a mantenerse en la carretera...

Inteligencia Artificial

MLOps para la inferencia por lotes con monitoreo y reentrenamiento del modelo utilizando Amazon SageMaker, HashiCorp Terraform y GitLab CI/CD

En esta publicación, describimos cómo crear un flujo de trabajo de MLOps para la inferencia por lotes que automatiza ...

Inteligencia Artificial

¿Qué tienen en común las neuronas, las luciérnagas y bailar el Nutbush?

Los científicos de la computación y los matemáticos han diseñado un marco para evaluar los fenómenos sincronizados.