Искусственный интеллект и машинное обучение — две хайповые тенденции последних лет. Необходимые для AI&ML объемы вычислений обычно выполняются в ЦОДах на специальном высокопроизводительном и энергоэффективном оборудовании (например, серверах с TPU). Эволюция циклична, и маятник качнулся обратно, в сторону вычислений на периферийных устройствах, таких как ПК, планшеты и IoT. В частности, это приведет к повышению скорости реакции устройств на голосовые команды и повысит комфортность общения с персональными ассистентами.



WinML — это новый набор API-интерфейсов, который позволит разработчикам использовать все возможности любого устройства Windows 10 для вычислений предварительно обученных моделей машинного обучения и загруженных в приложение в формате Open Neural Network Exchange (ONNX).

Следуя своей давней и беспроигрышной традиции (но мы помним WinPhone) Microsoft вслед за CoreML для iOS от Apple и TensorFlow Lite / Neural Networks API для Android 8.1 опубликовал для разработчиков высокоуровневый API WinML, который работает поверх DirectML. Этот слой может задействовать DirectX 12 или прямо обратиться к вычислительным устройствам (CPU/VPU/GPU).

Суть разработки заключается в переносе подготовленных моделей машинного обучения из облака или специализированных пакетов (например, Anaconda, Microsoft Cognitive Toolkit, TensorFlow) в приложения UWP и классические приложения Windows (WPF/WinForms/ConsoleApp) на Windows 10. Кроме того, модель может быть получена с использованием Azure Machine Learning Workbench, а в ближайшее время Azure Custom Vision Service также будет поддерживать создание моделей ONNX для Windows. API WinML будет доступен для всех выпусков Windows 10.

Это решение, которое давно ждали разработчики Windows. Microsoft создало комфортную экосистему. Задача конкурирующих экосистем — перетянуть пользователей и разработчиков в свои экосистемы. Даже есть радикальное мнение, что нужно забыть о Windows, когда дело заходит о машинном обучении. Microsoft это осознает и делая очередной шаг, надеется прорваться на новый рынок и победить скептиков.

В основе технологии обмена моделей между инструментами обучения моделей и приложениями их использующими, лежит проект ONNX, поддерживаемый крупными технологическими гигантами — Microsoft, Facebook и Amazon. Разработчики могут конвертировать PyTorch, Caffe2 и другие модели в формат ONNX и затем интегрировать их в свои приложения. При этом, разработчику конечного приложения, не обязательно быть опытным специалистом по машинному обучению. Лишь нужно понимать, что модель это функция, на вход которой нужно подать подготовленный набор данных и проинтерпретировать полученный ответ.

Причем, поначалу формат ONNX мне виделся для хранения только нейросетевых моделей. На сайте проекта написано: ONNX is a open format to represent deep learning models. Да и в названии Open Neural Network Exchange. Но в опубликованной документации на WinML описывается пример переноса модели Support Vector Machine (метод опорных векторов) в ONNX с помощью пакета WinMLTools. SVM принадлежит семейству линейных классификаторов и, в принципе, может быть отображен в нейросетевую модель. Какие еще модели можно выгрузить в ONNX пока не смотрел. Можно допустить, что еще можно выгрузить модели логистической регрессии (по факту один нейрон) или даже линейной регрессии (нейрон без функции активации). Мой первый опыт создания простейшей модели MLP в CNTK (Microsoft Cognitve Toolkit) с выгрузкой в ONNX закончился неудачно. Выбранные гиперпараметры не смогли конвертироваться в текущую реализацию формата. Проблема совместимости. Но это была версия CNTK 2.3.1. Неделю назад уже вышла версия CNTK 2.5. В новых версиях пишут об улучшении поддержки ONNX.

ML был доступен на .Net и ранее, через альтернативные библиотеки. Например, Open Source проект Accord.Net. Полезность WinML в том, что предлагается некий стандарт, который, с одной стороны, позволяет получать модели из популярных пакетов, а с другой выполнять модели на разнообразном железе.

В своей презентации Microsoft говорит, о быстром вычислении загруженных моделей на различных платформах за счет слоя DirectML. Для разработчиков оптимизация вычислений под зоопарк аппаратных и программных платформ титанический, порой неподъемный труд. По задумке Microsoft приложения могут работать не только на десктопе, но и на Xbox, Hololens и даже на IoT.

Аппаратно могут быть задействованы специализированные ядра/модули на CPU/GPU Intel, AMD, Qualcomm, NVidia. Есть видеокарта? Модель будет работать на ней. Нет видеокарты, но есть Intel — модель будет работать на векторных инструкциях AVX256 или даже AVX512. Может быть задействована интегрированная графика. Не хватает вычислительных мощностей на IoT устройсве — подключите Intel Movidius VPU. Всё это возможно благодаря технологии автоматической динамической компиляции вычислительной модели под имеющуюся аппаратуру.

Разработчику не нужно беспокоиться о том, какое оборудование доступно приложению. Механизм WinML будет динамически использовать аппаратное обеспечение и создаст нужный нативный код, чтобы получить максимальную производительность из любого доступного на устройстве оборудования. Еще более впечатляющим является возможность работы WinML даже на новых ноутах и планшетах под управлением SnapDragon 835 или даже на устройствах IoT. Таким образом, все имеющиеся дополнительные вычислительные мощности могут быть задействованы, а если их нет для вычислений будет достаточно только CPU.

С весенним обновлением разработчики могут использовать платформу WinML во всем семействе устройств Windows, от устройств IoT, до рабочих станций, серверов и центров обработки данных. Предварительный выпуск WinML поддерживает вычисления FP32. Обещают, что окончательная версия будет поддерживать FP16. Сегодня это неактуально, но с приходом GPU Volta это позволит достичь в разы большей производительности на тензорных ядрах FP16 (для некоторых специально обученных моделей). Microsoft уже продемонстрировало ускорение в 8 раз.

В итоге, разработчики получают ряд преимуществ:

Низкая латентность, результаты в режиме реального времени. Windows может вычислять модель, используя ресурсы ПК, позволяя на лету анализировать большие локальные данные, такие как изображения и видео. Результаты вычислений могут быть получены быстро и без задержки.

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

Гибкость. Разработчики могут выбирать место, где будут выполняться вычисления, локально или в облаке. Политика клиента может запрещать отправку чувствительных данных в сеть, а может наоборот потребовать вычислений в сети, для сокращения времени получения результата, что актуально для больших моделей и маломощных устройств.

Начало работы с Windows Machine Learning


Для использования технологии понадобится обновить софт. Начиная с Visual Studio Preview 15.7, добавление файла ONNX в проект UWP автоматически добавит необходимые интерфейсы в проект разработчика. Обратим внимание, что это Preview. Кроме того, необходимая версия Windows 10 сегодня доступна только по программе Insider Preview. Для предыдущих версий Visual Studio разработчики могут использовать инструмент MLGen tool для создания нужного интерфейса, а затем вручную добавить его в свои проекты. Эта возможность скоро появится и для инструмента Visual Studio tools for AI.

Документация на API Windows ML опубликована 7 марта. Тогда же был проведен Windows Developer Day March 2018. Видео опубликовано на YouTube на канале Windows Developer.


Тем кто уже работают с машинным обучением польза стандартной библиотеки понятна. А для тех кто еще не в теме кратко опишу, что можно получить с готовыми ML-моделями в своих приложениях.

Как было сказано выше, ML модель это функция, на вход которой подается вектор фиксированной (параметризованное описание сущности) или переменной длины (звук/спектрограмма, видеоряд) и на выходе получаете вектор ответа, который можно интерпретировать как отнесение входного вектора к некоторому классу или классам (задачи классификации, кластеризации) с некоторой степенью правдоподобия (вероятности), а также как некоторые вычисленные параметры входного вектора (задача регрессии). Это в простейшем случае. Более сложные применения в этой статье не будем рассматривать.

В качестве примера Microsoft выложила на GitHub широкоизвестный пример MNIST. Модель можно подключить в свою программу и далее распознавать цифры нарисованные пальцем на тачскрине. Впрочем, подобный и даже более богатый функционал уже давно реализован в API Handwriting Recognition.

Рассмотрим эти задачи на примере GameDev.


В качестве входного вектора может быть некий образ или представление некой ситуации (игровой). Образ может описывать ряд действий пользователя или то что он видит, на основании чего действует. Модель может предсказывать действия пользователя и по ним проектировать новую среду.

Можно настроить игровой мир под игрока, предлагая ему больше задач и больше подарков, оперативно подстраиваясь под его предпочтения. Если игроку больше нравится находить сокровища в игре и не нравится участвовать в боях, модель может добавить больше сокровищ и уменьшить сложность боев.


модели обучения подкрепления и имитации могут способствовать игровому опыту

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


Достаточно сложная задача — просчет правдоподобной динамики движения конечностей персонажа.


В прошлом году на SIGGRAPH 2017 была представлена ML модель расчета динамики жидкости без прямого моделирования гидродинамики, что существенно сокращает объемы вычислений.


Если включить воображение, можно использовать модели для процедурной генерации текстур, путем переноса стиля (по аналогии с Prisma). Аналогично можно создавать ландшафты, архитектуру и прочие сущности.

Как мне видится, вполне возможно формирование рынка обученных моделей (ботов) игровых персонажей, подобных главному герою игры Moss. Прежде всего, с проработанной динамикой скелета/оболочки. Допустим, на вход ML-модели будем подать входные условия (скорость/состояние, координаты пола/ступеней, вектор эмоций, действий/целей), а на выходе получим следующее состояние. Из таких кадров можно собрать связанную 3D-анимацию.


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

Неожиданный для меня подход это применение ML моделей для повышения качества картинки. В ряде статей приводится пример “умной” фильтрации от NVIDIA, которую называют “технологией суперразрешения”.


ML Super Sampling (слева) и билинейная upsampling (справа)

Сфера применения ML моделей обширна и ограничена только фантазией разработчиков. Если статья вам понравится, в следующих статьях разберем вопросы построения и использования ML-моделей на простых примерах.

Комментарии (11)


  1. AndyKorg
    21.03.2018 17:29
    +1

    Мне понравилось, очень интересная тема. Порно индустрия уже взяла это на вооружение?


  1. LioneNET
    21.03.2018 19:46
    +1

    Мда, до чего дошел прогресс. Еще недавно, если человек делился своими изощренными фантазиями, на тему антропоморфных фуррий, то люди недоумивали. А теперь, это же делает целая команда сценаристов, режиссеров, программистов и т.д но сейчас это высокие технологии и искусство, применяемое в VR. Это я к тому, что любую технологию, пытаются применить в развлекательном сегменте и доходит до того, что все передовые технологии, бывают отображены в куске пластика, резины и микросхем в образе высокотехнологичной куклы, для взрослых развлечений. Со стороны это очень странно смотрится


    1. Danov Автор
      21.03.2018 20:10

      пытаются применить в развлекательном сегменте

      Проще окупить расходы на разработку технологии. Все мы знаем, за чей счет была оплачена разработка высокоскоростного интернета. Помнится, приводили данные, что больше половины трафика «видео для взрослых». А вот то что энергию сжигают на криптовалюту (т.е. СО2 в атмосферу выбрасывают) это уже перебор.

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


  1. QtRoS
    21.03.2018 20:32

    Должно было называться WMF. Windows ML Foundation. Для большей путаницы.


    1. denissjren
      21.03.2018 23:12

      WMF — это Windows Meta File, формат векторного изображения


      1. fingoldo
        22.03.2018 12:15

        Это был сарказм…


  1. ser0t0nin
    21.03.2018 21:41

    Такой безграмотной статьи давно на Хабре не видел, простите.


    1. ser0t0nin
      21.03.2018 21:49

      Даже скорее бестолкового продукта


      1. Danov Автор
        21.03.2018 21:57

        Так вы определитесь, к чему у вас претензии. Можно конкретики?


  1. fingoldo
    22.03.2018 12:17

    для картинок ML Super Sampling было бы интересно увидеть оригинал (входную картинку). что-то мне подсказывает, что она тождественна левой.


    1. Danov Автор
      22.03.2018 13:10

      gwmt.nvidia.com/super-res/result/fffd2bcb-d1b7-4b63-b3fc-50cfed897b9e

      Как я понял, на куче картинок обучили модель, которая может «догадываться» о том, что там может быть. Очевидно, что полученная модель не сможет восстановить мелкий текст, например. Но дорисовать контуры линий — вполне.