Banc d'essai inférence GPU
DaniiT — comparaison de deux postes pour l'inférence locale de LLM. Relevé du 9 octobre 2026.
Légende : mesuré sur la machine · fiche officielle NVIDIA · non mesuré / inconnu
Les machines
DANIIT009
Fedora · AMD Ryzen 9 9950X (16 cœurs / 32 threads) · 46 Go RAM
GPU : GeForce RTX 5070 Ti
Daniit010
Ubuntu · AMD Ryzen 5 PRO 5655G (6 cœurs / 12 threads) · 30 Go RAM · Ollama (EuroLLM-22B)
GPU : GeForce RTX 5060 Ti 16 Go
Comparaison des GPU
| Caractéristique | RTX 5070 Ti (DANIIT009) | RTX 5060 Ti (Daniit010) |
|---|---|---|
| Architecture / puce | Blackwell · GB203 | Blackwell · GB206 |
| Cœurs CUDA | 8 960 | 4 608 |
| VRAM | 16 303 Mio · 16 Go GDDR7 | 16 Go GDDR7 (non relevé, NVML indisponible) |
| Bus mémoire / bande passante | 256 bits · 896 Go/s | 128 bits · 448 Go/s |
| Fréquence boost (officielle) | 2,45 GHz | 2,57 GHz |
| Fréquences max (mesurées) | GPU 3 090 MHz · mémoire 14 001 MHz | non mesuré |
| Puissance | limite 300 W (défaut = max) · TGP 300 W | TGP 180 W · limite réelle non mesurée |
| Lien PCIe | max Gen 4 x16 (carte PCIe 5.0, plafonnée par la plateforme ? Gen 1 au repos) | actuel 8 GT/s (Gen 3) x8 · carte PCIe 5.0 x8 — le Ryzen 5655G est limité au PCIe 3.0 |
| Pilote / CUDA | 615.71.09 · CUDA 13.4 | module noyau 595.84, bibliothèque NVML 595.91 (incohérence : nvidia-smi HS) |
| VBIOS | 98.03.58.00.85 | 98.06.39.80.12 |
Sources : NVIDIA RTX 5070 Ti · NVIDIA RTX 5060 Ti. Mesures : nvidia-smi (DANIIT009), /proc/driver/nvidia, lspci et sysfs (Daniit010).
⚠ Daniit010 : nvidia-smi est en panne (incohérence pilote/bibliothèque NVML 595.84 / 595.91). Il faut la corriger, souvent par un simple redémarrage, avant de pouvoir relever la VRAM et la consommation sur cette machine. Les tokens/s restent mesurables sans elle.
Modèles retenus
Tous en quantification Q4_K_M (tag par défaut sur ollama.com), identiques sur les deux machines, et tous sous 10 Go pour laisser de la place au contexte (num_ctx 8192) dans 16 Go.
| Tag Ollama | Taille (ollama.com) | VRAM estimée (ctx 8192) | Tests | Pourquoi |
|---|---|---|---|---|
qwen2.5vl:7b | 6,0 Go | ≈ 7–8 Go | 1 | Modèle vision de référence, rapide |
gemma3:12b | 8,1 Go | ≈ 10–11 Go | 1, 2, 3 | Multimodal (vision + texte) : seul modèle passant les 3 tests |
qwen2.5-coder:14b | 9,0 Go | ≈ 11 Go | 2, 3 | Spécialiste du code |
qwen3:14b | 9,3 Go | ≈ 11–12 Go | 2, 3 | Généraliste récent avec raisonnement (le bloc <think> est ignoré à l'extraction) |
Écartés : deepseek-coder-v2:16b (installé sur DANIIT009, mais publié en Q4_0, pas en Q4_K_M), et EuroLLM-22B (13 Go : trop juste dans 16 Go avec le contexte, il n'est pas orienté code, et les deux machines n'ont pas le même GGUF). Les estimations de VRAM sont théoriques, la VRAM réelle sera mesurée. Aucun de ces 4 modèles n'est encore installé sur les machines : run_all.sh les télécharge (≈ 33 Go par machine).
Protocole
- Ollama, API HTTP locale, mêmes modèles et mêmes prompts sur les deux GPU.
- Options fixes :
temperature 0,seed 42,num_ctx 8192,num_predict 6144. - Pour chaque modèle et test : déchargement du modèle, 1 passage à froid (mesure du temps de chargement), puis 3 passages à chaud. On garde la médiane des 3 passages à chaud.
- Mesures : tokens/s en génération (eval_count / eval_duration), tokens/s du prompt, temps jusqu'au 1er token, durée totale, temps de chargement, VRAM max et puissance max (nvidia-smi échantillonné toutes les 0,5 s, si disponible).
- Qualité vérifiée automatiquement : test 1 = 6 champs comparés à la réponse attendue, test 2 = fichiers présents, HTML lisible et éléments exigés, test 3 =
manage.py check,runserver, puis les deux pages en 200.
Les 3 tests
1. Reconnaissance d'image
Le modèle décrit une photo fixe en répondant en JSON. Réponse attendue : cat, 1, green, tabby, sitting, true. Score sur 6, correspondance exacte. Image : « Cat November 2010-1a », Alvesgaspar, Wikimedia Commons, licence CC BY-SA 3.0 (libre, mais pas du domaine public).
Look at the image and answer ONLY with a JSON object, no other text, using exactly these keys:
{"animal": "<species in one lowercase English word>", "count": <number of animals visible, integer>, "eye_color": "<one lowercase word>", "coat_pattern": "<one lowercase word>", "posture": "<sitting|standing|lying>", "background_sky": <true|false>}
2. Génération d'un site statique
Page vitrine d'une boulangerie de Minsk : index.html + style.css. Le script vérifie 22 points : doctype, titre, lien CSS, header/nav/h1, sections #about/#menu/#contact, tableau d'au moins 4 produits en BYN, adresse, footer, pas de JS, règle @media 600px, accolades CSS équilibrées.
Create a static landing page for "Khleb & Co", an artisan bakery in Minsk, Belarus. Requirements: - Exactly two files: index.html and style.css. No JavaScript, no external CDN, no images files (use CSS colors only). - index.html must be valid HTML5 with <!DOCTYPE html>, <html lang="en">, <meta charset="utf-8">, <meta name="viewport" ...>, <title> containing "Khleb & Co", and a <link rel="stylesheet" href="style.css">. - A <header> with the bakery name in an <h1> and a <nav> with links to #about, #menu, #contact. - Three <section> elements with id="about", id="menu" and id="contact". - The menu section contains a <table> with at least 4 products and prices in BYN. - The contact section contains the address "Nezavisimosti Avenue 10, Minsk" and opening hours. - A <footer> with the text "© 2026 Khleb & Co". - style.css must be responsive: include at least one @media (max-width: 600px) rule. Output format: output each file as a fenced code block whose first line is a comment-free header line "FILE: <path>" placed immediately before the block, like this: FILE: index.html ```html ... ``` FILE: style.css ```css ... ``` Output nothing else.
3. Génération d'un projet Django à deux pages
Projet benchsite, app pages, accueil + contact avec formulaire. Le script écrit les fichiers dans un dossier temporaire, puis lance manage.py check et runserver. Il vérifie que / et /contact/ renvoient 200, que le titre est présent et que le formulaire contient le jeton CSRF (14 points).
Create a minimal Django 5 project named "benchsite" with one app named "pages".
Requirements:
- Files to produce (and only these): manage.py, benchsite/__init__.py, benchsite/settings.py, benchsite/urls.py, benchsite/wsgi.py, pages/__init__.py, pages/apps.py, pages/views.py, pages/urls.py, pages/forms.py, pages/templates/pages/base.html, pages/templates/pages/home.html, pages/templates/pages/contact.html.
- settings.py: DEBUG = True, ALLOWED_HOSTS = ["*"], SQLite database at BASE_DIR / "db.sqlite3", "pages" in INSTALLED_APPS, APP_DIRS templates enabled, a SECRET_KEY string.
- URL "/" renders home.html with an <h1> containing "Welcome to BenchSite".
- URL "/contact/" renders contact.html with a Django form (ContactForm in forms.py with fields name, email, message) rendered inside a <form method="post"> with {% csrf_token %}. On valid POST, render the same page with the text "Thank you".
- Both templates extend base.html, which has links to both pages.
- No database models, no migrations needed.
Output format: output each file as a fenced code block, with a line "FILE: <path>" immediately before each block, for example:
FILE: manage.py
```python
...
```
Output nothing else.
Scripts / Comment lancer
Fichiers : bench.py · run_all.sh · README.md · prompts : test1, test2, test3 · test1.jpg
Sur DANIIT009 et sur Daniit010, mêmes commandes, la machine étant au repos (rien d'autre sur le GPU) :
mkdir -p ~/bench && cd ~/bench for f in bench.py run_all.sh test1.jpg prompts/test1_vision.txt prompts/test2_static_site.txt prompts/test3_django.txt; do curl -fsSL --create-dirs -o $f https://inference.daniit-software.by/bench/$f; done chmod +x run_all.sh && ./run_all.sh # résultat : results/$(hostname)-AAAA-MM-JJ.json scp results/*.json lxc-139:/var/www/inference.daniit-software.by/results/ # puis ajouter le nom dans results/index.json
Sur Daniit010, corriger d'abord nvidia-smi (redémarrage), sinon la VRAM et la puissance restent vides.
Résultats de benchmark pas encore mesuré
Aucun test n'a encore été lancé. Aucune donnée pour l'instant.