В последние годы в индустрии программного обеспечения всё боль-шее внимание уделяется теме машинного обучения и, в частности, со-временным методам глубинного обучения, основанным на нейронных сетях. Модели машинного обучения находят применение во всем спектре разрабатываемых приложений, не исключая и сверхпопулярный сектор веб-приложений.
На данный момент существует два концептуальных подхода к интеграции моделей машинного обучения в веб-приложения. Первый подход предполагает удаленное исполнение моделей машинного обучения: необходимые данные из веб-приложения на удалённый сервер отправляются, далее вычисляется результат работы модели, и результат пересылается обратно пользователю. Данный способ имеет ряд недостатков: зависимость от скорости интернета пользователя, необходимость обеспечения конфиденциальности данных и затраты на содержание серверов для запуска моделей.
Второй подход заключается в исполнении модели машинного обучения напрямую в среде исполнения веб-приложения, то есть в браузере пользователя. Данный подход исключает все недостатки предыдущего, но при нем производительность модели зависит от вычислительных мощностей устройства пользователя. Тем не менее, для широкого спектра “простых” моделей, то есть моделей с небольшим числом операторов, этот вариант вполне подходит.
Вариант с локальным исполнением моделей машинного обучения неизбежно приводит к необходимости выбора системы описания и исполнения модели, способной работать в браузере. Существует большое количество библиотек для создания моделей машинного обучения, реализующих разные форматы их представления, и задача нахождения единой системы запуска для всех них далеко не тривиальна. К тому же необходимо, чтобы система исполнения была эффективна и обеспечивала приемлемую задержку, так как многие задачи требуют быстрого отклика.
Для решения проблемы поддержки многих форматов моделей был разработан универсальный формат Open Neural Network Exchange (ONNX) , в который можно конвертировать модели из различных фор-матов.
В настоящее время на языке Kotlin разрабатывается библиотека KInference . Её основная цель — запуск моделей машинного обучения в формате ONNX. На данный момент KInference поддерживает исключительно JVM как среду исполнения, поддержка JS виртуальных машин — безусловно важная задача для развития данной библиотеки.
Постановка задачи
Целью данной работы является поддержка исполнения моделей машинного обучения в виртуальных машинах JavaScript для платформы KInference.
Для достижения поставленной цели требуется:
• реализовать возможность запуска платформы KInference в виртуальной машине JavaScript;
• провести обзор оптимизаций математических операций, доступных в браузере;
• провести апробацию оптимизаций математических операций, доступных в браузере;
• выбрать и реализовать наиболее оптимальные варианты оптимизаций;
• провести апробацию конечного решения.
В ходе выполнения данной работы были достигнуты следующие результаты:
• реализована возможность использования KInference в проектах на JS;
• проведён обзор оптимизаций математических операций, доступных в браузере;
• проведена апробация оптимизаций математических операций, доступных в браузере;
• разработана и интегрирована новая реализация KInference для JS с использованием тензорных операций из библиотеки TFJS и технологии WebGL;
• проведена апробация конечного решения.
В рамках дальнейшей работы планируется провести эксперименты с WebGPU и расширить поддержку операторов в GPU реализации KInference.
Результаты, полученные в ходе данной работы, будут использованы в проекте Grazie Platform компании JetBrains для осуществления возможностей автодополнения и исправления грамматических ошибок в текстах на английском языке локально в веб-редакторе Grazie и рас-ширении для браузеров Google Chrome — Grazie Chrome Extension.