llama.cpp is een open-source softwarebibliotheek, voornamelijk geschreven in C++, die inferentie uitvoert op verschillende Large Language Models (LLM's), zoals Llama. Het hoofddoel is om state-of-the-art prestaties te leveren voor LLM-inferentie op een breed scala aan hardware met minimale configuratie. Daarnaast zijn er Python-bindings beschikbaar voor deze bibliotheek, die een high-level API bieden voor tekstafwerking en een OpenAI-compatibele webserver.
Het belangrijkste doel van llama.cpp is om LLM-inferentie mogelijk te maken met minimale setup en state-of-the-art prestaties op diverse hardware - zowel lokaal als in de cloud.
- Eenvoudige C/C++ implementatie zonder afhankelijkheden
- Apple silicon wordt volledig ondersteund - geoptimaliseerd via ARM NEON, Accelerate en Metal frameworks
- AVX, AVX2 en AVX512 ondersteuning voor x86-architecturen
- 1,5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit en 8-bit integer quantisatie voor snellere inferentie en minder geheugengebruik
- Aangepaste CUDA-kernels voor het draaien van LLM's op NVIDIA GPU's (ondersteuning voor AMD GPU's via HIP)
- Vulkan- en SYCL-backend ondersteuning
- CPU+GPU hybride inferentie om modellen die groter zijn dan de totale VRAM-capaciteit gedeeltelijk te versnellen
Het Phi-3.5-Instruct model kan worden gequantized met llama.cpp, maar Phi-3.5-Vision en Phi-3.5-MoE worden nog niet ondersteund. Het formaat dat door llama.cpp wordt geconverteerd is gguf, wat ook het meest gebruikte quantisatieformaat is.
Er zijn veel gequantizeerde GGUF-formaat modellen beschikbaar op Hugging Face. AI Foundry, Ollama en LlamaEdge vertrouwen op llama.cpp, dus GGUF-modellen worden ook vaak gebruikt.
GGUF is een binair formaat dat geoptimaliseerd is voor snelle laad- en opslagtijden van modellen, waardoor het zeer efficiënt is voor inferentie. GGUF is ontworpen voor gebruik met GGML en andere executors. GGUF is ontwikkeld door @ggerganov, die ook de ontwikkelaar is van llama.cpp, een populair C/C++ LLM-inferentiekader. Modellen die oorspronkelijk in frameworks zoals PyTorch zijn ontwikkeld, kunnen worden geconverteerd naar het GGUF-formaat voor gebruik met deze engines.
ONNX is een traditioneel machine learning/deep learning formaat, dat goed wordt ondersteund in verschillende AI-frameworks en goede toepassingsmogelijkheden heeft op edge-apparaten. GGUF daarentegen is gebaseerd op llama.cpp en kan worden gezien als een product uit het GenAI-tijdperk. Beide hebben vergelijkbare toepassingen. Wil je betere prestaties op embedded hardware en applicatielagen, dan is ONNX wellicht de beste keuze. Gebruik je het afgeleide framework en de technologie van llama.cpp, dan is GGUF waarschijnlijk beter.
1. Omgevingsconfiguratie
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j8
2. Quantisatie
Gebruik llama.cpp om Phi-3.5-Instruct te converteren naar FP16 GGUF
./convert_hf_to_gguf.py <Your Phi-3.5-Instruct Location> --outfile phi-3.5-128k-mini_fp16.gguf
Quantizen van Phi-3.5 naar 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. Testen
Installeer llama-cpp-python
pip install llama-cpp-python -U
Opmerking
Als je Apple Silicon gebruikt, installeer dan llama-cpp-python op deze manier
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python -U
Testen
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
- Meer informatie over llama.cpp https://github.com/ggml-org/llama.cpp
- Meer informatie over onnxruntime https://onnxruntime.ai/docs/genai/
- Meer informatie over GGUF https://huggingface.co/docs/hub/en/gguf
Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsdienst Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet als de gezaghebbende bron worden beschouwd. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.