В последние годы в индустрии программного обеспечения всё боль-шее внимание уделяется теме машинного обучения и, в частности, со-временным методам глубинного обучения, основанным на нейронных сетях. Модели машинного обучения находят применение во всем спектре разрабатываемых приложений, не исключая и сверхпопулярный сектор веб-приложений.
На данный момент существует два концептуальных подхода к интеграции моделей машинного обучения в веб-приложения. Первый подход предполагает удаленное исполнение моделей машинного обучения: необходимые данные из веб-приложения на удалённый сервер отправляются, далее вычисляется результат работы модели, и результат пересылается обратно пользователю. Данный способ имеет ряд недостатков: зависимость от скорости интернета пользователя, необходимость обеспечения конфиденциальности данных и затраты на содержание серверов для запуска моделей.
Второй подход заключается в исполнении модели машинного обучения напрямую в среде исполнения веб-приложения, то есть в браузере пользователя. Данный подход исключает все недостатки предыдущего, но при нем производительность модели зависит от вычислительных мощностей устройства пользователя. Тем не менее, для широкого спектра “простых” моделей, то есть моделей с небольшим числом операторов, этот вариант вполне подходит.
Вариант с локальным исполнением моделей машинного обучения неизбежно приводит к необходимости выбора системы описания и исполнения модели, способной работать в браузере. Существует большое количество библиотек для создания моделей машинного обучения, реализующих разные форматы их представления, и задача нахождения единой системы запуска для всех них далеко не тривиальна. К тому же необходимо, чтобы система исполнения была эффективна и обеспечивала приемлемую задержку, так как многие задачи требуют быстрого отклика.
Для решения проблемы поддержки многих форматов моделей был разработан универсальный формат 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.
[1] Attention is All you Need / Ashish Vaswani, Noam Shazeer,
Niki Parmar et al. // Advances in Neural Information Pro¬cessing Systems / Ed. by I. Guyon, U. Von Luxburg, S. Ben- gio et al.— Vol. 30.— Curran Associates, Inc., 2017.—
URL: https://proceedings.neurips.cc/paper/2017/file/
3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf.
[2] BERT: Pre-training of Deep Bidirectional Transformers for Lan¬guage Understanding / Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova // arXiv preprint arXiv:1810.04805. — 2018.— URL: https://arxiv.org/pdf/1810.04805.pdf.
[3] Bringing the Web up to Speed with WebAssembly / Andreas Haas, Andreas Rossberg, Derek L. Schuff et al. //SIGPLAN Not. — 2017. — jun.— Vol. 52, no. 6.— P. 185-200.— URL: https://doi.org/10.1145/3140587.3062363.
[4] Empirical evaluation of gated recurrent neural networks on sequence modeling / Junyoung Chung, Caglar Gulcehre, KyungHyun Cho, Yoshua Bengio // arXiv preprint arXiv:1412.3555. — 2014.
[5] Flynn Michael J. Some Computer Organizations and Their Effective-ness //IEEE Transactions on Computers.— 1972.— Vol. C-21, no. 9. — P. 948-960.
[6] Hochreiter Sepp, Schmidhuber Jurgen. Long short-term memory // Neural computation. — 1997. — Vol. 9, no. 8. — P. 1735-1780.
[7] Language Models are Unsupervised Multitask Learners / Alec Radford, Jeff Wu, Rewon Child et al. — 2019. — URL: https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf.
[8] Larsen Rasmus Munk, Shpeisman Tatiana. Tensorflow graph opti-mizations. — 2019.
[9] Lattner C., Adve V.LLVM: a compilation framework for lifelong pro-gram analysis amp; transformation// International Symposium on Code Generation and Optimization, 2004. CGO 2004. — 2004. — P. 75-86.
[10] Lomont Chris. Introduction to intel advanced vector extensions // Intel white paper. — 2011. — Vol. 23.
[11] MNN: A Universal and Efficient Inference Engine / Xiaotang Jiang, Huan Wang, Yiliu Chen et al. // Proceedings of Machine Learning and Systems / Ed. by I. Dhillon, D. Papailiopoulos, V. Sze. — Vol. 2. — 2020.— P. 1-13.— URL: https://proceedings.mlsys.org/paper/2020/file/8f14e45fceea167a5a36dedd4bea2543-Paper.pdf.
[12] Marroquim Ricardo, Maximo Andre.Introduction to GPU Program¬ming with GLSL // 2009 Tutorials of the XXII Brazilian Symposium on Computer Graphics and Image Processing. — 2009. — P. 3-16.
[13] JetBrains.— Multiplatform Programming.— URL: https://kotlinlang.org/docs/multiplatform.html (дата обращения: 2021-12-15).
[14] PyTorch: An Imperative Style, High-Performance Deep Learning Li-brary / Adam Paszke, Sam Gross, Francisco Massa et al. // Ad¬vances in Neural Information Processing Systems / Ed. by H. Wallach, H. Larochelle, A. Beygelzimer et al. -- Vol. 32. -- Curran Associates, Inc., 2019. — URL: https://proceedings.neurips.cc/paper/2019/file/bdbca288fee7f92f2bfa9f7012727740-Paper.pdf.
[15] Raman S.K., Pentkovski V., Keshava J. Implementing streaming SIMD extensions on the Pentium III processor //IEEE Micro. -- 2000. -¬Vol. 20, no. 4. — P. 47-57.
[16] Shuangfeng Li. TensorFlow Lite: On-Device Machine Learning Frame-work //Journal of Computer Research and Development.— 2020.— Vol. 57, no. 9.— P. 1839.— URL: https://crad.ict.ac.cn/EN/abstract/article_4251.shtml.
[17] Tensorflow: Large-scale machine learning on heterogeneous distributed systems / Martin Abadi, Ashish Agarwal, Paul Barham et al. // arXiv preprint arXiv:1603.04467. — 2016.
[18] Tensorflow. js: Machine learning for the web and beyond / Daniel Smilkov, Nikhil Thorat, Yannick Assogba et al. // Proceedings of Machine Learning and Systems. — 2019. — Vol. 1. — P. 309-321.
[19] Protocol Buffers: Google’s Data Interchange Format :
Rep. / Google ; Executor: Kenton Varda : 2008.— 6.—
URL: http://google-opensource.blogspot.com/2008/07/
protocol-buffers-googles-data.html.