Открыт код (Apache 2.0) компилятора NNVM, генерирующего машинный код, оптимизированный для машинного обучения высокоуровневых графов.
Компилятор может генерировать код для GPU (CUDA, OpenCL, Metal), LLVM, который может компилироваться уже в машинный код архитектуры x86_64 и WebAssembly.
Компиляция происходит следующим образом: сначала оптимизируется граф, затем операторы компилируются в исполняемые модули для различных аппаратных бэкэндов. Потом компилируется промежуточное предствление графа. Происходит это с помощью TVM, предметно-ориентированного языка, в котором есть базовые оптимизации (многопоточность, кэширование, разбивка цикла) оптимизированные представления операторов для целевой архитектуры.
Проведение тестирования генерации кода для CPU ARM и GPU NVIDIA показало, что формируемый компилятором итоговый код превосходит по производительности фреймворк MXNet. Размер формируемого модуля зависит в основном от размера runtime TVM, который при сборке для Raspberry Pi и мобильных устройств занимает около 300 Кб.
>>> Подробности