Petals - Ejecutar LLM en casa al estilo BitTorrent
(petals.dev)- Petals permite generar texto y hacer ajuste fino ejecutando solo una parte de un modelo de lenguaje grande en lugar de cargarlo completo en un solo equipo, usando una GPU doméstica o Google Colab
- Compatible con Llama 3.1 hasta 405B, Mixtral 8x22B, Falcon 40B+ y BLOOM 176B, para manejar modelos grandes incluso con hardware personal
- Funciona con una estructura tipo BitTorrent donde cada usuario carga el fragmento del modelo que le toca y se conecta a una red de participantes que aporta las demás partes
- En inferencia de lote único alcanza hasta 6 tokens/sec con Llama 2 70B y hasta 4 tokens/sec con Falcon 180B, suficiente para chatbots y apps interactivas
- Permite elegir métodos de ajuste fino y muestreo con más libertad que una API de LLM común, además de trabajar con rutas internas del modelo y los hidden states
Ejecutar modelos grandes de forma distribuida
- Petals busca ejecutar modelos de lenguaje grandes en casa y funciona de manera similar a BitTorrent, donde varios usuarios aportan distintas partes del modelo
- El usuario no carga el modelo completo, sino solo una parte del modelo, y participa en una red que aporta el resto
- Modelos compatibles:
- Llama 3.1: hasta 405B
- Mixtral: 8x22B
- Falcon: 40B+
- BLOOM: 176B
- Se puede usar una GPU doméstica o Google Colab para generación de texto y ajuste fino específico por tarea
- Rendimiento en inferencia de lote único:
- Llama 2 70B: hasta 6 tokens/sec
- Falcon 180B: hasta 4 tokens/sec
- Esta velocidad es suficiente para chatbots y aplicaciones interactivas
Un control más amplio que una API
- Petals va más allá de una API tradicional de LLM y permite elegir directamente los métodos de ajuste fino y muestreo
- Se pueden ejecutar rutas personalizadas dentro del modelo o inspeccionar los hidden states
- Ofrece la comodidad de una API junto con la flexibilidad de PyTorch y 🤗 Transformers
- Hay un cuaderno de Colab para probarlo de inmediato y documentación en GitHub
- También hay una forma de participar aportando GPU para ampliar la capacidad de Petals, y se pueden seguir las novedades de desarrollo en Discord
- Este proyecto forma parte del taller de investigación BigScience
1 comentarios
Opiniones de Hacker News
Interesante. Parece una arquitectura en la que los pesos del modelo se dividen por capas y se distribuyen entre varias máquinas; cuando cada máquina está lista, se registra en una gran tabla hash y luego realiza inferencia o ajuste fino “en equipo” sobre las capas que le corresponden.
Todavía está en una etapa temprana, pero he estado trabajando en alojar pesos de modelos para https://github.com/jmorganca/ollama en un registro Docker. La razón principal es la direccionabilidad por contenido: Ollama puede verificar cada vez que se descargaron los pesos correctos y, eventualmente, podrá obtener los pesos por el contenido en sí, en lugar de por un nombre o una URL que podría cambiar.
Como siguiente paso, parecería posible dividir un modelo por capas y almacenar cada capa de forma independiente para usos como este, o aprovecharlo para descargar y ejecutar modelos más grandes entre varias máquinas “locales”.
Las pautas de HN también dicen: “No uses HN principalmente para promoción; está bien publicar tu propio trabajo de vez en cuando, pero la curiosidad debería ser el motivo principal para usar el sitio”.
En este caso también habría alcanzado con hablar del trabajo del OP sin meter un backlink gratuito a tu proyecto.
La parte de que “se puede hacer ajuste fino para una tarea” me hizo levantar una ceja.
Hacer ajuste fino de un 70B no es simplemente difícil: aunque puedas esperar todo el tiempo que quieras, es literalmente imposible a menos que alquiles instancias de nube muy caras o compres una PC que cuesta como una casa.
Si existiera una “horda de entrenamiento de llama”, participaría con gusto.
Según entiendo, un modelo de decenas de miles de millones de parámetros puede ajustarse con una GPU que tenga un poco menos de N gigabytes de VRAM que N.
Para un modelo de 70B parámetros, ¿sería algo como una A100?
Además, en Lambda Cloud se puede ajustar un modelo de 70B por 2 dólares por millón de tokens, y en Replicate por menos de 10 dólares.
Si pensamos que un LLM aprende cada libro de forma independiente, parecería que bastaría con sumar los dos deltas de los pesos del LLM.
¿Un LLM entrenado es componible de alguna forma? Por ejemplo, si dos modelos confían en un 99% de los mismos datos y solo difieren en el 1%, ¿harían falta dos modelos completamente separados, o se podría compartir el cálculo con otras personas que tienen la misma opinión sobre ese 99% y crear modelos derivados que compensen las diferencias de confianza de cada uno?
Mi comprensión de las redes neuronales es básica, pero no me parece descabellado manipular los pesos de esa manera manteniendo la utilidad del modelo.
Lo pregunto porque sería útil saber en qué frases están de acuerdo dos LLM con el mismo rendimiento y en cuáles tienen disagreement. Entonces se podría mapear esa diferencia de vuelta a la diferencia en los datos de entrenamiento. Aunque seguramente solo sea posible cuando la diferencia es pequeña.
Por el contrario, si dos LLM con el mismo rendimiento son casi una oportunidad perdida de crear un único modelo más fuerte, y el análisis de disagreement también es demasiado caro, entonces es un mundo bastante distinto.
No es componibilidad en el sentido de poder tomar esas capas de adaptación y combinarlas arbitrariamente, pero entrenar modelos distintos compartiendo una base común de pesos ya es un problema resuelto.
¿Cómo se evita que un participante malicioso cambie la salida de su parte dentro de un cálculo más grande? Incluso si no hubiera una forma de producir una salida de red elegida por el atacante, parece que si entran muchos nodos y simplemente devuelven basura, el sistema podría sufrir, en la práctica, un ataque de denegación de servicio.
Además, los clientes pueden enviar datos por varias rutas no superpuestas dentro de la red y verificar que los resultados coincidan.
Esto detecta a los atacantes frecuentes, pero no ofrece protección al 100%, así que si se necesitan garantías completas de exactitud, creo que la gente armará swarms privados. Por ejemplo, si no tienes suficientes GPU para ejecutar un LLM por tu cuenta, pero sí conoces a dueños de hardware confiables, pueden armar un swarm privado de Petals para ejecutar juntos un LLM y procesar datos en hardware distribuido geográficamente.
La primera pregunta que me surgió fue: “¿qué tal es la viabilidad económica?”. Según el FAQ:
¿Los incentivos de Petals se basan en criptomonedas, blockchain, etc.? No. Petals es un sistema completamente descentralizado en todos los demás aspectos, pero para los incentivos están trabajando en un sistema centralizado similar a los kudos de AI Horde. No hay planes de ofrecer un servicio para canjear estos puntos por dinero, así que pueden verse como puntos de “juego” para usar dentro del sistema.
Petals es un proyecto centrado en machine learning para investigadores e ingenieros de machine learning, y no tiene relación con las finanzas. La razón para optar por un sistema de incentivos centralizado es que es mucho más fácil de desarrollar y mantener, lo que permite enfocarse en crear funciones útiles para investigadores de machine learning.
https://github.com/bigscience-workshop/petals/wiki/FAQ:-Freq...
https://lite.koboldai.net/
https://tinybots.net/artbot
https://aihorde.net/
De hecho, si alguien en HN quiere probar algún modelo ajustado específico de 13B a 70B, podría alojarlo por la tarde:
https://huggingface.co/models?sort=modified&search=70B+gguf
https://www.sheepit-renderfarm.com/home
Como eso puede no ser suficiente para todos, también están introduciendo “bloom points” como incentivo explícito para quienes donen tiempo de GPU al swarm público. Cuando el sistema esté listo, mostrarán en el sitio web a los principales contribuidores, y quienes obtengan puntos podrán usarlos para inferencia o fine-tuning con mayor prioridad o garantías de seguridad reforzadas, o quizá canjearlos por otras recompensas.
Aun así, parece que de algún modo quieren un token centralizado.
Para aclarar, no quiero decir que haya que conectar el “token” de Petals con un sistema de pagos. Me refiero a que, en general, independientemente de si son descentralizadas o no, las llamadas a clústeres de modelos de machine learning probablemente usarán pagos en criptomonedas que ofrezcan al mismo tiempo autenticación y medio de pago.
Petals es una buena implementación de cómputo descentralizado para usar modelos, y parece que tendrá valor a largo plazo.
Quería compartir mi 3080 Ti, pero al ejecutar los comandos de la guía de inicio parece haber un problema con las versiones de las dependencias: https://github.com/bigscience-workshop/petals/wiki/Run-Petal...
ImportError: cannot import name 'get_full_repo_name' from 'huggingface_hub' (~/.local/lib/python3.8/site-packages/huggingface_hub/__init__.py)Parece que se puede alojar un swarm propio de servidores [0].
Me da curiosidad cuál será, más o menos, el rendimiento de fine-tuning de un clúster Petals “privado”.
[0] https://github.com/bigscience-workshop/petals/wiki/Launch-yo...
Realmente genial. Ojalá esto haga que miles, o millones, de desarrolladores más puedan acceder a este campo.
Siempre he pensado que el crowdsourcing es el futuro. Da igual si hablamos de información o de cómputo.
En realidad, los “recursos” ya existen; es solo un problema de asignación.
Usé Petals en un proyecto anterior. También compartí GPU y escribí código para el proyecto.
La parte de Petals estaba abstraída para mí, y la experiencia de escribir el código fue normal.
No publiqué ese proyecto en ningún lado y tampoco sé bien qué pasó con él después. En general, era algo liderado por unas cinco personas.