Copied


NVIDIA détaille le chemin Python vers la mémoire GPU avec GPUDirect Storage

Peter Zhang   Oct 22, 2026 17:04 0 Min Read


NVIDIA a publié un guide technique sur 2026-10-22 expliquant comment les applications Python peuvent lire directement des données dans la mémoire GPU avec Magnum IO GPUDirect Storage, et comment vérifier si une lecture a utilisé le chemin accéléré ou un plan de secours à étapes CPU. Le post indique que la distinction est importante car KvikIO et cuFile prennent des décisions de routage séparées avant qu’une requête n’atteigne le stockage.

Comment le chemin est choisi

Selon NVIDIA, GPUDirect Storage crée un chemin de données direct entre le stockage supporté et la mémoire GPU, évitant ainsi les étapes inutiles à travers la mémoire CPU et réduisant l’utilisation globale du processeur. Dans la pile Python décrite dans l’article, KvikIO se situe au-dessus de cuFile : KvikIO décide s’il appelle cuFile du tout, tandis que cuFile décide si la requête utilise le chemin accéléré nvidia-fs ou un chemin de compatibilité qui stade les données via la mémoire hôte.

L’entreprise affirme qu’atteindre l’API cuFile seule ne prouve pas que le chemin accéléré a été utilisé. Cette distinction est centrale dans le tutoriel, qui montre comment inspecter les paramètres par défaut de KvikIO, confirmer les composants GDS avec gdscheck.py, puis utiliser gds_stats pour déterminer si les opérations ont été comptées sous nvfs ou posix.

Ce que le tutoriel utilisait

NVIDIA indique que l’exemple a été testé sur un système x86_64 avec un GPU H100 , un 13.3 CUDA et un 1.18 cuFile. La configuration utilisait également un périphérique NVMe local formaté avec ext4, une connexion PIX entre le GPU et le périphérique NVMe, IOMMU et ACS désactivés, et le module du noyau nvidia-fs chargé pour fournir le chemin accéléré.

Dans l’exemple Python, le guide crée un fichier de 1 GiB, alloue un tableau CuPy en mémoire GPU, et lit le fichier dans ce tampon avec KvikIO. Le post indique que KvikIO compat_mode rapportait comme AUTO et un gds_threshold de 16 KiB sur le système tutoriel. AUTO dit à KvikIO d’essayer d’abord cuFile et de revenir à POSIX si cuFile n’est pas disponible, tandis que les lectures en dessous du seuil utilisent directement le chemin POSIX.

Vérification avec des statistiques cuFile

L’article indique qu’un moyen de confirmer le chemin de transfert réel est d’activer CUFILE_STATS_LEVEL=3 et d’inspecter le processus en cours avec gds_stats. Dans l’exemple tutoriel, la taille de tâche par défaut de KvikIO 4 MiB a divisé la requête 1 GiB en 256 lectures, et les statistiques montraient n=256, nvfs=256 et posix=0, indiquant que toutes les opérations utilisaient le chemin nvidia-fs.

Le post compare également les calques en modifiant les paramètres. Avec KVIKIO_COMPAT_MODE=off, KvikIO utilise toujours cuFile, et cuFile peut être forcé en mode compatibilité avec CUFILE_FORCE_COMPAT_MODE=true, ce qui déplace les opérations sous posix. Avec KVIKIO_COMPAT_MODE=on, KvikIO contourne complètement cuFile et effectue la lecture via son propre backend POSIX à étages CPU.

Planification des fichiers cuFile et dimensionnement des requêtes

NVIDIA indique que cuFile a ses propres paramètres d’exécution dans cufile.json qui influencent la façon dont les requêtes sont découpées et planifiées, incluant execution.parallel_io, execution.max_io_threads, execution.min_io_threshold_size_kb, execution.max_request_parallelism et execution.max_io_queue_depth. Dans la configuration d’exemple, quatre threads worker cuFile, max_request_parallelism réglés sur quatre, et min_io_threshold_size_kb sur 8192 signifiaient qu’une lecture de 1 Gio pouvait être subdivisée une fois que cuFile l’avait reçue.

Le guide précise que si KVIKIO_TASK_SIZE est défini à 1 GiB, KvikIO envoie un requête volumineuse à cuFile, qui utilise alors son chemin d’ordonnancement du tampon non enregistré car le tampon de destination n’est pas explicitement enregistré. Le post précise que dans ce cas, cuFile limite la requête à quatre pièces, chacune 256 MiB, et que ces pièces sont des unités de travail planifiées plutôt que des transferts de stockage individuels. Il est également indiqué que la cible de planification 8 MiB serait importante pour une requête de 16 Mio, que cuFile diviserait en deux 8 morceaux Mio.

Pourquoi NVIDIA met l’accent sur la pile

L’article situe le tutoriel dans le contexte de demandes plus larges de déplacement de IA données, citant l’indice 2025 Stanford IA Index indiquant que le calcul pour des modèles IA notables avait doublé environ tous les cinq mois et que les ensembles de données d’entraînement pour de grands modèles de langage avaient doublé environ tous les huit mois. NVIDIA affirme également que Python était l’interface principale d’application pour de nombreux projets IA, tandis que cuFile reste une API C, faisant de KvikIO un pont entre le code Python et la couche d’accélération du stockage.

Selon l’article, KvikIO fait partie de NVIDIA CUDA-X pour la data science et trouve ses racines dans des travaux antérieurs de cuDF sur l’ingestion accélérée de Parquet et ORC. L’entreprise affirme que le même chemin de stockage a depuis été utilisé dans les flux de travail de pathologie numérique cuCIM, cuPhoton xDataReader et le travail accéléré par GPU Presto, mais le tutoriel lui-même se concentre sur la manière de confirmer si une lecture Python a réellement suivi la voie accélérée.

Le post n’attribue pas de gains de performance à chaque configuration. Il insiste plutôt sur le fait que l’opération à voie directe dépend du matériel compatible, des pilotes, des systèmes de fichiers, de la topologie et des réglages, et que les configurations non prises en charge peuvent revenir en mode compatibilité. NVIDIA affirme que les utilisateurs devraient vérifier leurs propres charges de travail avec gds_stats plutôt que de supposer une accélération.


Read More