mirror of
https://github.com/Ladebeze66/llm_lab_perso.git
synced 2025-12-13 10:46:50 +01:00
7.4 KiB
7.4 KiB
Optimisation des modèles Ollama pour Windows
Ce guide explique comment optimiser les performances des différents modèles Ollama sur Windows en utilisant des Modelfiles personnalisés.
Principes généraux d'optimisation
Les paramètres clés à ajuster pour chaque modèle sont:
| Paramètre | Description | Impact |
|---|---|---|
num_gpu |
Pourcentage du modèle à charger sur GPU | Plus élevé = plus rapide, mais consomme plus de VRAM |
num_thread |
Nombre de threads CPU à utiliser | À ajuster selon votre CPU |
num_ctx |
Taille du contexte | Plus grand = plus de mémoire nécessaire |
num_batch |
Taille du lot pour l'inférence | Augmente la vitesse mais consomme plus de RAM |
f16 |
Utilisation de la précision FP16 | Réduit l'utilisation de mémoire de moitié |
temperature |
Niveau de créativité | N'affecte pas les performances |
top_p |
Contrôle de diversité | N'affecte pas les performances |
Création d'un Modelfile optimisé
- Créez un fichier nommé
Modelfile(sans extension) - Ajoutez la configuration adaptée à votre modèle
- Utilisez
ollama createpour créer une version optimisée
Exemples de Modelfiles optimisés
Llama 3 8B - Performance maximale
FROM llama3:8b
PARAMETER temperature 0.7
PARAMETER num_gpu 100
PARAMETER num_thread 12
PARAMETER num_ctx 8192
PARAMETER num_batch 512
Llama 3 8B - Économie de mémoire
FROM llama3:8b
PARAMETER temperature 0.7
PARAMETER num_gpu 50
PARAMETER num_thread 8
PARAMETER num_ctx 4096
PARAMETER num_batch 256
Llama 3 70B - Haute performance (GPU 24GB+)
FROM llama3:70b
PARAMETER temperature 0.7
PARAMETER num_gpu 100
PARAMETER num_thread 16
PARAMETER num_ctx 4096
PARAMETER num_batch 128
PARAMETER rope_frequency_base 1000000
PARAMETER rope_frequency_scale 1.0
Mistral 7B - Équilibré
FROM mistral:7b
PARAMETER temperature 0.7
PARAMETER num_gpu 100
PARAMETER num_thread 8
PARAMETER num_ctx 8192
PARAMETER num_batch 512
Stable Code 3B - Optimisé pour programmation
FROM stablecode:3b
PARAMETER temperature 0.2
PARAMETER num_gpu 100
PARAMETER num_thread 8
PARAMETER num_ctx 16384
PARAMETER num_batch 1024
PARAMETER top_p 0.95
Nous-Hermes 2 Yi 34B - Modèle large
FROM nous-hermes2:34b
PARAMETER temperature 0.7
PARAMETER num_gpu 90
PARAMETER num_thread 12
PARAMETER num_ctx 4096
PARAMETER num_batch 128
Comment appliquer ces configurations
Pour créer une version optimisée d'un modèle:
ollama create llama3-8b-optimized -f Modelfile
Pour utiliser le modèle:
ollama run llama3-8b-optimized
Recommandations par taille de GPU
GPU 6-8 GB (ex: RTX 2060, RTX 3060)
- Modèles jusqu'à 7B
- Utilisez
num_gpu 50-80 - Réduisez
num_ctxà 2048-4096 - Essayez avec un paramètre
f16activé
GPU 12 GB (ex: RTX 3060 Ti, RTX 4070)
- Modèles jusqu'à 13B
- Utilisez
num_gpu 70-100 num_ctxjusqu'à 8192num_batchjusqu'à 512
GPU 16 GB (ex: RTX 3080, RTX 4080)
- Modèles jusqu'à 34B (avec optimisations)
num_gpu 80-100num_ctxjusqu'à 8192num_batchjusqu'à 1024
GPU 24 GB+ (ex: RTX 3090, RTX 4090)
- Modèles jusqu'à 70B
num_gpu 100num_ctxjusqu'à 16384num_batchjusqu'à 2048
Configuration système recommandée
Pour tirer le meilleur parti de ces optimisations:
[Windows Power Plan]
Plan d'alimentation: Hautes performances
[NVIDIA Control Panel]
Mode de gestion d'alimentation: Préférer les performances maximales
Mode de préemption CUDA: Automatique
Paramètre GPU scheduling: Automatique
Script d'optimisation automatique
Créez un fichier optimize_models.bat pour automatiser l'optimisation:
@echo off
setlocal
echo Optimisation des modèles Ollama pour Windows...
set MODEL=%1
if "%MODEL%"=="" (
echo Usage: optimize_models.bat [model_name]
echo Exemple: optimize_models.bat llama3:8b
exit /b 1
)
REM Détecter la quantité de VRAM
for /f "tokens=*" %%a in ('nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits') do set VRAM=%%a
echo VRAM détectée: %VRAM% MiB
REM Déterminer les paramètres optimaux
set NUM_GPU=100
set NUM_CTX=8192
set NUM_BATCH=512
if %VRAM% LSS 8000 (
set NUM_GPU=50
set NUM_CTX=4096
set NUM_BATCH=256
) else if %VRAM% LSS 12000 (
set NUM_GPU=80
set NUM_CTX=4096
set NUM_BATCH=512
) else if %VRAM% LSS 16000 (
set NUM_GPU=90
set NUM_CTX=8192
set NUM_BATCH=1024
) else if %VRAM% LSS 24000 (
set NUM_GPU=100
set NUM_CTX=8192
set NUM_BATCH=1024
) else (
set NUM_GPU=100
set NUM_CTX=16384
set NUM_BATCH=2048
)
REM Créer un Modelfile temporaire
echo FROM %MODEL% > Modelfile
echo. >> Modelfile
echo PARAMETER temperature 0.7 >> Modelfile
echo PARAMETER num_gpu %NUM_GPU% >> Modelfile
echo PARAMETER num_thread 8 >> Modelfile
echo PARAMETER num_ctx %NUM_CTX% >> Modelfile
echo PARAMETER num_batch %NUM_BATCH% >> Modelfile
REM Extraire le nom du modèle (sans tag)
for /f "tokens=1 delims=:" %%a in ("%MODEL%") do set MODEL_NAME=%%a
echo Configuration optimisée pour votre GPU:
echo - num_gpu: %NUM_GPU%
echo - num_ctx: %NUM_CTX%
echo - num_batch: %NUM_BATCH%
echo Création du modèle optimisé %MODEL_NAME%-optimized...
ollama create %MODEL_NAME%-optimized -f Modelfile
echo Modèle optimisé créé avec succès!
echo Utilisez: ollama run %MODEL_NAME%-optimized
del Modelfile
endlocal
Mesurer les performances
Utilisez ce script Python pour mesurer les performances de vos modèles optimisés:
import time
import requests
import json
import argparse
def benchmark_model(model_name, prompt_length=100, repeats=3):
base_url = "http://localhost:11434/api/generate"
# Créer un prompt de test
prompt = "Explique-moi en détail " * prompt_length
total_time = 0
total_tokens = 0
print(f"Benchmark du modèle: {model_name}")
print(f"Longueur du prompt: {len(prompt)} caractères")
print(f"Répétitions: {repeats}")
print("-" * 50)
for i in range(repeats):
print(f"Test {i+1}/{repeats}...")
start_time = time.time()
response = requests.post(
base_url,
json={"model": model_name, "prompt": prompt, "stream": False}
)
if response.status_code != 200:
print(f"Erreur: {response.status_code}")
print(response.text)
return
result = response.json()
end_time = time.time()
duration = end_time - start_time
tokens = len(result.get("response", "").split())
total_time += duration
total_tokens += tokens
print(f" Temps: {duration:.2f}s, Tokens: {tokens}")
# Pause entre les tests
time.sleep(1)
avg_time = total_time / repeats
avg_tokens = total_tokens / repeats
tokens_per_second = avg_tokens / avg_time
print("-" * 50)
print(f"Résultats pour {model_name}:")
print(f"Temps moyen: {avg_time:.2f}s")
print(f"Tokens moyens: {avg_tokens:.0f}")
print(f"Vitesse: {tokens_per_second:.2f} tokens/seconde")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Benchmark Ollama Models")
parser.add_argument("model", help="Nom du modèle à tester")
args = parser.parse_args()
benchmark_model(args.model)
Utilisez ce script comme suit:
python benchmark_model.py llama3-8b-optimized