Ejecute Alpaca en Android con memoria 4G, bienvenido a probar InferLLM, un marco de razonamiento de modelo LLM liviano

Desde la popularidad de LLM, ha habido muchos modelos excelentes en la comunidad. Por supuesto, su característica más importante es su gran tamaño. Recientemente, la comunidad ha trabajado mucho para permitir que los modelos grandes se ejecuten en dispositivos de gama baja. gptq realiza la cuantificación de modelos de bits bajos, lo que reduce los requisitos para ejecutar modelos grandes en la memoria de la CPU y la memoria de la GPU. llama. cpp se da cuenta que los modelos grandes se pueden ejecutar en la CPU/GPU local, y los pasos son muy simples.replit-code-v1-3b realiza una generación de código más inteligente con modelos más pequeños. Se puede ver que la miniaturización y el despliegue ligero del modelo es también la dirección de desarrollo de un modelo grande.

En vista de esto, el equipo de MegEngine desarrolló el proyecto InferLLM con dos propósitos principales:

  • Proporcione un marco de implementación local más simple y fácil de usar que llama.cpp para que todos puedan aprender y discutir

  • Haga posible implementar el modelo LLM localmente o al final, y se puede usar en algunos entornos de producción reales en el futuro

En comparación con el proyecto llama.cpp, InferLLM tiene una estructura más simple y refactorizó algunos componentes comunes para evitar colocar todo el código lógico y el código del Kernel en un solo archivo, y evitar la introducción de demasiadas macros en el Kernel que afecten la lectura y el desarrollo del código. no es muy amigable para el aprendizaje y el desarrollo secundario. InferLLM también se basa principalmente en llama.cpp, como: usar el formato modelo de llama.cpp y copiar algunos códigos calculados. Al mismo tiempo, InferLLM lo refactorizó para hacer el código. más simple y directo, muy fácil de usar, y el código del marco está separado del código del Kernel. De hecho, en el razonamiento de modelos grandes, el Kernel que realmente necesita optimizarse es mucho más pequeño que el Kernel de CNN.

Además, InferLLM también se puede utilizar en producción, ya que puede ejecutar el modelo cuantificado LLM sin problemas en un teléfono móvil con un rendimiento promedio y puede realizar un diálogo hombre-máquina sin problemas.Actualmente, para ejecutar un modelo llama 7b de 4 bits en un teléfono móvil , solo necesita aproximadamente memoria 4G, esta memoria es suficiente para la mayoría de los teléfonos móviles ahora. Creo que en un futuro cercano habrá muchos modelos livianos entre los modelos grandes, que se pueden implementar y razonar directamente al final. Después de todo, los teléfonos móviles son los recursos informáticos más fácilmente disponibles para todos, y no hay razón para desperdiciarlos. un clúster informático tan enorme.

El siguiente es el caso de ejecutar el modelo de cuantificación de 4 bits de alpaca china 7b en xiaomi9, Qualcomm SM8150 Snapdragon 855 con 4 hilos:

37f55f4ad5d846edbef7af7729ab7c47.gif

InferLLM consta principalmente de varias partes:

  • Modelo: principalmente responsable del tokenizador de entrada, la gestión del vocabulario, el almacenamiento de algunos tokens históricos y el muestreo después del decodificador, etc.;

  • Graph/Op: responsable de crear todo el modelo, incluida la relación de conexión directa de Op en el modelo, la ejecución de Op y la gestión de los recursos de memoria, como la entrada y salida de Op;

  • Kernel: Proporcione diferentes Kernels optimizados de back-end, que actualmente incluyen x86, Arm e ingenuo. Cuando no hay un Kernel optimizado en x86 y Arm, se recurrirá directamente para ejecutarse en ingenuo.

InferLLM admite principalmente las siguientes funciones:

  • Admite la preparación de recursos antes de que se ejecute cada Op. Cada Op debe llamar a pre_execute antes de la ejecución y llamar a end_execute después de la ejecución. De esta manera, es conveniente leer los pesos desde la mitad del disco a la RAM antes de la ejecución en el dispositivo con memoria insuficiente, y guardar los pesos nuevamente en el disco después de que se complete la ejecución. También puede usar mmap directamente para dejar el sistema operativo maneja automáticamente estas lógicas;

  • Admite la caché de KV de cada atención de cabezales múltiples, cada clave y valor calculados se almacenan en KVStorage, KVStorage admite la indexación de identificadores de token y, si la caché de KV es demasiado grande, también admite el intercambio;

  • Admite subprocesos múltiples en la CPU, SIMD, cuantificación, cálculo de float16 y otros métodos de aceleración. El subproceso múltiple es una lógica similar a la programación estática de OpenMP implementada por sí mismo, utilizando un grupo de subprocesos sin bloqueo para sincronizar entre varios subprocesos;

  • Compatible con una variedad de formatos de modelos, actualmente solo admite modelos similares a llamas y admitirá más estructuras de modelos en el futuro.

Bienvenidos a todos a probar InferLLM: https://github.com/MegEngine/InferLLM

Adjunto: Para obtener más información sobre MegEngine, puede: ver documentos y proyectos de GitHub, o unirse al grupo QQ de comunicación de usuarios de MegEngine: 1029741705. Bienvenido a contribuir con la comunidad MegEngine, conviértase en un Awesome MegEngineer y disfrute de un sinfín de certificados de honor y obsequios personalizados.

9e60f78c394c07ab9eecdee9e86fa2c7.gif

Supongo que te gusta

Origin blog.csdn.net/Megvii_tech/article/details/130612829
Recomendado
Clasificación