Amazon представила компілятор NNVM для фреймворків машинного навчання


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

На сьогодні є широкий вибір фреймворків для розробки алгоритмів машинного навчання. Також надана можливість запускати код на величезній кількості пристроїв: від мобільних телефонів до хмарних дата-центрів. Ця різноманітність є проблемою для розробників ШІ.

По-перше, необхідно підтримувати на належному рівні роботу багатьох фреймворків. По-друге, треба гарантувати високу продуктивність на різному “залізі”, використовуючи портований код, який підійде як для запуску у веб-браузері, так і на відеокартах дата-центрів. По-третє, необхідно переконатися, що робота фреймворків буде забезпечена на “залізі”, яке ще не вийшло.

Компілятор всьому голова

Amazon вважає, що ключем до розв’язання подібних проблем є використовуваний компілятор. Група дослідників Вашингтонського університету і AWS представили свій підхід у вигляді компілятора NNVM, який ґрунтується на застосуванні стека TVM. Його метою є надання багаторазово використовуваного ланцюжка інструментів для компіляції опису високорівневих нейронних мереж із фреймворків глибинного навчання в низькорівневі коди, використовувані у бекенді.

Компілятор NNVM

Метою компілятора є представлення вхідних даних із різних фреймворків як стандартизованих обчислювальних графів із подальшим їх переведенням у виконувані графи.

Компілятор підтримує моделі у форматах OpenML (фреймворки Keras і Caffe), Apache MXNet і використовуваного Facebook і Microsoft відкритого формату ONNX (Open Neural Network Exchange) за допомогою якого передаються моделі для навчання у фреймворках Caffe2, PyTorch і CNTK (Cognitive Toolkit). Результатом компіляції є код для різних бекендів, включаючи обчислювальні ядра CUDA, OpenCL і Metal. Також можлива генерація коду LLVM, на основі якого формуються машинні інструкції для архітектури x86 і ARM або представлення WebAssembly.

Процес компіляції коду

  • Формування проміжного графа обчислень на основі вхідних даних, отриманих з фронтенд-інтерфейсів фреймворків;
  • оптимізація графа і виділення в ньому операторів з підпрограмами обробки даних;
  • компіляція операторів у виконувані модулі і розгортання для різних бекендів з мінімальними залежностями.

Отримані після компіляції модулі можуть бути згенеровані в необхідний код на різних мовах програмування: С++, Python, JavaScript, Java, Objective-C – для подальшого використання на мобільних платформах, відеокартах, серверах і у веб-браузерах.

Продуктивність компілятора

Співробітники Amazon порівняли продуктивність фреймворк MXNet і нового компілятора NNVM на двох різних апаратних кофігураціях: ARM-процесор на Raspberry Pi та відеопроцесор Nvidia в хмарних сервісах Amazon.

У разі відеокарт Nvidia для фреймворка MXNet як бекенда використовувалася бібліотека cuDNN на графічному прискорювачі Nvidia K80. Компілятор NNVM показав прискорення в 1,2 разу для наборів даних ResNet18 і MobileNet.

На Raspberry Pi продемонстровані результати кращі. Швидкість обробки ResNet18 у NNVM в 2,2 разу вище, а MobileNet – в 11,5 разів. Це пов’язано переважно з тим, що в MXNet глибина згортання не оптимізована (через відсутність подібних операторів у бібліотеці dnn), тоді як NNVM використовує пряму генерацію ефективного коду.

Код компілятора та інструкція з його використання доступні на GitHub.

Джерело: блог Amazon AWS

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *