Accélérez vos pipelines d’IA visuelle avec VC-6 CUDA : un codec conçu pour le parallélisme GPU
L’essor continu de la puissance de calcul des GPU NVIDIA ouvre de nouvelles perspectives pour optimiser les charges de travail vision AI : maintenir le matériel alimenté en données. Alors que les performances des GPU progressent exponentiellement, les étapes classiques des pipelines de données — comme l’I/O depuis le stockage, les transferts hôte-accélérateur via PCIe ou le traitement CPU (décodage, redimensionnement) — peinent à suivre. Ce décalage crée une goulée d’eau : l’accélérateur reste en attente de données, un phénomène connu sous le nom de GPU starvation. Pour combler cet écart entre les données et les tensors, il faut repenser les pipelines avec une logique adaptée aux architectures modernes haute performance. Cet article présente l’implémentation CUDA-accelérée de VC-6, un codec vidéo standard SMPTE ST 2117-1 conçu pour tirer parti de la parallélisation massive. Contrairement aux codecs traditionnels qui encodent une image en un bloc plat, VC-6 construit une hiérarchie multi-résolution basée sur une structure S-Tree. Chaque niveau, appelé echelon, représente une qualité différente (LoQ). L’encodage procède par descente récursive : la plus petite résolution (LoQ racine) est encodée directement, puis chaque niveau supérieur est reconstruit par suréchantillonnage du niveau inférieur, auquel on ajoute les résidus. Le décodage inverse ce processus, en partant de la racine et en ajoutant progressivement les résidus. La structure hiérarchique de VC-6 permet une décodage sélectif et parallèle : chaque plan couleur, échelon ou tuile peut être traité indépendamment. Cela rend le codec particulièrement adapté aux applications IA, où l’accès ciblé à des régions d’intérêt (RoI), à des résolutions partielles ou à des plans spécifiques est crucial. Cette capacité, appelée selective data recall, permet de ne télécharger que les octets nécessaires, réduisant drastiquement l’I/O. Sur le jeu de données DIV2K, cela a permis des économies de 37 % et 72 % en taille de fichier pour des résolutions réduites, réduisant ainsi la charge réseau, de stockage, de bande passante PCIe et de mémoire VRAM. L’architecture de VC-6 s’aligne naturellement avec le modèle SIMT des GPU NVIDIA. Bien que la hiérarchie suggère un traitement séquentiel, la structure S-Tree minimise les dépendances entre composants, permettant une parallélisation fine. Cette caractéristique, initialement conçue pour des workflows d’édition vidéo à faible latence, s’avère idéale pour les pipelines IA, où la haute-throughput est primordiale. La collaboration entre V-Nova et NVIDIA a permis de porter VC-6 en CUDA, offrant une intégration fluide avec PyTorch et d’autres outils IA, sans copie CPU ni synchronisation coûteuse. La version Python de VC-6 CUDA (en version alpha) permet de créer des objets codec, encoder, décoder et transcoder directement sur GPU. L’output peut être un tableau CUDA via l’interface __cuda_array_interface__, compatible avec CuPy, PyTorch et nvImageCodec. Des fonctions de décodage partiel permettent de spécifier une RoI ou une résolution cible, n’extrayant que les données nécessaires. Une fonction utilitaire permet même d’inspecter l’en-tête du fichier pour estimer la taille requise avant le décodage. Les benchmarks sur une RTX PRO 6000 Blackwell montrent une amélioration significative du décodage CUDA par rapport à CPU et OpenCL, surtout en mode throughput. L’analyse avec Nsight Systems révèle des goulets d’étranglement : les chaînes d’upsampling ont un faible taux d’utilisation GPU, surtout aux faibles résolutions, où une seule unité de calcul est active. L’optimisation via des graphes CUDA ou la fusion de noyaux devrait réduire cette surcharge. L’approche parallèle au niveau du noyau (kernel-level parallelism) est inefficace à grande échelle ; mieux vaut lancer des grilles plus grandes pour exploiter pleinement le GPU. En conclusion, VC-6 sur CUDA offre une solution concrète pour accélérer les pipelines de données IA, en alignant la parallélisation native du codec avec les capacités du GPU. Bien que la version alpha soit déjà performante, les optimisations futures — notamment le batching natif — promettent des gains supplémentaires. Pour les développeurs de systèmes multimodaux à haut débit, VC-6 CUDA est une piste prometteuse pour surmonter la goulée d’eau des données et maximiser l’efficacité des modèles.