Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Résumé
Direct Machine Learning (DirectML) est une API de bas niveau pour le Machine Learning (ML). L’API dispose d’une interface de programmation et d’un flux de travail C++natifs (nano-COM) familiers dans le style de DirectX 12. Vous pouvez intégrer des charges de travail d’inférence machine learning dans votre jeu, moteur, middleware, back-end ou autre application. DirectML est pris en charge par tout le matériel compatible DirectX 12.
Les primitives Machine Learning accélérées par le matériel (appelées opérateurs) sont les blocs de construction de DirectML. À partir de ces blocs de construction, vous pouvez développer des techniques d’apprentissage automatique telles que la mise à l’échelle, l’anticrénelage et le transfert de style, pour ne citer que quelques-uns. Par exemple, la suppression du bruit et la super-résolution vous permettent d’obtenir des effets de lancer de rayons impressionnants avec moins de rayons par pixel.
Vous pouvez intégrer des charges de travail d’inférence machine learning dans votre jeu, moteur, middleware, back-end ou autre application. DirectML dispose d’une interface de programmation et d’un flux de travail familiers (C++, nano-COM) DirectX 12, et elle est prise en charge par tout le matériel compatible DirectX 12. Pour les exemples d’applications DirectML, notamment un exemple d’application DirectML minimale, consultez les exemples d’applications DirectML.
DirectML a été introduit dans Windows 10, version 1903 et dans la version correspondante du Kit de développement logiciel (SDK) Windows.
DirectML est-il approprié pour mon projet ?
DirectML est une couche d’abstraction matérielle de bas niveau qui vous permet d’exécuter des charges de travail Machine Learning sur n’importe quel GPU compatible DirectX 12.
Si vous avez besoin d’optimiser vos performances de Machine Learning en temps réel, hautes performances, faible latence ou scénarios à faible latence, DirectML vous offre le plus de contrôle et de flexibilité. Vous pouvez utiliser DirectML pour intégrer le Machine Learning directement dans votre moteur existant ou votre pipeline de rendu, ou pour créer vos propres frameworks machine learning personnalisés et intergiciels sur Windows.
Vous pouvez également utiliser DirectML indirectement via le runtime ONNX, qui est une bibliothèque multiplateforme qui prend en charge le format ONNX standard ouvert pour les modèles Machine Learning. Le runtime ONNX peut utiliser DirectML comme l’un de ses fournisseurs d’exécution, ainsi que d’autres back-ends tels que l’UC, CUDA ou TensorRT. De cette façon, vous pouvez tirer parti des performances et de la compatibilité de DirectML sans écrire vous-même de code DirectML.
Vous pouvez également utiliser l’API WinML, qui est une API orientée modèle de niveau supérieur qui simplifie le flux de travail Machine Learning avec son modèle load-bind-evaluate. WinML utilise également le format ONNX pour les modèles et peut utiliser DirectML comme back-end. WinML est conçu pour les scénarios où vous devez intégrer rapidement et facilement le Machine Learning à vos applications Windows, sans vous soucier des détails du matériel ou de l’infrastructure sous-jacents.
Que fait DirectML ; et quel travail dois-je faire en tant que développeur ?
DirectML exécute efficacement les couches individuelles de votre modèle d’inférence sur le GPU (ou sur les cœurs d’accélération IA, le cas échéant). Chaque couche est un opérateur et DirectML vous fournit une bibliothèque d’opérateurs primitifs Machine Learning à faible niveau et à accélération matérielle. Vous pouvez exécuter des opérations DirectML en isolation ou en tant que graphe (voir la section Flux de travail en couche par couche et en graphe dans DirectML).
Les opérateurs et les graphiques appliquent des optimisations spécifiques au matériel et à l’architecture. En même temps, vous, en tant que développeur, vous voyez une interface unique indépendante du fournisseur pour l’exécution de ces opérateurs.
La bibliothèque d’opérateurs dans DirectML fournit toutes les opérations habituelles que vous prévoyez d’utiliser dans une charge de travail Machine Learning.
- Opérateurs d’activation, tels que linéaire, ReLU, sigmoid, tanh, etc.
- Opérateurs élémentaires, tels que addition, exposant, logarithme, max, min, soustraction, etc.
- Opérateurs de convolution, tels que la convolution 2D et 3D, etc.
- Opérateurs de réduction, tels que argmin, average, l2, sum, etc.
- Opérateurs de regroupement, tels que la moyenne, lp et max.
- Opérateurs de réseau neuronal (NN), tels que gemm, gru, lstm et rnn.
- Et bien plus encore.
Pour des performances maximales et pour ne pas payer ce que vous n’utilisez pas, DirectML place le contrôle entre vos mains en tant que développeur sur la façon dont votre charge de travail Machine Learning est exécutée sur le matériel. Déterminer quels opérateurs exécuter, et quand, est votre responsabilité en tant que développeur. Les tâches qui sont laissées à votre discrétion sont les suivantes : transcrire le modèle ; simplification et optimisation de vos couches ; poids de chargement ; allocation de ressources, liaison, gestion de la mémoire (comme avec Direct3D 12) ; et l’exécution du graphique.
Vous conservez une connaissance approfondie de vos graphes (vous pouvez intégrer votre modèle directement dans le code ou écrire votre propre chargeur de modèle). Vous pouvez concevoir un modèle de mise à l’échelle, par exemple, en utilisant plusieurs couches chacune des opérateurs upsample, convolution, normalisation et activation . Avec cette familiarité, la planification minutieuse et la gestion des barrières, vous pouvez extraire le plus de parallélisme et de performances du matériel. Si vous développez un jeu, votre gestion des ressources et votre contrôle prudents sur la planification vous permettent d’interagir entre les charges de travail machine learning et le travail de rendu traditionnel afin de saturer le GPU.
Qu’est-ce que le flux de travail DirectML de haut niveau ?
Voici la recette de haut niveau pour savoir comment nous attendons que DirectML soit utilisé. Dans les deux phases principales de l’initialisation et de l’exécution, vous enregistrez le travail dans les listes de commandes, puis vous les exécutez sur une file d’attente.
Initialisation
- Créez vos ressources Direct3D 12 : périphérique Direct3D 12, file d'attente de commandes, liste de commandes et ressources telles que les tas de descripteurs.
- Étant donné que vous effectuez l’inférence de Machine Learning ainsi que votre charge de travail de rendu, créez des ressources DirectML ( les instances d’appareil et d’opérateur DirectML). Si vous avez un modèle Machine Learning dans lequel vous devez effectuer un type particulier de convolution avec une taille particulière de capteur de filtre avec un type de données particulier, il s’agit de tous les paramètres dans l’opérateur de convolution de DirectML.
- Les enregistrements DirectML fonctionnent dans des listes de commandes Direct3D 12. Par conséquent, une fois l’initialisation effectuée, vous enregistrez la liaison et l’initialisation de (par exemple) votre opérateur de convolution dans votre liste de commandes. Ensuite, fermez et exécutez votre liste de commandes sur votre file d’attente comme d’habitude.
Exécution
- Chargez vos tenseurs de poids dans des ressources. Un tensor dans DirectML est représenté à l’aide d’une ressource Direct3D 12 standard. Par exemple, si vous souhaitez charger vos données de poids sur le GPU, vous le faites de la même façon que pour n’importe quelle autre ressource Direct3D 12 (utilisez une pile de chargement ou une file de copie).
- Ensuite, vous devez lier ces ressources Direct3D 12 en tant que tenseurs d’entrée et de sortie. Enregistrez dans votre liste de commandes la liaison et l’exécution de vos opérateurs.
- Fermez et exécutez votre liste de commandes.
Comme avec Direct3D 12, la durée de vie des ressources et la synchronisation sont vos responsabilités. Par exemple, ne relâchez pas vos objets DirectML au moins tant qu’ils n’ont pas terminé l’exécution sur le GPU.
Flux de travail basés sur des couches et des graphiques dans DirectML
DirectML prend en charge les approches basées sur des couches et des graphiques pour l’exécution du modèle. Lors de l’exécution de couche par couche, vous êtes responsable de la création et de l’initialisation de chaque opérateur DirectML, et de les enregistrer individuellement pour l’exécution sur une liste de commandes. En revanche, lors de l’exécution d’un graphique, vous créez plutôt un ensemble de nœuds et de bords, où chaque nœud représente un opérateur DirectML, et les arêtes représentent des données tensoriels qui circulent entre les nœuds. L’intégralité du graphique est ensuite envoyée pour l’initialisation ou l’exécution à la fois, et DirectML gère la planification et l’enregistrement des opérateurs individuels en votre nom.
Les deux modèles sont utiles dans différentes situations. Une approche de couche par couche vous offre un contrôle maximal sur l’ordre et la planification du travail de calcul. Par exemple, ce niveau de contrôle vous permet d’intercaler les charges de travail de rendu Direct3D 12 avec vos traitements de calcul DirectML. Cela peut être utile pour tirer parti des unités de calcul ou de nuanceur asynchrones sur votre GPU qui seraient autrement inactives. L’exécution manuelle couche par couche donne également aux développeurs un contrôle explicite sur les dispositions de tenseur et l’utilisation de la mémoire.
Toutefois, les modèles Machine Learning sont souvent exprimés en termes de graphiques de couches . En guise d’alternative à l’approche de couche par couche, DirectML vous permet d’exprimer votre modèle en tant que graphique acyclique dirigé de nœuds (opérateurs DirectML) et de bords entre eux (descriptions tensoratives). Après avoir généré une description du graphique, vous pouvez compiler et envoyer tout cela en même temps à DirectML pour l’initialisation et l’exécution. Dans cette approche, DirectML décide d’un ordre de traversée et gère chaque opérateur individuel et le flux de données entre eux en votre nom. Il s’agit souvent d’un moyen plus simple et plus naturel d’exprimer un modèle Machine Learning et de permettre l’application automatique d’optimisations spécifiques à l’achitecture. En outre, la bibliothèque d’assistance DirectMLX fournit une syntaxe propre et pratique pour créer des graphiques complexes d’opérateurs DirectML.
Quelle que soit l’approche que vous préférez, vous aurez toujours accès à la même suite étendue d’opérateurs DirectML. Cela signifie que vous n’avez jamais à sacrifier la fonctionnalité, que vous préfériez le contrôle affiné de l’approche de couche par couche, ou la commodité de l’approche de graphe.
Dans cette section
Sujet | Descriptif |
---|---|
Guide de démarrage rapide | Prise en main de DirectML. |
Outils de développement | Outils pour profiler, optimiser et déboguer DirectML. |
Guide de programmation | Rubriques sur la liaison de données, les barrières, les glissements, les fusions, la gestion des erreurs, la suppression de périphériques et les fonctions d’assistance. |
Résolution des problèmes | Gestion des conditions d’erreur et utilisation de la couche de débogage. |
Historique des versions DirectML | DirectML est un composant système de Windows 10 et est également disponible en tant que package redistribuable autonome. |
Historique des niveaux de fonctionnalités DirectML | Manifeste des types introduits dans chaque niveau de fonctionnalité. |
Exemples d’applications DirectML | Liens vers des exemples d’applications DirectML, y compris un exemple d’application DirectML minimale. |
Apprentissage ML accéléré par GPU | Couvre ce qui est actuellement pris en charge par l’entraînement Machine Learning (ML) accéléré par GPU pour le sous-système Windows pour Linux (WSL) et Windows natif. |
Informations de référence sur l’API DirectML | Cette section traite des API Direct Machine Learning (DirectML) déclarées dans DirectML.h . |