Skip to content

Latest commit

 

History

History
108 lines (53 loc) · 4.58 KB

021.UsingLlamacppQuantifyingPhi35.md

File metadata and controls

108 lines (53 loc) · 4.58 KB

Cuantificación de Phi-3.5 usando llama.cpp

Qué es llama.cpp

llama.cpp es una biblioteca de software de código abierto escrita principalmente en C++ que realiza inferencia en varios Modelos de Lenguaje Grandes (LLMs), como Llama. Su objetivo principal es proporcionar un rendimiento de vanguardia para la inferencia de LLM en una amplia gama de hardware con una configuración mínima. Además, hay enlaces de Python disponibles para esta biblioteca, que ofrecen una API de alto nivel para la finalización de texto y un servidor web compatible con OpenAI.

El objetivo principal de llama.cpp es habilitar la inferencia de LLM con una configuración mínima y un rendimiento de vanguardia en una amplia variedad de hardware, tanto localmente como en la nube.

  • Implementación en C/C++ sin dependencias
  • Apple silicon es un ciudadano de primera clase - optimizado a través de ARM NEON, Accelerate y Metal frameworks
  • Soporte para AVX, AVX2 y AVX512 para arquitecturas x86
  • Cuantización de enteros de 1.5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit y 8-bit para una inferencia más rápida y un uso reducido de memoria
  • Kernels CUDA personalizados para ejecutar LLMs en GPUs NVIDIA (soporte para GPUs AMD a través de HIP)
  • Soporte para backend de Vulkan y SYCL
  • Inferencia híbrida CPU+GPU para acelerar parcialmente modelos más grandes que la capacidad total de VRAM

Cuantificando Phi-3.5 con llama.cpp

El modelo Phi-3.5-Instruct se puede cuantificar usando llama.cpp, pero Phi-3.5-Vision y Phi-3.5-MoE aún no son compatibles. El formato convertido por llama.cpp es gguf, que también es el formato de cuantificación más utilizado.

Hay una gran cantidad de modelos en formato GGUF cuantificados en Hugging face. AI Foundry, Ollama y LlamaEdge dependen de llama.cpp, por lo que los modelos GGUF también se utilizan con frecuencia.

Qué es GGUF

GGUF es un formato binario que está optimizado para la carga y el guardado rápido de modelos, lo que lo hace altamente eficiente para fines de inferencia. GGUF está diseñado para su uso con GGML y otros ejecutores. GGUF fue desarrollado por @ggerganov, quien también es el desarrollador de llama.cpp, un popular marco de inferencia LLM en C/C++. Los modelos desarrollados inicialmente en frameworks como PyTorch pueden convertirse al formato GGUF para su uso con esos motores.

ONNX vs GGUF

ONNX es un formato tradicional de aprendizaje automático/aprendizaje profundo, que está bien soportado en diferentes Frameworks de IA y tiene buenos escenarios de uso en dispositivos edge. En cuanto a GGUF, está basado en llama.cpp y se puede decir que se produjo en la era de GenAI. Los dos tienen usos similares. Si deseas un mejor rendimiento en hardware embebido y capas de aplicación, ONNX puede ser tu elección. Si usas el framework derivado y la tecnología de llama.cpp, entonces GGUF puede ser mejor.

Cuantificación Phi-3.5-Instruct usando llama.cpp

1. Configuración del Entorno

git clone https://github.com/ggerganov/llama.cpp.git

cd llama.cpp

make -j8

2. Cuantificación

Usando llama.cpp convierte Phi-3.5-Instruct a FP16 GGUF

./convert_hf_to_gguf.py <Your Phi-3.5-Instruct Location> --outfile phi-3.5-128k-mini_fp16.gguf

Cuantificando Phi-3.5 a INT4

./llama.cpp/llama-quantize <Your phi-3.5-128k-mini_fp16.gguf location> ./gguf/phi-3.5-128k-mini_Q4_K_M.gguf Q4_K_M

3. Pruebas

Instalar llama-cpp-python

pip install llama-cpp-python -U

Nota

Si usas Apple Silicon, por favor instala llama-cpp-python así

CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python -U

Pruebas

llama.cpp/llama-cli --model <Your phi-3.5-128k-mini_Q4_K_M.gguf location> --prompt "<|user|>\nCan you introduce .NET<|end|>\n<|assistant|>\n"  --gpu-layers 10

Recursos

  1. Aprende más sobre llama.cpp https://onnxruntime.ai/docs/genai/

  2. Aprende más sobre GGUF https://huggingface.co/docs/hub/en/gguf

Descargo de responsabilidad: Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.