2 puntos por GN⁺ 2023-11-14 | 1 comentarios | Compartir por WhatsApp

Stack Rust+Wasm: una poderosa alternativa a Python

  • Las aplicaciones Rust+Wasm tienen un tamaño 1/100 del de Python, son 100 veces más rápidas y pueden ejecutarse de forma segura en cualquier lugar sin cambiar en absoluto la aceleración de hardware.
  • Rust es el lenguaje para la AGI (inteligencia artificial general), y se crea un programa simple en Rust para hacer inferencia del modelo llama2 a velocidad nativa.
  • La aplicación binaria compilada a Wasm (2 MB) es completamente portable entre dispositivos con distintos aceleradores de hardware.
  • El runtime de Wasm (WasmEdge) ofrece un entorno de ejecución seguro y protegido en la nube.

Instalación y ejecución del programa en Rust

  • Step 1. Instalar WasmEdge y el plugin GGML: en un dispositivo Linux o Mac, usar los siguientes comandos para instalarlo.
  • Step 2. Descargar la app Wasm precompilada y el modelo: descargar el modelo llama2 en formato GGUF y, como ejemplo, descargar la versión del modelo de chat ajustado llama2 7B cuantizada con pesos de 5 bits.
  • Step 3. Ejecutar: usar WasmEdge para ejecutar la aplicación de inferencia wasm, pasar el modelo GGUF e ingresar una pregunta para conversar con el modelo.

Configuración del funcionamiento del modelo

  • Se puede configurar la forma de interacción con el modelo mediante opciones de línea de comandos.
  • Por ejemplo, se puede especificar una longitud de contexto determinada, establecer la cantidad máxima de tokens a predecir en cada respuesta, imprimir estadísticas y transmitir la respuesta del modelo por stdout.
  • El programa genera alrededor de 25 tokens por segundo en una MacBook M2 de gama baja.

Agentes y apps con LLM

  • Se crea un servidor API compatible con OpenAI usando Rust y WasmEdge.
  • Esto permite crear agentes y aplicaciones con LLM usando herramientas de desarrollo compatibles con OpenAI.

Ventajas de Rust+Wasm frente a Python

  • El stack Rust+Wasm es una alternativa sólida al stack de Python para aplicaciones de inferencia de IA y proporciona infraestructura de cómputo en la nube.
  • Ultraligero: la aplicación de inferencia pesa solo 2 MB, incluyendo todas las dependencias.
  • Muy rápido: ofrece velocidad nativa de C/Rust en todas las partes de la aplicación de inferencia.
  • Portabilidad: la misma aplicación en bytecode Wasm puede ejecutarse en todas las principales plataformas de cómputo que soportan aceleración de hardware heterogénea.
  • Fácil de instalar, desarrollar y desplegar: no tiene dependencias complejas, y se puede compilar un único archivo Wasm con herramientas estándar en una laptop y desplegarlo en cualquier lugar.
  • Seguro y listo para la nube: el runtime de Wasm está diseñado para aislar código de usuario no confiable, puede ser administrado por herramientas de contenedores y desplegarse fácilmente en plataformas cloud-native.

Programa de inferencia en Rust

  • El programa de inferencia de demostración está escrito en Rust y compilado a Wasm.
  • El código fuente en Rust es muy simple y consta de solo 40 líneas de código.
  • El programa en Rust administra la entrada del usuario, lleva el historial de la conversación, convierte el texto a la plantilla de chat de llama2 y ejecuta tareas de inferencia usando la API WASI NN.

Ejecutarlo en la nube o en el edge

  • Una vez que se tiene el archivo de bytecode Wasm, se puede desplegar en cualquier dispositivo compatible con el runtime WasmEdge.
  • WasmEdge se instala junto con el plugin GGML y aprovecha automáticamente distintas aceleraciones de hardware para ejecutar el modelo llama2.

Próximos pasos

  • Las herramientas GGML de WasmEdge ya están disponibles y son usadas por clientes cloud-native, pero aún se encuentran en una etapa temprana.
  • Si te interesa contribuir al proyecto open source y ayudar a definir la dirección de la futura infraestructura de inferencia para LLM, hay varias tareas de bajo nivel en las que puedes colaborar.

Otros modelos de IA

  • WasmEdge y WASI NN permiten construir aplicaciones de inferencia ligeras, rápidas, portables y seguras como alternativa a Python.
  • Por ejemplo, el proyecto mediapipe-rs ofrece una API Rust+Wasm para los modelos Tensorflow mediapipe de Google.

Opinión de GN⁺

Lo más importante de este artículo es que presenta una alternativa a Python para la inferencia de IA usando Rust y WebAssembly (Wasm), con ventajas notables en tamaño, velocidad, portabilidad y seguridad. Este stack tecnológico integra infraestructura de cómputo en la nube para mejorar el rendimiento en diversos dispositivos y entornos cloud, resolver problemas complejos de dependencias y simplificar el desarrollo y el despliegue. Este enfoque podría tener implicaciones importantes especialmente para el futuro del edge computing y la inferencia de IA, lo que lo convierte en un tema muy interesante para quienes siguen esta tecnología.

1 comentarios

 
GN⁺ 2023-11-14
Comentarios de Hacker News
  • Aunque expresa apoyo por Rust y WASM, señala que el código real no pasa de ser un script básico de línea de comandos escrito en Rust, y que el procesamiento principal depende de una sola línea de código que invoca el backend de WASI-NN. En este caso, lo proporciona el runtime WasmEdge, y se destaca que WasmEdge está escrito en C++.
  • Para los desarrolladores de aplicaciones, este proyecto ofrece la forma más sencilla de empaquetar un motor de inferencia en un archivo distribuible. Los pesos del modelo ya son portables y se pueden descargar según sea necesario.
  • Plantea la duda de si el proyecto no es simplemente un wrapper de llama.cpp, y comparte experiencia desarrollando frameworks de ML con Rust y WebGPU.
  • Señala que un proyecto que depende de wasm-nn en realidad no es portátil, y que puede no ejecutarse si no hay soporte para cierto hardware. Esto no encaja con el propósito de WASI.
  • Pone en duda la precisión de la afirmación de que el build para Mac OS del plugin GGML realiza la inferencia usando la API Metal sobre la GPU, y no el motor neuronal de los M1/M2/M3.
  • Considera que se desarrollarán formas de ejecutar la arquitectura transformer de manera más eficiente y rápida en edge computing, pero le preocupa que los requisitos de VRAM se conviertan en el principal cuello de botella y se llegue al límite para cargar modelos grandes.
  • Pregunta si el proyecto puede ejecutarse en un iPhone sin conexión. Esto podría ser útil en situaciones donde no hay acceso a internet.
  • Critica que el proyecto se promocione como algo innovador en tamaño o velocidad por usar un wrapper escrito en otro lenguaje. En realidad, es un proyecto basado en llama.cpp, y la velocidad de inferencia o el tamaño del binario no están limitados por la elección del wrapper.
  • Pregunta cómo se puede reducir el tamaño sin perder precisión cuando los pesos entrenados del modelo ocupan una parte considerable del tamaño total.
  • El núcleo del código fuente en Rust es muy simple: consiste en 40 líneas que gestionan la entrada del usuario, rastrean el historial de la conversación, convierten el texto a la plantilla de chat de llama2 y realizan la inferencia usando la API de WASI NN.