Facebook опубликовал (https://code.fb.com/ml-applications/qnnpack/) новую библиотеку QNNPACK (https://github.com/pytorch/QNNPACK) (Quantized Neural Network PACKage), предоставляющую набор оптимизированных для выполнении на мобильных устройствах операторов, которые можно использовать для ускорения различных реализаций нейронных сетей. В частности QNNPACK предоставляет операторы для построения свёрточных, развёртывающих и полностью рекуррентных нейронных сетей, манипулирующие квантованными 8-битными тензорами (https://ru.wikipedia.org/wiki/%D0%A2%D0%.... Библиотека написана на языке Си с ассемблерными вставками, использующими SIMD-инструкции NEON и SSE2 для распараллеливания обработки данных. Код распространяется (https://github.com/pytorch/QNNPACK) под лицензией BSD.Предоставляемые библиотекой QNNPACK примитивы могут использоваться для замены типовых реализаций операторов нейронных сетей в высокоуровневых фреймворках машинного обучения. В настоящее время QNNPACK можно использовать для ускорения работы фреймворка PyTorch (https://github.com/pytorch/pytorch) с поддержкой экспорта моделей в графовое представление Caffe2 (https://github.com/caffe2/caffe2). Библиотека уже применяется в мобильных приложениях Facebook для решения задач компьютерного зрения, таких как классификация и распознавание изображений, а также выделение объектов (Mask R-CNN (https://github.com/matterport/Mask_RCNN), DensePose (https://github.com/facebookresearch/DensePose)) на фотографиях в режиме реального времени.
Замена предлагаемых во фреймворках операторов нейронных сетей на реализацию из библиотеки QNNPACK позволяет приблизительно в два раза ускорить работу приложений на мобильных устройствах, при выполнении таких тестов как MobileNetV2 (https://arxiv.org/abs/1801.04381).
Библиотека поддерживает 32- и 64-разрядные архитектуры ARM (AArch32 и AArch64), а также архитектуру x86 (для оптимизации используются инструкции SSE2).
URL: https://code.fb.com/ml-applications/qnnpack/
Новость: https://www.opennet.ru/opennews/art.shtml?num=49521
А как же OpenCL? А как же использование AI-ускорителей в хуавеевских процессорах? А как же Hexagon DSP в квалкомовских процах?
Не все сразу
Для этого и открыли исходники. Пиши за спасибо фейсбуку.
> А как же OpenCL? А как же использование AI-ускорителей в хуавеевских процессорах?
> А как же Hexagon DSP в квалкомовских процах?А пусть все эти ai-ускорители и хексагоны вывесят хотя-бы тот же opencl, чтоли. А то кодить под ...цать разных апи - желающих мало.
> квантованными 8-битными тензорамиКто-нибудь знает, что это такое?
Догадываюсь. Компоненты тензора представлены не типом double, а типом int8_t.
Тензоры, элементы кототорых занимают 8 бит.
> Тензоры, элементы кототорых занимают 8 бит.Спасибо.
В стародавние времена это называли байтом.
8-ми битные процессоры помню. 16-и битные помню. Сейчас распространены 64-х битные. А 1-байтных, 2-байтных и 8-ми байтных никогда не встречал
8-сьми и 16-надцати.
8-осьми, 16-естнадцати?
Мда. Вот и выросло поколение... которое книжки в руки не брало, а мнение имеет.
Никогда разрядность не называли в байтах: ни сейчас, ни раньше. И пофиг для процессоров или значений.
Почему в битах? Потому что это степень двойки, сразу можно оценить диапазон. Например, числа с плавающей запятой могут быть 16, 32 и 64 битными (другими тоже, не суть важно). Никогда их не называли 4 byte float point.
>сразу можно оценить диапазон. Например, числа с плавающей запятойСразу можно оценить, что вы не айтишник.
Главное, что аргументов не будет. Если что IEE 754 я читал.
А, ну тогда точно айтишник, извините. «Прочитал учебник анатомии, теперь я хирург».
Точно! В твоём случае: поставил Убунту - айтишник, заводил товары на кассе - программист. Усё понятно.
>>Никогда разрядность не называли в байтахочередной никогдашник, речь шла не о разрядности, а о типе данных
пс: "никогда не слышал о 8-ми битных типах данных, только байтовые"
- Саллоцируйте мне 2 бита
- Говорите точно, сколько вешать в байтах
> Никогда разрядность не называли в байтах: ни сейчас, ни раньше. И пофиг
> для процессоров или значений.
> Почему в битах? Потому что это степень двойки, сразу можно оценить диапазон.Скорее, потому что 8 бит в байте -- довольно "новомодное введение"/стандартизация, а раньше в байте могло быть и 4 и 9 и 12 и 24 …
https://tangentsoft.com/pidp8i/wiki?name=PDP-8+Memory+Addres...
> a "byte" was a more slippery concept. You could speak of 6-bit bytes, 7-bit bytes, 9-bit bytes... It all depended on what your particular task neededhttp://pdp10.nocrew.org/docs/instruction-set/Byte.html
> In the PDP-10 a "byte" is some number of contiguous bits within one word. A byte pointer is a quantity (which occupies a whole word) which describes the location of a byte. There are three parts to the description of a byte: the word (i.e., address) in which the byte occurs, the position of the byte within the word, and the length of the byte.
>
В ISO/IEC 9899:201x пока _минимум_ 8§ 6.2.6.1/3
Values stored in unsigned bit-fields and objects of type unsigned char shall be
represented using a pure binary notation.49)49) ... A byte contains CHAR_BIT bits, and the values of
type unsigned char range from 0 to 2**CHAR_BIT − 1.
Implementation limits... The minimum magnitudes shown shall be replaced by implementation-defined magnitudes
with the same sign.#define CHAR_BIT 8
На C свет клином не сошёлся.
> На C свет клином не сошёлся.Верно, есть множество иных стандартов. Наверняка кто-то даже сможет их процитировать.
> Никогда их не называли 4 byte float point.Зато "синглы" и "даблы" (single, double) - достаточно типовое название. Хоть оно и вообще ничего не говорит ни про биты ни про байты. Но подразумевает вполне конкретную точность и вытекающие из этого требования к битности.
Предполагаю, что это байт, который может иметь одновременно несколько состояний в один и тот же момент времени. Но это не точно.
+стопиццот :)Точнее, все возможные состояния одновременно. Ещё точнее, не иметь определённого состояния.
>>Точнее, все возможные состояния одновременно.Эт как это так ? О_о
единица информации в 1 бит - имеет всего два ВЗАИМОИСКЛЮЧАЮЩИХ состояний (1 или 0), как 1 бит может иметь одновременно два состояния? По определению ведь приводит к противоречию!
это же бит Шрёдингера!
> это же бит Шрёдингера!он же - кубит, два разных понятия
> Предполагаю, что это байт, который может иметь одновременно несколько состояний в один
> и тот же момент времени. Но это не точно.Хех, забавно, но они ж не квантовые, а квантованные... )
так понятия "квантового тензора" - нет, не говорю уже о какой-то абсурдности выражения "квантовый 8-ми битный тензор", тут точно битный и квантовый не вызывают противоречия?
Тензором они считают вектор. В данном случае это вектор из 8-ми бит. Само название тензор не имеет ничего общего с понятием из математики и физики. Просто они решили выпендрится и используют его для именования векторов.
Да, выпендрежники те еще. "Квантованный", "тезорный". Опт вашу мать, это просто массив байт. Софистика снова в моде!
> Да, выпендрежники те еще. "Квантованный", "тезорный". Опт вашу мать, это просто массив
> байт. Софистика снова в моде!От тензоров, векторов и проч - ожидаются несколько иные свойства чем от произвольного массива байтов. Так то вообще вся память компьютера - массив байтов. Но есть нюансы.
> Код распространяется под лицензией BSDПроклятые копирасты!
>Библиотека написана на языке Си с ассемблерными вставкамиКак ни крути, но миром управляет язык Си с ассемблерными вставками :)
Быстро, удобно, надёжно, но бесконечно устарело. Оправдано только малой мощностью мобильных камней.
>Быстро, удобно, надёжно, но бесконечно устарело.Устарело? C11 няшка, а будет ещё лучше.
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=fcbe1d6405...
Изложи вкратце для дующих слабо-слабо, что грандиозного будет в новых стандартах? Вложенные функции, как в Dшечке, будут, пространства имён будут?
Что только люди ни придумают чтобы не писать на Lisp...
Ага, например более... нормальные языки программирования. Вроде того же Си. Много чего можно придумать если альтернатива -- писать на Лиспе.
> СиКак в слове ML можно сделать две ошибки? :)
Не знаю, но ты умудрился в слове Си их сделать :)
> Как в слове ML можно сделать две ошибки? :)Сейчас под ML обычно понимают Machine Learning, если уж мы об этом... ;)
>> Как в слове ML можно сделать две ошибки? :)
> Сейчас под ML обычно понимают Machine Learning, если уж мы об этом... ;)Не думаю, что Милнер выразит протест по этому поводу.
> Что только люди ни придумают чтобы не писать на Lisp...Да ну его - состоит из однотипных скобок чуть более чем полностью. Поэтому визуально структура программы очень туго схватывается. И сишку он не обгонит к тому же, хоть там что. Gcc как компилер все же весьма суров по оптимизациям нынче.
Очевидно, асм вставки необходимы для использования SSE2. Либо интринсики, что аналогичны по сути.
> Очевидно, асм вставки необходимы для использования SSE2. Либо интринсики, что аналогичны по сути.Да вообще SIMD как такового. И вообще - в узких местах компилер все же может протупить и выдать черти-какой код. Если этот код заменить на аккуратную мелкую асмовую вставку, все может разогнаться в несколько раз малой кровью. Это почему-то всем очень нравится.
Но вот про "надёжно" спорно. Ошибки работы с памятью - это ненадёжно.
> Но вот про "надёжно" спорно. Ошибки работы с памятью - это ненадёжно.Если програмер раздолбай - как максимум изменится характер ошибок. При том именно ошибки работы с памятью довольно тривиально ловятся, статическим анализом и рантайм инструментами типа asan и valgrind. А когда это реально критично - есть наборы правил типа MISRA C позволяющие делать очень надежный софт для систем критичных к отказам.
Поэтому на сишке держатся управляющие системы, транспорт, промышленность и проч. А то что вы сможете все это лучше - на честное слово вам никто не поверит, увы.
fixed: Оправдано только малой мощностью камней Cortex-M3 и хуже.
> fixed: Оправдано только малой мощностью камней Cortex-M3 и хуже.Да вообще-то для какой-нибудь реалтаймной классификации объектов - и кора и7 с видяхой может быть маловато. А без всего этого не очень получается даже банальный автопилот для авто.
> малой мощностью мобильных камнейХотел бы те же 100+ Ватт, как у десктопных? Яйца сварятся
> Быстро, удобно, надёжно, но бесконечно устарело.Так остальные работают по принципу "пыхтонраст не тормозит" и создают больше новых проблем чем решают старых. Желающие в своем праве показать мастеркласс на чем-нибудь другом, если пупок не развяжется.
И нет, это актуально не только на мобильных камнях. Например нейросети актуальны для допустим автопилотов. Вон на гитхабе лежит (внимание, смертельный номер!) шняга которая подключается к CAN вашего авто и ... выступает автопилотом. Ну там удержание lane, дистанции, автоуправление скоросьтю на основе набортного радара и проч. А если такой штуке допустим данные с камеры хочется дать - внезапно начинает хотеться очень быстрой классификации объектов, потому что реальное время видите ли не ждет. И "всего в три раза медленнее" в такой системе может оказаться очень вредно для здоровья.
Это полезно исключительно для ботнетов. Никто иной в здравом уме учить нейронную сеть на мобильных устройствах не будет. В мобильных устройствах обычно используются уже обученные сети, для работы которых тензорные операторы не нужны...
Ну, теоретически кто-то может построить приложение, которое обучается/дообучается на мобильном клиенте. Но тяжеловесные тензорные операции для этого оверкилл.
Обычно дообучают более простыми алгоритмами...
> Это полезно исключительно для ботнетов.Там вон на гитхабе интересный прототип ботнета лежит - включается в бортовую сеть авто по CAN, берет анализ ситуации на себя и - управляет ускорением, держит авто в своем lane (drive assist), а вообще - стремиться стать полноценным автопилотом. Ему такое явно пригодится: если камерами обвесить, сможет в классификацию объектов и анализ ситуаций.
Представляю себе мир через 15-20 лет. По 6 полосам пилят сплошные роботы. Редкие напуганные джамшуты которым не хватило денег на хайтек - испуганно ныкаются от роботов и камер, пытаясь держать дистанцию не сильно хуже. Про лихачество забыто, потому что камеры и радары есть у всех - от sututation awareness диспетчерского центра до автопилотов. Скорость выбирается swarm intelligence пополам с данными диспетчеров, так что пробок нет как класса, поток пилит с той скоростью которой на этом участке можно пилить. А люди... люди в основном на заднем сидении. А возможно и руля нет. Задал адрес, закинул денег - и поехли.
> Никто иной в здравом уме учить нейронную сеть на мобильных устройствах не будет.
На этой планете много применений которые бы хотели стать мобильными. И единственная причина по которой это не произошло - железо нужной мощности пока слишком большое и прожорливое. Но вот это - очень временно.
> В мобильных устройствах обычно используются уже обученные сети,
> для работы которых тензорные операторы не нужны...Обученная нейросеть, внезапно, утрачивает адаптивность к изменяющимся условиям. Это аннулирует примерно половину смысла нейросети.
> мобильном клиенте. Но тяжеловесные тензорные операции для этого оверкилл.
> Обычно дообучают более простыми алгоритмами...Чего такого тяжеловесного в 8-битных числах? :)
>> Это полезно исключительно для ботнетов.
> Там вон на гитхабе интересный прототип ботнета лежит - включается в бортовую
> сеть авто по CAN, берет анализ ситуации на себя и -
> управляет ускорением, держит авто в своем lane (drive assist), а вообще
> - стремиться стать полноценным автопилотом. Ему такое явно пригодится: если камерами
> обвесить, сможет в классификацию объектов и анализ ситуаций.Это в любом случае предполагает наличие вычислительных ресурсов как минимум сравнимых с современным настольным компьютером. И уж по любому не 8-битных...
> На этой планете много применений которые бы хотели стать мобильными.
Но не на данном этапе...
> И единственная
> причина по которой это не произошло - железо нужной мощности пока
> слишком большое и прожорливое. Но вот это - очень временно.Вот именно. А когда дело дойдёт до практической реализации, то в ход
пойдут вот такие технологии: https://wavecomp.ai/
Процессоры со встроенным сопроцессором для ml-вычислений.> Обученная нейросеть, внезапно, утрачивает адаптивность к изменяющимся условиям. Это аннулирует
> примерно половину смысла нейросети.Только если нет облачной поддержки приложений. Нет никакого особого смысла
полностью автономных мобильных приложениях.>> мобильном клиенте. Но тяжеловесные тензорные операции для этого оверкилл.
>> Обычно дообучают более простыми алгоритмами...
> Чего такого тяжеловесного в 8-битных числах? :)Ничего, если не помнить что:
- матрицы могут быть сколь угодно большого размера
- И процессоры смартфонов сейчас 32-х а то и 64-х разрядные. А операции они делают максимум с половинным словом. То есть 16 и 32 бит соответственно. Со всеми вытекающими...