Grille de tests LLM locaux avec Ollama

8 min de lecture
Grille de tests LLM locaux avec Ollama

Grille de tests LLM locaux avec Ollama

Cette note sert de base reproductible pour comparer plusieurs modèles de langage exécutés localement sur une même machine via Ollama.

L’objectif est d’observer :

  • la vitesse réelle
  • la qualité du français
  • la fiabilité technique
  • la capacité à suivre des consignes strictes
  • la tendance à halluciner

Une petite batterie de prompts identiques permet d’obtenir une comparaison plus cohérente entre modèles.


Modèles à tester

  • phi3:latest
  • mistral:7b
  • mistral:7b-instruct
  • qwen2.5:7b
  • llama3.1:8b

Critères d’évaluation

Pour chaque modèle, noter :

  • Vitesse
  • Qualité du français
  • Qualité technique
  • Respect des consignes
  • Tendance à halluciner
  • Utilité globale

Barème suggéré : /5


Tableau de score

Modèle Vitesse Qualité FR Technique Suit consignes Hallucinations Utilité globale Notes
phi3:latest
mistral:7b
mistral:7b-instruct
qwen2.5:7b
llama3.1:8b

Batterie de 10 prompts

Prompt 1 — Résumé

Instruction

Résume le texte suivant en 5 points clairs, sans inventer d'information :

Les modèles de langage locaux attirent de plus en plus d’utilisateurs qui souhaitent conserver leurs données sur leur propre machine. Exécuter un LLM localement permet d’éviter d’envoyer certaines informations sensibles vers un service externe, ce qui peut être important pour des notes privées, des fichiers techniques ou des essais de code. Cette approche donne aussi plus de liberté dans le choix des modèles, des quantifications et des outils utilisés.

En revanche, l’exécution locale dépend fortement du matériel disponible. La quantité de RAM, la présence ou non d’un GPU compatible, la taille de la VRAM et la qualité des pilotes influencent directement l’expérience. Un modèle trop lourd peut devenir lent, saturer la mémoire ou provoquer un recours important au swap, ce qui dégrade fortement les performances.

Pour évaluer un modèle local, il ne suffit pas de regarder sa taille. Il faut aussi considérer la qualité du français, la capacité à suivre des consignes strictes, la fiabilité technique et la vitesse réelle sur la machine visée. Deux modèles proches en taille peuvent avoir des comportements très différents selon la tâche demandée.

Dans un contexte personnel, la meilleure approche consiste souvent à définir une petite batterie de tests reproductibles. En comparant plusieurs modèles sur les mêmes prompts, il devient plus facile d’identifier celui qui offre le meilleur compromis entre rapidité, qualité des réponses et confort d’utilisation.

Prompt 2 — Réécriture

Instruction

Réécris ce texte dans un style plus professionnel et plus fluide, sans changer le sens :

J’ai activé Vulkan dans le service Ollama parce que sans cela le programme semblait seulement utiliser le CPU. Après modification du service systemd et redémarrage, les journaux ont montré que la carte AMD Radeon RX 580 était détectée. Le backend ROCm semblait encore échouer, mais le backend Vulkan lui fonctionnait. Les modèles comme phi3 et mistral 7b ont pu être chargés sur la carte graphique avec plusieurs couches déportées sur le GPU. Cela rend la machine plus intéressante pour faire des tests locaux même si elle garde des limites pour les plus gros modèles.

Prompt 3 — Explication simple

Explique simplement ce qu'est un conteneur Docker, puis donne un exemple concret sur Ubuntu.

Prompt 4 — Explication technique

Explique la différence entre un reverse proxy, un serveur web et un serveur d'application.
Réponse structurée en 5 points.

Prompt 5 — Shell Ubuntu

Donne-moi une commande Ubuntu pour trouver les plus gros dossiers dans mon répertoire personnel.
Explique la commande.

Prompt 6 — Diagnostic

Instruction

Voici un message de situation technique. Explique les causes probables et les étapes de diagnostic, dans l'ordre :

Lorsqu’un modèle local est lancé, la première réponse prend beaucoup de temps et la machine devient moins réactive. L’utilisation de la RAM augmente fortement et le swap commence à monter. Dans certains cas, le modèle répond correctement, mais dans d’autres la génération semble se bloquer plus longtemps que prévu. L’utilisateur ne sait pas encore si le problème vient de la taille du modèle, du contexte configuré, de l’absence d’accélération GPU ou d’une combinaison de plusieurs facteurs.

Prompt 7 — Comparaison

Compare PostgreSQL et SQLite pour un projet personnel Dockerisé.
Réponse concise en tableau mental : cas d'usage, avantages, limites.

Prompt 8 — Consigne stricte

Réponds en exactement 3 phrases.
Sujet : pourquoi utiliser Git.

Prompt 9 — Plan d’action

Je veux tester plusieurs LLM locaux sur mon desktop.
Propose une méthode simple, reproductible, en 6 étapes maximum.

Prompt 10 — Rédaction utile

Rédige une courte note technique en français sur le sujet suivant :
activation de Vulkan pour Ollama sur une carte AMD RX 580 sous Linux.
Structure : contexte, étapes, vérification, conclusion.

Textes additionnels de secours

Résumé alternatif 1

Dans un projet personnel auto-hébergé, Docker permet d’isoler les services et de simplifier le déploiement. On peut exécuter séparément un backend, un frontend, une base de données et un reverse proxy, chacun dans son propre conteneur. Cette approche facilite les mises à jour et limite les conflits de dépendances entre applications.

Cependant, la persistance des données doit être pensée avec soin. Si une base PostgreSQL est lancée dans un conteneur sans volume, les données risquent d’être perdues lors de la suppression du conteneur. Il faut donc distinguer les éléments jetables, comme l’image d’un service, des éléments persistants, comme les volumes de base de données, les fichiers médias ou certaines configurations locales.

Dans un environnement de développement, Docker Compose permet de décrire l’ensemble des services dans un fichier unique. On peut y définir les ports, les volumes, les variables d’environnement et les dépendances entre services. Cette standardisation rend le projet plus reproductible : une autre machine peut en principe relancer l’ensemble avec les mêmes commandes.

En production, il faut aller plus loin. Il devient nécessaire de gérer correctement les secrets, les sauvegardes, la supervision et les certificats TLS. Une architecture simple en développement peut donc évoluer vers une structure plus stricte, avec reverse proxy, sauvegardes planifiées et séparation plus nette entre les environnements de test et de production.

Résumé alternatif 2

Sur une distribution Linux moderne, systemd joue souvent le rôle de système d’initialisation et de gestionnaire de services. Il permet de lancer automatiquement des services au démarrage, de surveiller leur état et de les redémarrer en cas de panne. Pour l’administrateur, cela simplifie l’exploitation d’applications qui doivent rester disponibles en permanence.

Un service systemd est défini par une unité contenant des paramètres comme la commande à lancer, l’utilisateur d’exécution, la politique de redémarrage et parfois des variables d’environnement. Une fois l’unité installée, on peut utiliser systemctl pour démarrer, arrêter, redémarrer ou activer le service au boot.

L’intérêt de systemd est aussi lié à la journalisation centralisée avec journalctl. Au lieu d’avoir à chercher des logs dispersés, on peut consulter les messages d’un service particulier, suivre les erreurs après un redémarrage ou vérifier les événements du boot en cours. Cela aide beaucoup pour le diagnostic rapide.

En contrepartie, systemd ajoute une couche d’abstraction qui peut sembler opaque au début. L’administrateur doit apprendre quelques commandes clés et comprendre la différence entre le service principal, les fichiers d’unité et les éventuels fichiers override. Une fois ces bases acquises, la gestion quotidienne devient généralement plus cohérente.

Réécriture alternative 1

Je veux documenter mon projet pour que plus tard je puisse me souvenir pourquoi j’ai choisi cette structure et aussi pour que si je dois reprendre le travail dans quelques mois cela soit moins mélangeant. En ce moment j’ai plusieurs services Docker, des fichiers d’environnement, des scripts et un reverse proxy, mais la documentation n’est pas encore bien organisée et j’ai tendance à ajouter des détails au fur et à mesure sans toujours restructurer le document. J’aimerais arriver à quelque chose de plus clair, plus lisible et plus utile pour une reprise future du projet.

Réécriture alternative 2

L’application utilise une architecture séparée en plusieurs composants distincts dans le but de réduire les dépendances croisées entre le frontend, le backend et la base de données, ce qui permet théoriquement une meilleure maintenabilité, mais qui implique également une certaine complexité au niveau de la configuration initiale, particulièrement pour les variables d’environnement, les ports exposés et les interactions réseau entre conteneurs, ce qui peut devenir une source d’erreurs lorsqu’on modifie plusieurs éléments à la fois sans mettre à jour la documentation de manière synchrone.

Diagnostic alternatif

Le service démarre correctement après un redémarrage du système, mais l’application web ne répond pas sur le port attendu. Les conteneurs semblent actifs selon docker compose ps, mais la page affiche une erreur de connexion. Les logs du reverse proxy montrent des tentatives vers une cible qui semble exister, mais les réponses sont intermittentes. Une partie de la configuration a été modifiée récemment pour changer les noms de services et les variables d’environnement.

Section résultats

Session de test

Date :

Machine : TODO: décrire la machine utilisée

OS : TODO

Version Ollama : TODO

GPU : TODO

Mémoire RAM : TODO

VRAM : TODO


Notes libres


Conclusion

  • Modèle le plus rapide :
  • Modèle le plus utile en français :
  • Modèle le plus fiable techniquement :
  • Meilleur compromis global :