The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Facebook открыл код библиотеки для ускорения приложений машинного обучения

30.10.2018 09:23

Facebook опубликовал новую библиотеку QNNPACK (Quantized Neural Network PACKage), предоставляющую набор оптимизированных для выполнении на мобильных устройствах операторов, которые можно использовать для ускорения реализаций различных нейронных сетей. В частности, QNNPACK предоставляет операторы для построения свёрточных, развёртывающих и полностью рекуррентных нейронных сетей, манипулирующих квантованными 8-битными тензорами. Библиотека написана на языке Си с ассемблерными вставками, использующими SIMD-инструкции NEON и SSE2 для распараллеливания обработки данных. Код распространяется под лицензией BSD.

Предоставляемые библиотекой QNNPACK примитивы могут использоваться для замены типовых реализаций операторов нейронных сетей в высокоуровневых фреймворках машинного обучения. В настоящее время QNNPACK можно использовать для ускорения работы фреймворка PyTorch и поддерживает экспорт моделей в графовое представление Caffe2. Библиотека уже применяется в мобильных приложениях Facebook для решения задач компьютерного зрения, таких как классификация и распознавание изображений, а также выделение объектов (Mask R-CNN, DensePose) на фотографиях в режиме реального времени.

Замена предлагаемых во фреймворках штатных реализаций операторов нейронных сетей на предоставляемые библиотекой QNNPACK оптимизированные операторы, позволяет ускорить работу приложений на мобильных устройствах приблизительно в два раза, при выполнении тестов на базе нейронной сети MobileNetV2 при решении задач компьютерного зрения. Библиотека поддерживает 32- и 64-разрядные архитектуры ARM (AArch32 и AArch64), а также архитектуру x86 (для оптимизации используются инструкции SSE2).

  1. Главная ссылка к новости (https://code.fb.com/ml-applica...)
  2. OpenNews: Доступен Luminoth, тулкит для решения задач компьютерного зрения
  3. OpenNews: Facebook открыл код платформы Detectron для распознавания объектов на фотографиях
  4. OpenNews: Facebook открыл код библиотеки классификации текста fastText
  5. OpenNews: Amazon открыл код компилятора NNVM для систем машинного обучения
  6. OpenNews: Intel открыл систему машинного обучения для обработки информации на естественном языке
Лицензия: CC-BY
Тип: Программы
Ключевые слова: ai, pytorch, facebook, caffe2, qnnpack
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (56) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, h31 (ok), 09:37, 30/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как же OpenCL? А как же использование AI-ускорителей в хуавеевских процессорах? А как же Hexagon DSP в квалкомовских процах?
     
     
  • 2.2, Аноним (2), 09:46, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не все сразу
     
  • 2.39, Онаним (?), 01:49, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для этого и открыли исходники. Пиши за спасибо фейсбуку.
     
  • 2.47, Аноним (47), 22:49, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > А как же OpenCL? А как же использование AI-ускорителей в хуавеевских процессорах?
    > А как же Hexagon DSP в квалкомовских процах?

    А пусть все эти ai-ускорители и хексагоны вывесят хотя-бы тот же opencl, чтоли. А то кодить под ...цать разных апи - желающих мало.

     

  • 1.3, freehck (ok), 10:03, 30/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > квантованными 8-битными тензорами

    Кто-нибудь знает, что это такое?

     
     
  • 2.10, Аноним (10), 11:58, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Догадываюсь. Компоненты тензора представлены не типом double, а типом int8_t.
     
  • 2.11, Nuzhny (?), 11:59, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тензоры, элементы кототорых занимают 8 бит.
     
     
  • 3.25, freehck (ok), 18:15, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Тензоры, элементы кототорых занимают 8 бит.

    Спасибо.

     
  • 2.15, Аноним (15), 13:04, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В стародавние времена это называли байтом.
     
     
  • 3.16, Аноним (16), 13:29, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    8-ми битные процессоры помню. 16-и битные помню. Сейчас распространены 64-х битные. А 1-байтных, 2-байтных и 8-ми байтных никогда не встречал
     
     
  • 4.18, ОМЖ (?), 13:45, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    8-сьми и 16-надцати.
     
     
  • 5.35, grn (ok), 20:14, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    8-осьми, 16-естнадцати?
     
  • 5.43, Аноним (43), 12:46, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Мда. Вот и выросло поколение... которое книжки в руки не брало, а мнение имеет.
     
  • 3.21, Nuzhny (?), 17:11, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Никогда разрядность не называли в байтах: ни сейчас, ни раньше. И пофиг для процессоров или значений.
    Почему в битах? Потому что это степень двойки, сразу можно оценить диапазон. Например, числа с плавающей запятой могут быть 16, 32 и 64 битными (другими тоже, не суть важно). Никогда их не называли 4 byte float point.
     
     
  • 4.22, Аноним (10), 17:25, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >сразу можно оценить диапазон. Например, числа с плавающей запятой

    Сразу можно оценить, что вы не айтишник.

     
     
  • 5.24, Nuzhny (?), 17:44, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Главное, что аргументов не будет. Если что IEE 754 я читал.
     
     
  • 6.36, Qwerty (??), 23:08, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А, ну тогда точно айтишник, извините. «Прочитал учебник анатомии, теперь я хирург».
     
     
  • 7.37, Nuzhny (?), 23:50, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Точно! В твоём случае: поставил Убунту - айтишник, заводил товары на кассе - программист. Усё понятно.
     
  • 4.28, Sw00p akaJerom (?), 18:54, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >>Никогда разрядность не называли в байтах

    очередной никогдашник, речь шла не о разрядности, а о типе данных

    пс: "никогда не слышал о 8-ми битных типах данных, только байтовые"

     
  • 4.29, Sw00p akaJerom (?), 18:59, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    - Саллоцируйте мне 2 бита
    - Говорите точно, сколько вешать в байтах
     
  • 4.33, Аноним84701 (ok), 19:18, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Никогда разрядность не называли в байтах: ни сейчас, ни раньше. И пофиг
    > для процессоров или значений.
    > Почему в битах? Потому что это степень двойки, сразу можно оценить диапазон.

    Скорее, потому что 8 бит в байте -- довольно "новомодное введение"/стандартизация, а раньше в байте могло быть и 4 и 9 и 12 и 24 …


    https://tangentsoft.com/pidp8i/wiki?name=PDP-8+Memory+Addressing
    > 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 needed

    http://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.
    >

     
     
  • 5.42, Акакжев (?), 11:35, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В  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 [I]minimum[/I] magnitudes shown shall be replaced by implementation-defined magnitudes
    with the same sign.

    #define CHAR_BIT 8

     
     
  • 6.44, Аноним (44), 15:01, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    На C свет клином не сошёлся.
     
     
  • 7.45, Акакжев (?), 15:44, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > На C свет клином не сошёлся.

    Верно, есть множество иных стандартов. Наверняка кто-то даже сможет их процитировать.

     
  • 4.48, Аноним (47), 22:51, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Никогда их не называли 4 byte float point.

    Зато "синглы" и "даблы" (single, double) - достаточно типовое название. Хоть оно и вообще ничего не говорит ни про биты ни про байты. Но подразумевает вполне конкретную точность и вытекающие из этого требования к битности.

     
  • 2.19, Онвоним (?), 14:45, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Предполагаю, что это байт, который может иметь одновременно несколько состояний в один и тот же момент времени. Но это не точно.
     
     
  • 3.23, Аноним (10), 17:28, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    +стопиццот :)

    Точнее, все возможные состояния одновременно. Ещё точнее, не иметь определённого состояния.

     
     
  • 4.30, Sw00p akaJerom (?), 19:00, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >>Точнее, все возможные состояния одновременно.

    Эт как это так ? О_о

     
  • 4.32, Sw00p akaJerom (?), 19:13, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    единица информации в 1 бит - имеет всего два ВЗАИМОИСКЛЮЧАЮЩИХ состояний (1 или 0), как 1 бит может иметь одновременно два состояния? По определению ведь приводит к противоречию!
     
     
  • 5.56, xm (ok), 21:24, 01/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    это же бит Шрёдингера!
     
     
  • 6.59, Sw00p akaJerom (?), 16:16, 02/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > это же бит Шрёдингера!

    он же - кубит, два разных понятия

     
  • 3.26, freehck (ok), 18:16, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Предполагаю, что это байт, который может иметь одновременно несколько состояний в один
    > и тот же момент времени. Но это не точно.

    Хех, забавно, но они ж не квантовые, а квантованные... )

     
     
  • 4.31, Sw00p akaJerom (?), 19:08, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    так понятия "квантового тензора" - нет, не говорю уже о какой-то абсурдности выражения "квантовый 8-ми битный тензор", тут точно битный и квантовый не вызывают противоречия?
     
  • 2.38, Аноним (38), 00:48, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Тензором они считают вектор. В данном случае это вектор из 8-ми бит. Само название тензор не имеет ничего общего с понятием из математики и физики. Просто они решили выпендрится и используют его для именования векторов.
     
     
  • 3.40, Аноним (40), 08:19, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Да, выпендрежники те еще. "Квантованный", "тезорный". Опт вашу мать, это просто массив байт. Софистика снова в моде!
     
     
  • 4.57, Аноним (-), 00:29, 02/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, выпендрежники те еще. "Квантованный", "тезорный". Опт вашу мать, это просто массив
    > байт. Софистика снова в моде!

    От тензоров, векторов и проч - ожидаются несколько иные свойства чем от произвольного массива байтов. Так то вообще вся память компьютера - массив байтов. Но есть нюансы.

     

  • 1.4, Аноним (4), 10:07, 30/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > Код распространяется под лицензией BSD

    Проклятые копирасты!

     
  • 1.6, Аноним (6), 10:31, 30/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    >Библиотека написана на языке Си с ассемблерными вставками

    Как ни крути, но миром управляет язык Си с ассемблерными вставками :)

     
     
  • 2.7, Qwerty (??), 11:05, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Быстро, удобно, надёжно, но бесконечно устарело. Оправдано только малой мощностью мобильных камней.
     
     
  • 3.8, Аноним (6), 11:40, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Быстро, удобно, надёжно, но бесконечно устарело.

    Устарело? C11 няшка, а будет ещё лучше.

    https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=fcbe1d64056ebe8319655ec6e9a3

     
     
  • 4.14, Аноним (10), 12:38, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Изложи вкратце для дующих слабо-слабо, что грандиозного будет в новых стандартах? Вложенные функции, как в Dшечке, будут, пространства имён будут?
     
  • 4.17, Онаним (?), 13:36, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что только люди ни придумают чтобы не писать на Lisp...
     
     
  • 5.20, A.Stahl (ok), 16:03, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ага, например более... нормальные языки программирования. Вроде того же Си. Много чего можно придумать если альтернатива -- писать на Лиспе.
     
     
  • 6.27, freehck (ok), 18:18, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Си

    Как в слове ML можно сделать две ошибки? :)

     
     
  • 7.34, A.Stahl (ok), 19:38, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, но ты умудрился в слове Си их сделать :)
     
  • 7.50, Аноним (47), 22:57, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Как в слове ML можно сделать две ошибки? :)

    Сейчас под ML обычно понимают Machine Learning, если уж мы об этом... ;)

     
     
  • 8.55, freehck (ok), 14:32, 01/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не думаю, что Милнер выразит протест по этому поводу ... текст свёрнут, показать
     
  • 5.49, Аноним (47), 22:56, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Что только люди ни придумают чтобы не писать на Lisp...

    Да ну его - состоит из однотипных скобок чуть более чем полностью. Поэтому визуально структура программы очень туго схватывается. И сишку он не обгонит к тому же, хоть там что. Gcc как компилер все же весьма суров по оптимизациям нынче.

     
  • 3.9, Акакжев (?), 11:43, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Очевидно, асм вставки необходимы для использования SSE2. Либо интринсики, что аналогичны по сути.
     
     
  • 4.53, Аноним (-), 23:07, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Очевидно, асм вставки необходимы для использования SSE2. Либо интринсики, что аналогичны по сути.

    Да вообще SIMD как такового. И вообще - в узких местах компилер все же может протупить и выдать черти-какой код. Если этот код заменить на аккуратную мелкую асмовую вставку, все может разогнаться в несколько раз малой кровью. Это почему-то всем очень нравится.

     
  • 3.12, Аноним (10), 12:05, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Но вот про "надёжно" спорно. Ошибки работы с памятью - это ненадёжно.
     
     
  • 4.52, Аноним (-), 23:05, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но вот про "надёжно" спорно. Ошибки работы с памятью - это ненадёжно.

    Если програмер раздолбай - как максимум изменится характер ошибок. При том именно ошибки работы с памятью довольно тривиально ловятся, статическим анализом и рантайм инструментами типа asan и valgrind. А когда это реально критично - есть наборы правил типа MISRA C позволяющие делать очень надежный софт для систем критичных к отказам.

    Поэтому на сишке держатся управляющие системы, транспорт, промышленность и проч. А то что вы сможете все это лучше - на честное слово вам никто не поверит, увы.

     
  • 3.13, Аноним (10), 12:15, 30/10/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    fixed: Оправдано только малой мощностью камней Cortex-M3 и хуже.
     
     
  • 4.51, Аноним (47), 22:59, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > fixed: Оправдано только малой мощностью камней Cortex-M3 и хуже.

    Да вообще-то для какой-нибудь реалтаймной классификации объектов - и кора и7 с видяхой может быть маловато. А без всего этого не очень получается даже банальный автопилот для авто.

     
  • 3.41, Аноним (40), 08:24, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > малой мощностью мобильных камней

    Хотел бы те же 100+ Ватт, как у десктопных? Яйца сварятся

     
  • 3.46, Аноним (47), 22:48, 31/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так остальные работают по принципу пыхтонраст не тормозит и создают больше нов... текст свёрнут, показать
     

  • 1.54, northbear (??), 11:36, 01/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это полезно исключительно для ботнетов. Никто иной в здравом уме учить нейронную сеть на мобильных устройствах не будет. В мобильных устройствах обычно используются уже обученные сети, для работы которых тензорные операторы не нужны...
    Ну, теоретически кто-то может построить приложение, которое обучается/дообучается на мобильном клиенте. Но тяжеловесные тензорные операции для этого оверкилл.  
    Обычно дообучают более простыми алгоритмами...
     
     
  • 2.58, Аноним (-), 00:43, 02/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Там вон на гитхабе интересный прототип ботнета лежит - включается в бортовую сет... текст свёрнут, показать
     
     
  • 3.60, northbear (??), 11:32, 12/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> Это полезно исключительно для ботнетов.
    > Там вон на гитхабе интересный прототип ботнета лежит - включается в бортовую
    > сеть авто по CAN, берет анализ ситуации на себя и -
    > управляет ускорением, держит авто в своем lane (drive assist), а вообще
    > - стремиться стать полноценным автопилотом. Ему такое явно пригодится: если камерами
    > обвесить, сможет в классификацию объектов и анализ ситуаций.

    Это в любом случае предполагает наличие вычислительных ресурсов как минимум сравнимых с современным настольным компьютером. И уж по любому не 8-битных...

    > На этой планете много применений которые бы хотели стать мобильными.

    Но не на данном этапе...

    > И единственная
    > причина по которой это не произошло - железо нужной мощности пока
    > слишком большое и прожорливое. Но вот это - очень временно.

    Вот именно. А когда дело дойдёт до практической реализации, то в ход
    пойдут вот такие технологии: https://wavecomp.ai/
    Процессоры со встроенным сопроцессором для ml-вычислений.

    > Обученная нейросеть, внезапно, утрачивает адаптивность к изменяющимся условиям. Это аннулирует
    > примерно половину смысла нейросети.

    Только если нет облачной поддержки приложений. Нет никакого особого смысла
    полностью автономных мобильных приложениях.

    >> мобильном клиенте. Но тяжеловесные тензорные операции для этого оверкилл.
    >> Обычно дообучают более простыми алгоритмами...
    > Чего такого тяжеловесного в 8-битных числах? :)

    Ничего, если не помнить что:
    - матрицы могут быть сколь угодно большого размера
    - И процессоры смартфонов сейчас 32-х а то и 64-х разрядные. А операции они делают максимум с половинным словом. То есть 16 и 32 бит соответственно. Со всеми вытекающими...

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру