Компания Amazon представила (http://www.tvmlang.org/2017/10/06/nnvm-compiler-announcement...) компилятор NNVM (https://github.com/dmlc/nnvm), предназначенный для компиляции предоставляемых системами машинного обучения высокоуровневых графов вычислений в оптимизированный набор машинных кодов. Код проекта распространяется (https://github.com/dmlc/nnvm) под лицензией Apache 2.0.
Система поддерживает компиляцию моделей в форматах OpenML (https://www.openml.org/) (поддерживаются фреймворки Keras (https://keras.io/) и Caffe (http://caffe.berkeleyvision.org/)), Apache MXNet (http://mxnet.io/) и недавно представленного (https://www.opennet.ru/opennews/art.shtml?num=47166) FaceBook и Microsoft открытого формата ONNX (Open Neural Network Exchange), при помощи которого могут передавать модели обучения из фреймворков Caffe2 (https://www.opennet.ru/opennews/art.shtml?num=46406), PyTorch (http://pytorch.org/) и CNTK (https://www.opennet.ru/opennews/art.shtml?num=43756) (Cognitive Toolkit). На выходе может генерироваться код для различных бэкендов, включая ядра для вычислений на стороне GPU при помощи CUDA, OpenCL и Metal, а также промежуточный код LLVM, на основе которого могут формироваться машинные инструкции для архитектур x86 и ARM или представление WebAssembly.Компиляция включает в себя несколько стадий:
- Формирование промежуточного представления графа вычислений на основе данных, полученных от различных фреймворков машинного обучения.
- Оптимизация полученного графа вычислений и выделение операторов с подпрограммами обработки данных в графе.
- Компиляция операторов в исполняемые модули и развёртывание для различных аппаратных бэкендов с минимальными зависимостями. Для построения кода на основе промежуточного представления используется стек TVM (https://github.com/dmlc/tvm/), предоставляющий предметно ориентированный язык для обеспечения работы используемых в модели операторов при помощи набора базовых реализаций, оптимизированных для различных целевых аппаратных платформ, а также вычислительных примитивов, таких как многопоточность, кэширование и разбиение циклов на блоки (tiling).Архитектура NNVM позволяет легко добавлять новые фронтэнды, операторы и оптимизации графа, без необходимости изменения базовых интерфейсов. Полученные после компиляции модули могут быть сгенерированы в виде кода на c++, python, javascript, java, objective-c для запуска на серверах, мобильных устройствах, встраиваемых системах и в web-браузере.
Проведение тестирования генерации кода для CPU ARM и GPU NVIDIA показало, что формируемый компилятором итоговый код превосходит по производительности фреймворк MXNet. Размер формируемого модуля зависит в основном от размера runtime TVM, который при сборки для Raspberry Pi и мобильных устройств занимает около 300 Кб.
URL: https://aws.amazon.com/blogs/ai/introducing-nnvm-compiler-a-.../
Новость: http://www.opennet.ru/opennews/art.shtml?num=47351
Помнится, аналитики высочайшего уровня в новости об ONNX истово доказывали, что спецификация формата обмена моделями нейросеток «нинужна», васянокод и вообще EEE.
А поди ж ты, амазон со своим тулкитом подключился.
Аналитики с опеннета такие аналитики с опеннета
Как же не нужна?! Без этого впаривать правильно натренированные нейросети не получится. А в чью пользу они будут натренированы - догадайся.
Рабовладельцы таки что-то отдают в OSS, удивительно.
Не будешь холопов подкармливать - откуда рабы возьмутся?
> Не будешь холопов подкармливать - откуда рабы возьмутся?Ну Амазон - это известная галера. Даже для программистов, а что уж говорить про всяких складских людей.
Что, не прошел интервью на программиста? Погоди ... ох ши ... даже на грузчика?! ... 8-о
> Что, не прошел интервью на программиста? Погоди ... ох ши ... даже
> на грузчика?! ... 8-оВ том-то и дело, что прошёл как-то. До сих пор спамят.
> Ну Амазон - это известная галера. Даже для программистов, а что уж
> говорить про всяких складских людей.А это не они галеру автоматизировали? Заменяя грузчиков на роботов и автоматику. Програмеров тоже заменили бы, но пока не получается.
//offtop> промежуточный код LLVM, на основе которого могут формироваться машинные инструкции для архитектур x86 и ARM или представление WebAssembly
это разве все существующие в LLVM бэкенды ? что ограничивает набор бэкендов только этими ?
> Оптимизация полученного графа вычислений и выделение операторов с подпрограммами обработки данных в графе.
> Компиляция операторов в исполняемые модули и развёртывание для различных аппаратных бэкендов с минимальными зависимостями. Для построения кода на основе промежуточного представления используется стек TVMвозможно ли без стояния в гамаке это использовать без NNVM, для "просто программы" ?