Après avoir ajouté un GPU et paramétrer ma configuration, j’ai voulu benchmarker ma carte graphique. J’ai utilisé Llama.cpp et je l’ai compilé pour utiliser un GPU NVIDIA. Je récapitule ici les différentes étapes.
Matériel utilisé
- OS: Ubuntu 24.04 LTS (Official page)
- GPU: NVIDIA RTX 3060 (affiliate link)
- CPU: AMD Ryzen 7 5700G (affiliate link)
- RAM: 52 GB
- Storage: Samsung SSD 990 EVO 1TB (affiliate link)
Installer le NVIDIA CUDA Toolkit
Pour compiler llama.cpp
, on a besoin d’installer le NVIDIA CUDA Toolkit. Pas de difficulté particulière, il suffit de suivre la documentation (qui est très bien faite).
Une fois fait, il ne faut pas oublier de paramétrer l’environnement post installation actions.
On peut alors vérifier que le toolkit est bien installé (avec son compilateur pour GPU) : samples. Concrètement on fait :
git clone https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples/Samples/1_Utilities/deviceQuery
make
Ce qui donne :
./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "NVIDIA GeForce RTX 3060"
CUDA Driver Version / Runtime Version 12.4 / 12.6
CUDA Capability Major/Minor version number: 8.6
Total amount of global memory: 12004 MBytes (12587106304 bytes)
(028) Multiprocessors, (128) CUDA Cores/MP: 3584 CUDA Cores
GPU Max Clock rate: 1777 MHz (1.78 GHz)
Memory Clock rate: 7501 Mhz
Memory Bus Width: 192-bit
[...]
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 12.4, CUDA Runtime Version = 12.6, NumDevs = 1
Result = PASS
(j’ai coupé une partie de la sortie pour rester succint)
On peut alors passer à l’installer de llama.cpp.
Installation de Llama.cpp
On le trouve ici : llama.cpp. Pour les impatients, les étapes sont :
TL;DR :
- Installer les prérequis
- Récupérer le code
- Compiler avec les options pour GPU NVIDIA
Prérequis
sudo apt install cmake
Récupération du code
Que du classique, pas de surprise :
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
Compilation
Le lien vers la documentation pour les autres options : build.
Sur ma machine :
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
C’est un peu long, ça m’a pris 17 minutes 41 secondes (y’a le temps de prendre un café - ou deux ^^).
Benchmarking
On peut maintenant passer aux mesures.
Récupérer des modèles
La subtilité est que llama.cpp utilise des modèles au format GGUF. On peut en trouver facilement sur HuggingFace. J’ai trouvé la majorité sur le dépôt de Bartowski.
Lancer des tests
Dans le répertoire llama.cpp/build/bin
, je fais :
./llama-bench -p 0 -n 512 -m ../../models/gemma2-2b-GGUF/dolphin-2.9.4-gemma2-2b-Q5_K_M.gguf -m ../../models/Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct-Q5_K_M.gguf -m ../../models/Qwen2.5-Coder-14B-Instruct-GGUF/Qwen2.5-14B-Instruct-Q5_K_M.gguf
Ce qui me donne :
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 CUDA devices:
Device 0: NVIDIA GeForce RTX 3060, compute capability 8.6, VMM: yes
| model | size | params | backend | ngl | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------------: | -------------------: |
| gemma2 2B Q5_K - Medium | 1.79 GiB | 2.61 B | CUDA | 99 | tg512 | 119.00 ± 0.72 |
| llama 8B Q5_K - Medium | 5.33 GiB | 8.03 B | CUDA | 99 | tg512 | 53.01 ± 0.06 |
| qwen2 14B Q5_K - Medium | 9.78 GiB | 14.77 B | CUDA | 99 | tg512 | 28.88 ± 0.03 |
A noter que si un modèle dépasse la capacité du GPU, on obtient une erreur failed to load model 'xxx.gguf'
.
Conclusion
Avec un GPU NVIDIA RTX3060, il est donc possible d’utiliser des modèles de LLM de 14B (14 milliards de paramètres) avec une quantification du type Q5_K_M
de façon tout à fait satisfaisante (le même ordre de vitesse de réponse que ChatGPT 4o).