Искусственный интеллект и машинное обучение — две хайповые тенденции последних лет. Необходимые для 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 мне виделся для переноса только нейросетевых моделей. Но в опубликованной документации на WinML описывается пример переноса модели Support Vector Machine (модель опорных векторов) в ONNX с помощью пакета WinMLtools. SVM принадлежит семейству линейных классификаторов и, в принципе, может быть отображен в нейросетевую модель. Какие еще модели можно выгрузить в ONNX пока не знаю. Можно допустить, что еще можно выгрузить модели логистической регрессии (по факту один нейрон) или даже линейной регрессии (нейрон без функции активации). Мой первый опыт создания простейшей модели в CNTK (Microsoft Cognitve Toolkit) с выгрузкой в ONNX закончился неудачно. Проблема совместимости. Но это была версия CNTK 2.3.1. Неделю назад уже вышла версия CNTK 2.5. В новых версиях пишут об улучшении поддержки ONNX.
ML был доступен на Windows и ранее через альтернативные библиотеки. Например, Open Source проект Accord.Net. Полезность WinML в том, что предлагается некий стандарт, который, с одной стороны, позволяет получать модели из популярных пакетов, а с другой выполнять модели на разнообразном железе.
В своей презентации Microsoft говорит, о быстром вычислении загруженных моделей на различных платформах за счет слоя DirectX. Для разработчиков оптимизация вычислений под зоопарк аппаратных и программных платформ титанический, порой неподъемный труд. По задумке 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 может вычислять модель, используя локальные ресурсы ПК, позволяя в локальном времени анализировать большие локальные данные, такие как изображения и видео. Результаты вычислений могут быть получены быстро и эффективно для использования, например, в игровых движках или фоновых задачах, подобных индексированию. Например, индексирование музыкальных файлов позволит составить индивидуальные плейлисты.
Снижение эксплуатационных расходов, за счет выгрузки из облака моделей на устройства пользователей. Существенная экономия может быть достигнута за счет сокращения или устранения затрат на перекачку данных между сетевым сервисом аналитики и клиентом. Модель на стороне клиента позволяет обрабатывать запросы локально, а новые данные для дообучения модели могут отправляться на сервис.
Гибкость. Разработчики могут выбирать место, где будут выполняться вычисления, локально или в облаке. Политика клиента может запрещать отправку чувствительных данных в сеть, а может наоборот потребовать вычислений в сети, для сокращения времени получения результата, что актуально для больших моделей и маломощных устройств.
Начало работы с 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 модель расчета динамики жидкости без прямого моделирования гидродинамики, что существенно сокращает объемы вычислений.
Если включить воображение, можно использовать модели для процедурной генерации текстур, путем переноса стиля (по аналогии с Prism). Аналогично можно генерировать ландшафты и даже архитектуру и прочие сущности.
Как мне видится, вполне возможно формирование рынка обученных моделей игровых персонажей, подобного главному герою игры Moss. Прежде всего, с проработанной динамикой и, возможно, графикой.
Можно построить модель, которая будет классифицировать действия пользователя по динамике движения мыши или профиля использования клавиатуры и т.п.
Неожиданный для меня подход это применение ML моделей для повышения качества картинки. В ряде статей приводится пример “умной” фильтрации от NVIDIA, которую называют “технологией суперразрешения”.
ML Super Sampling (слева) и билинейная upsampling (справа)
Сфера применения ML моделей обширна и ограничена только фантазией разработчиков. Если статья вам понравится, в следующих статьях разберем вопросы построения и использования ML-моделей на простых примерах.
Автор: Danov