Библиотека Edge ML: высокопроизводительная библиотека для машинного обучения на устройстве
Edge ML Library (EMLL) предлагает оптимизированные базовые процедуры, такие как общие матричные умножения (GEMM) и квантования, чтобы ускорить машинное обучение (ML) на устройствах на базе ARM. EMLL поддерживает типы данных fp32, fp16 и int8. Библиотека ускоряет работу механизмов NMT, ASR и OCR компании Youdao, Inc.
Особенности
Ориентированный на производительность дизайн. Процедуры матричного умножения сильно оптимизированы для форм матриц, распространённых в задачах машинного обучения на устройствах, включая «узкие». Ядра матричных умножений настроены для конкретных процессоров с большой частью встроенного ассемблерного кода.
Простой интерфейс. Данные и параметры передаются без усложнений. Матрицы и массивы передаются с базовым адресом и размерами. Параметры GEMM, редко используемые при выводе на устройство, например LDA-LDC, исключены из интерфейса. Нет зависимости от сторонних вычислительных библиотек.
Расширяемость. EMLL абстрагирует основные структуры алгоритмов высокопроизводительного матричного умножения на основе CPU, а также функции смещения/квантования до общих макросов (см. файлы в include/common), которые могут быть применены к различным процессорам. При разработке для новой архитектуры можно сэкономить много времени благодаря этим макросам.
API EMLL
EMLL предоставляет ряд функций C. Подробности см. в Usage_EN.md.
Тип | Имя | Параметры |
---|---|---|
Матричное умножение | data_type + «gemm» | matrix_orders, адреса матриц, M, N, K, beta, количество потоков |
Слой с полным подключением (fp32) | «fc» | адреса src/weight/bias/output, размеры M/K/N, порядки исходных матриц, (количество потоков) |
Квантование | «quantize_» + «симметричный»/«асимметричный» + input_type + output_type | входной массив, выходной массив, (нулевая точка), масштаб, размер массива, входной диапазон |
Реквантизация | «requantize_» + «симметричная/асимметричная» + «XtoY» | входной массив, выходной массив, (нулевая точка), выходная шкала, размер массива, входной диапазон |
Смещение | «bias» + data_type | матрица, которую нужно сместить, скалярное смещение всех элементов, векторное смещение вдоль основного направления, векторное смещение вдоль второстепенного направления, размеры матрицы |
Поддерживаемые архитектуры и типы данных
Целевой процессор | Матричное умножение | Смещение | Квантование | Реквантизация |
---|---|---|---|---|
ARMv7a 32-бит | fp32 -> fp32, (u)int8 -> (u)int32 | fp32, int32 | fp32 -> (u)int8/(u)int16 | int32 -> (u)int8/(u)int16, int16 -> (u)int8 |
ARMv8a 64-бит | fp32 -> fp32, (u)int8 -> (u)int32, fp16 -> fp16 | fp32, fp16, int32 | fp32 -> (u)int8/(u)int16 | int32 -> (u)int8/(u)int16, int16 -> (u)int8 |
Поддерживаемые ОС: Linux & Android.
Поддерживаемые компиляторы: GCC & Clang.
План на будущее
В будущем EMLL может поддерживать устройства с GPU и NPUs, расширяя доступные функции в соответствии с бизнес-требованиями.
Лицензия
Apache 2.0.
Ссылка
Eigen: [https://eigen.tuxfamily.org].
OpenBLAS: [https://github.com/xianyi/OpenBLAS].
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )