Sur une Tesla P40, le fp16 rendait mon modèle de diffusion 14 fois plus lent

Je fais tourner l'IA de Fring, une application gratuite de garde-robe, sur une Tesla P40 d'occasion dans mon homelab. L'essayage virtuel repose sur Leffa, un modèle de diffusion. Pendant un mois, chaque rendu a pris environ 21 minutes, et je pensais que c'était la limite d'une carte de 2016. Ce n'en était pas une.

Le conseil par défaut, appliqué à la mauvaise carte

Le modèle était chargé en fp16, parce que « passer en demi-précision pour économiser la VRAM » est le conseil par défaut, partout. Il est juste sur presque toutes les cartes récentes. Il est faux sur Pascal grand public : la P40 (GP102, capacité de calcul 6.1) exécute le fp16 à environ 1/64 du débit fp32. Le code disait fp16 depuis la mise en service ; l'avertissement traînait dans un ticket depuis un mois. Personne n'avait relu les deux ensemble.

Les chiffres, mêmes entrées, même graine

Mesuré le 23 septembre 2026, sur le même rendu de 20 pas.

fp16 — 63,8 s par pas de diffusion, 6,6 Go de VRAM, 1241 s pour le rendu complet.

fp32 — 4,7 s par pas, 9,8 Go de VRAM, 85 s pour le rendu complet.

Les images sont quasi identiques (0,77/255 d'écart moyen par pixel). Et la carte n'avait jamais manqué de mémoire : le modèle occupait 6,4 Go sur 23. L'économie de VRAM que le fp16 achetait ne servait à rien, et elle coûtait un facteur 14.

Deux autres pièges du même mois

Une roue torch compilée pour CPU seul. Le Dockerfile installait torch depuis l'index CPU, hérité d'un ancien serveur dont la carte de 4 Go ne pouvait pas tenir le modèle. Sur la P40, `nvidia-smi` voyait la carte, mais `torch.cuda.is_available()` répondait False, et chaque rendu prenait des heures sur le processeur. Vérifier dans le conteneur, pas sur l'hôte.

Une dépendance non épinglée. Une mise à jour de mediapipe a retiré `mediapipe.solutions`. La sonde de santé ne testait que l'import du paquet : elle continuait d'annoncer l'estimation de pose comme fonctionnelle pendant que le service retombait en silence sur un collage centré. Une sonde doit tester l'attribut réellement utilisé, pas le paquet.

Ce qui a changé

Le service ne retient plus le fp16 que si la carte l'accélère réellement (Volta et plus récent, ou P100), ou si le fp32 ne tient pas dans la VRAM — sur une carte de 4 Go, le fp16 reste ce qui fait tenir le modèle. Une variable d'environnement force l'un ou l'autre. Un essayage virtuel prend maintenant une à deux minutes, file d'attente comprise.

La leçon

Pour qui récupère une vieille carte de datacenter : mesurer avant d'appliquer le conseil habituel. Un chiffre pris en cinq minutes aurait épargné un mois de rendus à 21 minutes.

L'application derrière ces chiffres

Fring est une garde-robe numérique gratuite : vous photographiez un vêtement, l'IA remplit la fiche, l'application compose des tenues avec ce que vous possédez et calcule le coût par port de chaque pièce.

Créer votre compte gratuit