llama.cpp est une bibliothèque logicielle open-source principalement écrite en C++ qui réalise l'inférence sur divers modèles de langage de grande taille (LLM), tels que Llama. Son objectif principal est de fournir des performances de pointe pour l'inférence LLM sur une large gamme de matériel avec une configuration minimale. De plus, il existe des liaisons Python disponibles pour cette bibliothèque, qui offrent une API de haut niveau pour la complétion de texte et un serveur web compatible OpenAI.
Le principal objectif de llama.cpp est de permettre l'inférence LLM avec une configuration minimale et des performances de pointe sur une grande variété de matériel - localement et dans le cloud.
- Implémentation en C/C++ sans aucune dépendance
- Apple silicon est un citoyen de première classe - optimisé via les frameworks ARM NEON, Accelerate et Metal
- Support AVX, AVX2 et AVX512 pour les architectures x86
- Quantification en entiers de 1.5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit et 8-bit pour une inférence plus rapide et une utilisation réduite de la mémoire
- Noyaux CUDA personnalisés pour exécuter des LLM sur les GPU NVIDIA (support pour les GPU AMD via HIP)
- Support des backends Vulkan et SYCL
- Inférence hybride CPU+GPU pour accélérer partiellement les modèles plus grands que la capacité totale de la VRAM
Le modèle Phi-3.5-Instruct peut être quantifié en utilisant llama.cpp, mais Phi-3.5-Vision et Phi-3.5-MoE ne sont pas encore supportés. Le format converti par llama.cpp est gguf, qui est également le format de quantification le plus largement utilisé.
Il existe un grand nombre de modèles au format GGUF quantifiés sur Hugging Face. AI Foundry, Ollama et LlamaEdge dépendent de llama.cpp, donc les modèles GGUF sont également souvent utilisés.
GGUF est un format binaire optimisé pour le chargement et la sauvegarde rapides des modèles, le rendant très efficace pour les besoins d'inférence. GGUF est conçu pour être utilisé avec GGML et d'autres exécutants. GGUF a été développé par @ggerganov qui est également le développeur de llama.cpp, un cadre d'inférence LLM populaire en C/C++. Les modèles initialement développés dans des cadres comme PyTorch peuvent être convertis au format GGUF pour être utilisés avec ces moteurs.
ONNX est un format traditionnel de machine learning/deep learning, bien supporté dans différents cadres d'IA et qui a de bons scénarios d'utilisation dans les dispositifs de périphérie. Quant à GGUF, il est basé sur llama.cpp et peut être considéré comme produit à l'ère de GenAI. Les deux ont des usages similaires. Si vous voulez de meilleures performances dans le matériel embarqué et les couches d'application, ONNX peut être votre choix. Si vous utilisez le cadre dérivé et la technologie de llama.cpp, alors GGUF peut être meilleur.
1. Configuration de l'environnement
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j8
2. Quantification
Utilisation de llama.cpp pour convertir Phi-3.5-Instruct en GGUF FP16
./convert_hf_to_gguf.py <Your Phi-3.5-Instruct Location> --outfile phi-3.5-128k-mini_fp16.gguf
Quantification de Phi-3.5 en 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. Test
Installer llama-cpp-python
pip install llama-cpp-python -U
Note
Si vous utilisez Apple Silicon, veuillez installer llama-cpp-python comme ceci
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python -U
Test
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
-
En savoir plus sur llama.cpp https://onnxruntime.ai/docs/genai/
-
En savoir plus sur GGUF https://huggingface.co/docs/hub/en/gguf
Avertissement : Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.