Прочитать на английском

Поделиться через


Обзор DirectML

Итоги

Direct Машинное обучение (DirectML) — это низкоуровневый API для машинного обучения. 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, сверток, нормализации и операторов активации. Благодаря такому опыту, тщательному планированию и управлению барьерами можно извлечь наиболее параллелизм и производительность из оборудования. Если вы разрабатываете игру, то тщательное управление ресурсами и контроль над планированием позволяет взаимодействовать с рабочими нагрузками машинного обучения и традиционными работами отрисовки для насыщения GPU.

Что такое высокоуровневый рабочий процесс DirectML?

Ниже приведен высокоуровневый рецепт использования DirectML. На двух основных этапах инициализации и выполнения вы записываете работу в списки команд, а затем выполняете их в очереди.

Инициализация

  1. Создайте ресурсы Direct3D 12 — устройство Direct3D 12, очередь команд, список команд и ресурсы, такие как кучи дескриптора.
  2. Так как вы выполняете вывод машинного обучения, а также рабочую нагрузку отрисовки, создайте ресурсы DirectML — экземпляры устройств и операторов DirectML. Если у вас есть модель машинного обучения, в которой необходимо выполнить определенный тип свертки с определенным размером тензора фильтра с определенным типом данных, то это все параметры в операторе сверток DirectML.
  3. Записи DirectML работают в списках команд Direct3D 12. Таким образом, после завершения инициализации необходимо записать привязку и инициализацию оператора свертывания в список команд. Затем закройте и выполните список команд в очереди как обычно.

Выполнение

  1. Отправьте тензоры веса в ресурсы. Тензор в DirectML представлен обычным ресурсом Direct3D 12. Например, если вы хотите передать данные веса в GPU, то вы делаете это так же, как и с любым другим ресурсом Direct3D 12 (используйте кучу отправки или очередь копирования).
  2. Затем необходимо привязать эти ресурсы Direct3D 12 в качестве тензоров ввода и вывода. Запишите в список команд привязку и выполнение операторов.
  3. Закройте и выполните список команд.

Так же, как и в Direct3D 12, время существования ресурсов и синхронизация являются вашей ответственностью. Например, не выпускайте объекты DirectML по крайней мере до тех пор, пока они не завершили выполнение на GPU.

Рабочие процессы на основе уровней и графов в DirectML

DirectML поддерживает как многоуровневые, так и графовые подходы к выполнению модели. При выполнении уровней вы несете ответственность за создание и инициализацию каждого оператора DirectML и их отдельное запись для выполнения в списке команд. В отличие от этого, при выполнении графа вы создаете набор узлов и ребер, где каждый узел представляет оператор DirectML, а края представляют тензорные данные, поступающие между узлами. Затем весь граф отправляется для инициализации или выполнения одновременно, а DirectML обрабатывает планирование и запись отдельных операторов от вашего имени.

Оба шаблона полезны в разных ситуациях. Подход на уровне обеспечивает максимальный контроль над упорядочением и планированием вычислительных работ. Например, этот уровень управления позволяет чередовать рабочие нагрузки отрисовки Direct3D 12 с помощью диспетчеров вычислений DirectML. Это может быть полезно для использования асинхронных единиц вычислений или шейдеров на GPU, которые в противном случае будут бездействующими. При выполнении слоя вручную по уровню также предоставляется явный контроль над макетами тензоров и использованием памяти.

Однако модели машинного обучения часто выражаются с точки зрения графов слоев. В качестве альтернативы подходу на уровне DirectML позволяет выразить модель в виде ациклического графа узлов (операторов DirectML) и ребер между ними (описания tensor). После создания описания графа можно скомпилировать и отправить его сразу в DirectML для инициализации и выполнения. В этом подходе DirectML решает порядок обхода и обрабатывает каждый отдельный оператор и поток данных между ними от вашего имени. Это часто более простой и более естественный способ выразить модель машинного обучения и разрешить автоматически применять оптимизации для конкретного achitecture. Кроме того, вспомогательные библиотеки DirectMLX предоставляют чистый и удобный синтаксис для создания сложных графов операторов DirectML.

Любой подход, который вы предпочитаете, всегда будет иметь доступ к одному и тому же обширному набору операторов DirectML. Это означает, что вам никогда не придется жертвовать функциональностью, предпочитаемую точное управление подходом по слоям или удобством подхода графа.

В этом разделе

Раздел Описание
Краткое руководство по началу работы Начало работы с DirectML.
Инструменты разработчика Средства для профилирования, оптимизации и отладки DirectML.
Руководство по программированию Разделы о привязке данных, барьерах, слайдах, слияниях, обработке ошибок, удалении устройств и вспомогательных функциях.
Устранение неполадок Обработка условий ошибок и использование слоя отладки.
Журнал версий DirectML DirectML — это системный компонент Windows 10, который также доступен как автономный распространяемый пакет.
Журнал компонентов DirectML Манифест типов, представленных на каждом уровне компонентов.
Примеры приложений DirectML Ссылки на примеры приложений DirectML, включая пример минимального приложения DirectML.
Машинное обучение с аппаратным ускорением на базе GPU Описывает, что в настоящее время поддерживается обучением машинного обучения (ML) GPU для подсистема Windows для Linux (WSL) и собственных Windows.
Справочник по API DirectML В этом разделе рассматриваются API Direct Машинное обучение (DirectML), объявленные в DirectML.h.

См. также