# =============================================================================
# 3. VERIFICATION DES PREREQUIS
# =============================================================================
def check_docker() -> Tuple[bool, str]:
"""Verifie que Docker est installe et fonctionne."""
try:
result = subprocess.run(
["docker", "--version"],
capture_output=True, text=True, timeout=10
)
if result.returncode == 0:
return True, result.stdout.strip()
return False, "Docker non fonctionnel"
except FileNotFoundError:
return False, "Docker non installe"
except subprocess.TimeoutExpired:
return False, "Docker timeout"
def check_docker_compose() -> Tuple[bool, str]:
"""Verifie que Docker Compose est disponible."""
try:
# Essayer docker compose (v2)
result = subprocess.run(
["docker", "compose", "version"],
capture_output=True, text=True, timeout=10
)
if result.returncode == 0:
return True, result.stdout.strip()
# Fallback docker-compose (v1)
result = subprocess.run(
["docker-compose", "--version"],
capture_output=True, text=True, timeout=10
)
if result.returncode == 0:
return True, result.stdout.strip()
return False, "Docker Compose non fonctionnel"
except FileNotFoundError:
return False, "Docker Compose non installe"
def check_nvidia_gpu() -> Tuple[bool, List[Dict]]:
"""Verifie les GPUs NVIDIA disponibles."""
try:
result = subprocess.run(
["nvidia-smi", "--query-gpu=index,name,memory.total,memory.free", "--format=csv,noheader,nounits"],
capture_output=True, text=True, timeout=10
)
if result.returncode == 0:
gpus = []
for line in result.stdout.strip().split("\n"):
if line:
parts = [p.strip() for p in line.split(",")]
if len(parts) >= 4:
gpus.append({
"index": int(parts[0]),
"name": parts[1],
"total_mb": int(parts[2]),
"free_mb": int(parts[3]),
})
return True, gpus
return False, []
except FileNotFoundError:
return False, []
def check_docker_nvidia() -> Tuple[bool, str]:
"""Verifie que Docker peut acceder aux GPUs."""
try:
result = subprocess.run(
["docker", "run", "--rm", "--gpus", "all", "nvidia/cuda:12.1.0-base-ubuntu22.04", "nvidia-smi", "-L"],
capture_output=True, text=True, timeout=60
)
if result.returncode == 0:
return True, result.stdout.strip()
return False, result.stderr
except Exception as e:
return False, str(e)
# Verification
print("\nVERIFICATION DES PREREQUIS")
print("=" * 60)
# Docker
docker_ok, docker_info = check_docker()
print(f"\nDocker: {'OK' if docker_ok else 'ERREUR'}")
print(f" {docker_info}")
# Docker Compose
compose_ok, compose_info = check_docker_compose()
print(f"\nDocker Compose: {'OK' if compose_ok else 'ERREUR'}")
print(f" {compose_info}")
# GPUs
gpu_ok, gpus = check_nvidia_gpu()
print(f"\nGPUs NVIDIA: {'OK' if gpu_ok else 'ERREUR'}")
if gpus:
for gpu in gpus:
print(f" [{gpu['index']}] {gpu['name']}")
print(f" VRAM: {gpu['total_mb']}MB total, {gpu['free_mb']}MB libre")
else:
print(" Aucun GPU detecte")
# Docker + NVIDIA
if docker_ok and gpu_ok:
print("\nDocker + NVIDIA: Verification en cours...")
docker_nvidia_ok, nvidia_info = check_docker_nvidia()
print(f" {'OK - Docker peut acceder aux GPUs' if docker_nvidia_ok else 'ERREUR'}")
if not docker_nvidia_ok:
print(f" {nvidia_info}")
print("\n Pour resoudre:")
print(" 1. Installez nvidia-container-toolkit")
print(" 2. Redemarrez Docker Desktop")
# Resume
all_ok = docker_ok and compose_ok and gpu_ok
print("\n" + "=" * 60)
if all_ok:
print("TOUS LES PREREQUIS SONT SATISFAITS")
print("Vous pouvez deployer les services localement.")
else:
print("CERTAINS PREREQUIS MANQUENT")
print("Installez les composants manquants ou utilisez le mode REMOTE.")