mirror of
https://github.com/Ladebeze66/llm_lab_perso.git
synced 2025-12-13 10:46:50 +01:00
306 lines
7.4 KiB
Markdown
306 lines
7.4 KiB
Markdown
# 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é
|
|
|
|
1. Créez un fichier nommé `Modelfile` (sans extension)
|
|
2. Ajoutez la configuration adaptée à votre modèle
|
|
3. Utilisez `ollama create` pour 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:
|
|
|
|
```cmd
|
|
ollama create llama3-8b-optimized -f Modelfile
|
|
```
|
|
|
|
Pour utiliser le modèle:
|
|
|
|
```cmd
|
|
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 `f16` activé
|
|
|
|
### GPU 12 GB (ex: RTX 3060 Ti, RTX 4070)
|
|
- Modèles jusqu'à 13B
|
|
- Utilisez `num_gpu 70-100`
|
|
- `num_ctx` jusqu'à 8192
|
|
- `num_batch` jusqu'à 512
|
|
|
|
### GPU 16 GB (ex: RTX 3080, RTX 4080)
|
|
- Modèles jusqu'à 34B (avec optimisations)
|
|
- `num_gpu 80-100`
|
|
- `num_ctx` jusqu'à 8192
|
|
- `num_batch` jusqu'à 1024
|
|
|
|
### GPU 24 GB+ (ex: RTX 3090, RTX 4090)
|
|
- Modèles jusqu'à 70B
|
|
- `num_gpu 100`
|
|
- `num_ctx` jusqu'à 16384
|
|
- `num_batch` jusqu'à 2048
|
|
|
|
## Configuration système recommandée
|
|
|
|
Pour tirer le meilleur parti de ces optimisations:
|
|
|
|
```ini
|
|
[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:
|
|
|
|
```batch
|
|
@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:
|
|
|
|
```python
|
|
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:
|
|
```cmd
|
|
python benchmark_model.py llama3-8b-optimized
|
|
``` |