Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сводка
Direct Machine Learning (DirectML) — это низкоуровневый API для машинного обучения(ML). API имеет знакомый интерфейс (похожий на родной C++, nano-COM) и рабочий процесс по аналогии с DirectX 12. Вы можете интегрировать рабочие нагрузки машинного обучения в игру, подсистему, ПО промежуточного слоя, серверную часть или другое приложение. DirectML поддерживается всеми аппаратными средствами, совместимыми с DirectX 12.
Примитивы машинного обучения с аппаратным ускорением (называемые операторами) — это стандартные блоки DirectML. Из этих базовых элементов вы можете разрабатывать такие методы машинного обучения, как перемасштабирование, сглаживание и перенос стиля, чтобы назвать лишь несколько. Шумоподавление и супер-разрешение, например, позволяют достичь впечатляющих эффектов трассировки лучей с меньшим количеством лучей на пиксель.
Вы можете интегрировать рабочие нагрузки машинного обучения в игру, подсистему, ПО промежуточного слоя, серверную часть или другое приложение. DirectML имеет знакомый (собственный интерфейс C++, nano-COM) DirectX 12-стиль программирования и рабочий процесс, который поддерживается всеми оборудованием, совместимым с DirectX 12. Примеры приложений DirectML, включая пример минимального приложения DirectML, см. в примере приложений DirectML.
DirectML появился в Windows 10 версии 1903 и в соответствующей версии пакета SDK для Windows.
Подходит ли DirectML для проекта?
DirectML — это низкий уровень аппаратной абстракции, который позволяет запускать рабочие нагрузки машинного обучения на любом совместимом GPU DirectX 12.
Если необходимо оптимизировать производительность машинного обучения в режиме реального времени, высокой производительности, низкой задержки или сценариях с ограниченными ресурсами, DirectML обеспечивает максимальное управление и гибкость. DirectML можно использовать для интеграции машинного обучения непосредственно в ваш существующий движок или конвейер рендеринга, или для создания собственных пользовательских платформ и промежуточного программного обеспечения для машинного обучения в Windows.
Вы также можете использовать DirectML косвенно через среду выполнения ONNX, которая является кроссплатформенной библиотекой, которая поддерживает открытый стандартный формат ONNX для моделей машинного обучения. Среда выполнения ONNX может использовать DirectML в качестве одного из поставщиков выполнения, а также других серверных компонентов, таких как ЦП, CUDA или TensorRT. Таким образом, вы можете использовать производительность и совместимость DirectML без написания кода DirectML самостоятельно.
Кроме того, вы можете использовать API WinML, который является более высоким уровнем, ориентированным на модель API, который упрощает рабочий процесс машинного обучения с помощью шаблона оценки нагрузки и привязки. WinML также использует формат ONNX для моделей и может использовать DirectML в качестве серверной части. WinML предназначен для сценариев, в которых необходимо быстро и легко интегрировать машинное обучение в приложения Windows, не беспокоясь о деталях базового оборудования или платформы.
Что делает DirectML; и что я должен делать как разработчик?
DirectML эффективно выполняет отдельные слои модели вывода на GPU (или на ядрах ускорения ИИ, если они присутствуют). Каждый уровень является оператором, и DirectML предоставляет библиотеку низкоуровневых операторов машинного обучения с аппаратным ускорением. Операции DirectML можно выполнять в изоляции или в виде графа (см. раздел Рабочие процессы DirectML: уровня за уровнем и на основе графов).
Операторы и графы применяют оптимизации, относящиеся к оборудованию и архитектуре. Как разработчик, вы видите единый, независимый от поставщика интерфейс для выполнения этих операторов.
Библиотека операторов в DirectML предоставляет все обычные операции, которые вы ожидаете использовать в рабочей нагрузке машинного обучения.
- Операторы активации, такие как линейные, ReLU, sigmoid, tanh и многое другое.
- Поэлементные операторы, такие как add, exp, log, max, min, sub и многое другое.
- Операторы свертки, такие как свертка 2D и 3D, и многое другое.
- Операторы сокращения, такие как argmin, average, l2, sum и многое другое.
- Операции объединения, такие как среднее, lp и max.
- Операторы нейронной сети (NN), такие как gemm, gru, lstm и rnn.
- И многое другое.
Для максимальной производительности и чтобы вы не платили за то, что не используете, DirectML предоставляет вам, как разработчику, контроль над выполнением рабочей нагрузки машинного обучения на оборудовании. Ваша ответственность как разработчика — выяснить, какие операторы должны выполняться и когда. Задачи, оставленные на ваше усмотрение, включают: транскрибирование модели; упрощение и оптимизация слоев; загрузка весов; выделение ресурсов, привязка, управление памятью (как и с Direct3D 12); и выполнение графа.
Вы сохраняете высокоуровневые знания о графах (вы можете встроить модель в код напрямую или написать свой собственный загрузчик модели). Вы можете разработать модель масштабирования, например, с несколькими слоями, каждый из которых содержит операторы upsample, свертки, нормализации и активации. Благодаря такому опыту, тщательному планированию и управлению барьерами можно извлечь наиболее параллелизм и производительность из оборудования. Если вы разрабатываете игру, тщательное управление ресурсами и контроль над планированием позволяют чередовать рабочие нагрузки машинного обучения и традиционные задачи отрисовки, чтобы полностью загрузить графический процессор.
Что такое высокоуровневый рабочий процесс DirectML?
Ниже приведен высокоуровневый рецепт использования DirectML. На двух основных этапах инициализации и выполнения вы записываете работу в списки команд, а затем выполняете их в очереди.
Инициализация
- Создайте ресурсы Direct3D 12 — устройство Direct3D 12, очередь команд, список команд и ресурсы, такие как кучи дескрипторов.
- Так как вы выполняете прогнозирование с использованием машинного обучения, а также нагрузку рендеринга, создайте ресурсы DirectML — экземпляры устройства DirectML и операторов. Если у вас есть модель машинного обучения, в которой необходимо выполнить определенный тип свертки с определенным размером тензора фильтра с определенным типом данных, то это все параметры в операторе сверток DirectML.
- Записи DirectML работают в списках команд Direct3D 12. Таким образом, после завершения инициализации необходимо записать привязку и инициализацию оператора свертывания в список команд. Затем закройте список команд и выполните его в вашей очереди как обычно.
Исполнение
- Загрузите весовые тензоры в ресурсы. Тензор в DirectML представлен обычным ресурсом Direct3D 12. Например, если вы хотите передать данные веса в GPU, то делайте это так же, как с любым другим ресурсом Direct3D 12 (используйте кучу загрузки или очередь копирования).
- Далее необходимо задействовать эти ресурсы Direct3D 12, привязав их как тензоры ввода и вывода. Запишите в список команд привязку и выполнение ваших команд.
- Закройте и выполните список команд.
Так же, как и в Direct3D 12, время существования ресурсов и синхронизация являются вашей ответственностью. Например, не выпускайте объекты DirectML по крайней мере до тех пор, пока они не завершили выполнение на GPU.
Рабочие процессы на основе уровней и графов в DirectML
DirectML поддерживает как многоуровневые, так и графовые подходы к выполнению модели. При выполнении слой-за-слоем вы несете ответственность за создание и инициализацию каждого оператора DirectML, а также за их индивидуальную запись для выполнения в списке команд. В отличие от этого, при выполнении графа вы создаете набор узлов и ребер, где каждый узел представляет оператор DirectML, а края представляют тензорные данные, поступающие между узлами. Затем весь граф отправляется для инициализации или выполнения одновременно, а DirectML обрабатывает планирование и запись отдельных операторов от вашего имени.
Оба шаблона полезны в разных ситуациях. Подход слой за слоем обеспечивает максимальный контроль над упорядочением и планированием вычислительных задач. Например, этот уровень управления позволяет чередовать рабочие нагрузки визуализации Direct3D 12 с задачами расчетов DirectML. Это может быть полезно для использования асинхронных единиц вычислений или шейдеров на GPU, которые в противном случае будут бездействующими. При ручном выполнении слой за слоем разработчик получает явный контроль над макетами тензоров и использованием памяти.
Однако модели машинного обучения часто выражаются с точки зрения графов слоев. В качестве альтернативы послойному подходу DirectML позволяет выразить модель в виде ориентированного ациклического графа узлов (операторов DirectML) и ребер, соединяющих их (описания тензоров). После создания описания графа можно скомпилировать и отправить его сразу в DirectML для инициализации и выполнения. В этом подходе DirectML решает порядок обхода и обрабатывает каждый отдельный оператор и поток данных между ними от вашего имени. Это часто более простой и более естественный способ выразить модель машинного обучения, что позволяет автоматически применять оптимизации, специфичные для архитектуры. Кроме того, вспомогательные библиотеки DirectMLX предоставляют чистый и удобный синтаксис для создания сложных графов операторов DirectML.
Независимо от того, какой подход вы предпочитаете, у вас всегда будет доступ к тому же обширному набору операторов DirectML. Это означает, что вам никогда не придется жертвовать функциональностью, будь то точного управления подходу по слоям или удобству подхода графа.
В этом разделе
Тема | Описание |
---|---|
Краткое руководство по началу работы | Начало работы с DirectML. |
Средства разработчика | Средства для профилирования, оптимизации и отладки DirectML. |
Руководство по программированию | Разделы о привязке данных, барьерах, слайдах, слияниях, обработке ошибок, удалении устройств и вспомогательных функциях. |
Устранение неполадок | Обработка ошибочных состояний и использование слоя отладки. |
История версий DirectML | DirectML — это системный компонент Windows 10, который также доступен как автономный распространяемый пакет. |
История уровней функций DirectML | Манифест типов, представленных на каждом уровне компонентов. |
Примеры приложений DirectML | Ссылки на примеры приложений DirectML, включая пример минимального приложения DirectML. |
Обучение машинного обучения с ускорением GPU | Поддержка ускоренного с помощью GPU обучения машинного обучения (ML) для подсистемы Windows для Linux (WSL) и на платформе Windows в целом. |
Справочник по API DirectML | В этом разделе рассматриваются API Direct Machine Learning (DirectML), объявленные в DirectML.h . |