Мысли о повышении производительности сквозных вычислений

компьютерное зрение

предисловие

С улучшением вычислительной мощности компьютеров и взрывным ростом данных искусственный интеллект начал использоваться во всех аспектах. Увеличение вычислительной мощности связано с хорошей проработкой GPU. Взяв в качестве примера обнаружение объекта, входное изображение может получить классификационную оценку интересующего объекта на входном изображении и bbox, представляющий объект после операции извлечения многослойных признаков. Принцип работы входной карты признаков и ядра свертки каждого слоя — это работа матрицы. И это больше подходит для GPU для выполнения операций.

Во-вторых, о майнинге часто говорят, мол, если бы десять лет назад можно было купить несколько биткойнов, стал бы он разрабатываться сейчас, это понятно, он действительно развит. Технология блокчейн находится в огне из-за Биткойна. Поэтому, в конце концов, что такое майнинг, я не услышал несколько объяснений, с которыми я согласен или нахожу отклик в обсуждениях в повседневной жизни. Позвольте мне уточнить: добыча полезных ископаемых в письменный язык является бухгалтерским учетом. В соответствии с механизмом консенсуса POW механизм доказательства работы используется для достижения консенсуса. На компьютерном языке это можно понимать как выполнение хэш-операции для получения хэша с предопределенное значение характеристики, и эта предустановленная функция — сложность майнингового пула. Так как общее количество биткойнов постоянно, майнить сейчас становится все сложнее, появились различные майнеры, майнинговые пулы, похожие на фабричные, то есть GPU-кластеры.

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

Но есть ли у вас какие-либо идеи?С развитием Интернета, постоянным улучшением пользовательского опыта программного обеспечения или постоянным обновлением архитектуры программного обеспечения кажется неуместным выполнять какую-либо централизованную обработку алгоритмов ИИ. Это не кажется правильным в любом случае.

Например, когда я раньше работал на фабрике, я в основном занимался интеллектуальным вырезанием видео и распространением видеоданных вверх и вниз по течению.Алгоритмическая сторона была в основном CV, NLP и т. д., а средняя ежедневная стоимость машины, которая поддерживает алгоритм. Кажется, что некоторые небольшие алгоритмы действительно могут быть развернуты на стороне терминала, что может сэкономить затраты без восприятия пользователя.В то же время эта обработка на стороне терминала ближе к пользователю и имеет наиболее интуитивно понятные характеристики пользователя. Вместо того, чтобы оборачивать данные через послойные протоколы, это мало что изменит, даже если это возможно. По сравнению с облачным развертыванием преимущества сквозного развертывания очевидны:
1. Высокая производительность в режиме реального времени, оконечная обработка может сократить время передачи данных по сети.
2. Экономьте ресурсы и максимально используйте вычислительную мощность и пространство для хранения на конечной стороне.
3. Хорошая конфиденциальность, генерация данных для потребления данных завершается на стороне терминала, что позволяет избежать риска утечки конфиденциальности, вызванной передачей.
Но вычислительная мощность на стороне действительно является большим узким местом. Даже выполнение некоторых простых операций будет иметь некоторые негативные последствия. Здесь вы можете увидеть, что я разработал.Демонстрация браузерного майнингаа такжеЗапустите posenet на стороне браузераНапример, несмотря на то, что была выполнена некоторая гуманизированная обработка, расчет вычислительной мощности, сосредоточенный на стороне терминала, делает взаимодействие с пользователем не таким хорошим.

Почему GPU подходят для большого количества научных (повторяющихся) операций

В начале проектирования ЦП и ГП были разработаны для решения разных задач с разными ролями.ЦП является ядром нашего компьютера и планировщика.Он используется не только для вычислительных операций, но и основной целью проектирования является низкая задержка . Он содержит мощный и малочисленный арифметико-логический блок ALU и кэш-память большой емкости. В настоящее время основными сценариями применения графического процессора являются: рендеринг изображений, декодирование видео, глубокое обучение, научные вычисления и т. д. Он наиболее подходит для вычислений с несколькими потоками данных и потоками с одной инструкцией, а основной целью проектирования является высокая пропускная способность. Он содержит большое количество арифметико-логических блоков АЛУ. Но кеш меньше. Арифметико-логическое устройство ALU представляет собой комбинационную логическую схему, которая может реализовывать несколько наборов арифметических операций и логических операций. Когда вам нужно сделать то же самое с большим количеством данных, GPU становится более подходящим, а когда вам нужно сделать много одних и тех же данных, более подходящим становится CPU.
CPU与GPU架构对比简图

Где ограничения сквозного

На самом деле, основное противоречие заключается в проблеме вычислительной мощности на конечной стороне, узком месте вычислительной производительности и невозможности иметь поддержку большого количества графических процессоров, что является самым большим ограничением. Чтобы выполнять большое количество операций на стороне терминала, на стороне терминала должна быть более высокая вычислительная производительность при работе с языком. Возьмите JS в качестве примера терминальной стороны языка программирования и используйте JavaScript в качестве основного языка программирования для выполнения научных операций. Как мы все знаем, JS — это динамический, слабо типизированный, интерпретируемый язык, разве у него нет компилятора? Дело не в том, что вам не нужна компиляция, это компиляция во время выполнения. Для работы JS требуется движок JS, чаще всего используется V8. Запустите JS-код с самого начала. Движок V8 анализирует исходный код и преобразует его в абстрактное синтаксическое дерево (AST), которое далее генерирует байт-код через интерпретатор AST, а затем запускает его.

Запуск и выполнение интерпретатора происходит быстро. Потому что нет необходимости ждать, пока весь процесс компиляции завершит выполнение кода. Перевод начинается с первой строки и выполняется последовательно. Таким образом, для веб-программ или платформ важнее иметь возможность выполнять часть кода быстрее и позволять пользователям видеть его. Однако для некоторого повторяющегося кода интерпретатору необходимо переводить его снова и снова, что приведет к снижению эффективности выполнения кода и снижению производительности. Упомянутая выше вычислительная мощность используется в большом количестве повторяющихся вычислений, что делает JS более ограниченным. Напротив, преимущества компилируемых языков могут быть отражены в это время.Выполнение таких языков может занять много времени, чтобы скомпилировать весь исходный код для генерации кода, который может быть выполнен на машине. оптимизируется в процессе компиляции, поэтому нет дополнительных затрат на повторяющуюся работу. производительность будет лучше.

Конечно, то, что я сказал выше о процессе синтаксического анализа JS в V8, является лишь грубой проработкой. V8 имеет различные оптимизации для всего процесса выполнения JS. Основные производители в отрасли предоставляют специализированные механизмы для повышения производительности. Схемы оптимизации, такие как [JUST IN ВРЕМЯ], добавьте шаг анализа в интерпретатор для анализа работы кода, записи количества запусков кода, того, как он выполняется, и другой информации. И выполняйте маркировку состояния, чтобы оптимизировать код для повышения эффективности и производительности выполнения.

Комплексные приложения ИИ

Я просто понимаю, что конечный ИИ — это процесс объединения возможностей ИИ с требованиями к клиенту (приложение, веб, H5) для предсказания алгоритма. Я думаю, что это неизбежная тенденция, например: облегченная модель CNN MobileNetV2.pic

Когда мы обучаем алгоритм, мы выбираем подходящую среду реализации на уровне алгоритма, такую ​​как pytorch, tensorflow, caffe и т. д. Процесс выбора часто сопровождается тем, доступен ли исходный код или нет, полно ли сообщество, легко ли начать, писать, легко ли ждать и так далее, но важным моментом, который нельзя не учитывать, является производительность фреймворка. Также есть много фреймворков вывода на стороне (js):
1.tensorflow.js
2.ONNX.js
3.WebDNN
4.paddle.js
5.mnn.js Но все они реализованы на языке программирования на основе JS.Пример posenet, о котором я упоминал выше, представляет собой демоверсию, реализованную в TF.js, которая кажется растянутой.Как повысить эффективность выполнения и производительность конечной среды очень важно.

Сквозное ускорение вычислительной мощности

1.webworkers
The Web Workers specification defines an API for spawning background scripts in your web application. Web Workers allow you to do things like fire up long-running scripts to handle computationally intensive tasks, but without blocking the UI or other scripts to handle user interactions.

Проще говоря: WebWorkers — это новый API для HTML5. С помощью этого API веб-разработчики могут запускать сценарии в фоновом режиме, не блокируя пользовательский интерфейс. Ядра процессора. Тогда вы можете попробовать вебворкеров здесьПример! реальный эффект.

Браузерная совместимость вебворкеров следующая: практически все они уже поддерживают вебворкеры
webworkers

Parallel – это пакет для веб-воркеров, который можно применять на стороне узла или на стороне браузера. Он может распределять количество потоков в соответствии с количеством ядер вашего процессора, а затем использовать карту и уменьшать интерфейсы для простого выполнения параллельных операций. операций., плюс функция даты, очень удобно сравнивать разное время однопоточной и многопоточной обработки одной и той же задачи. Например: расчет складывается от 1 до 100000000000000 Папа Папа Папа.

2. Ускорение графического процессора webGL
Люди, знакомые с openGL, могут легко начать работу с webGL, но язык программирования и API отличаются.Объект рисования холста предоставляется на уровне веб-страницы, чтобы обеспечить 2D или 3D контекст для рисования 2D или 3D графики.Конечно, вы также можно использовать В настоящее время я думаю, что three.js является наиболее удобной библиотекой webGL для завершения рисования графики, а конкретные знания о webGL можно просмотреть в Интернете. Самым большим преимуществом webGL является то, что он может реализовать внутренний механизм для вызова отрисовки графики с ускорением на GPU. Это позволяет использовать webGL для вычислений с ускорением на GPU.

Когда мы рисуем графику, она состоит из множества пикселей.Цвет каждого пикселя может быть представлен четырьмя измерениями RGBA, и каждое измерение находится в диапазоне от 0 до 255. Если 8 бит представляют RGBA как значение, то каждый пиксель может хранить 32 бита, что является ядром интерфейсных вычислений с использованием графического процессора.Каждый пиксель может хранить 32-битное значение, которое является просто целым или uint. Это демо-версия майнинга в браузере.BWCoinЧтобы ускорить расчет хэш-значения в JS, я пробовал, но не получилось?, но это может стать и моей ценностью опыта! Процесс — это процесс метода, который вам нужен для выполнения операции хеширования и настройки метода расчета в webgl с пикселями в качестве базовой единицы. Это действительно выжигает мозги, это супер стильно~

3.webassembly
Наконец, говоря о главном герое, хахаха, я на самом деле просто хочу поговорить о wasm. Недавно я попробовал wasm и думаю, что действительно можно оценить жизнь JS. Точно так же я все еще сначала предоставляю браузеру поддержку wasm: и Васмкитайский официальный сайт.
pic

Официальный веб-сайт показывает, что WebAssembly/wasm WebAssembly или wasm — это новый формат, который является портативным, небольшим по размеру, быстрой загрузкой и совместимым с Интернетом. Разве это не удивительно, эффективность выполнения JS не очень хороша, тогда замените его напрямую и используйте C или C++ или даже сборку, чтобы ускорить вычислительную эффективность конечной стороны. После нескольких дней попыток я понял, что такое wasm: WebAssembly — это стандарт байт-кода, который использует виртуальную машину для запуска в браузере в виде байт-кода. Докопаться до сути — это предоставить запись для нескольких языков, скомпилировать разные языки в .wasm через LLVM, а затем выполнить. Скомпилированному бинарному коду не нужно проходить два этапа парсинга и компиляции, и нет JS Преимущества декодирования изображений/видео, обработки изображений, 3D и т. д. в некоторых сценариях приложений с высокой вычислительной нагрузкой и высокой производительностью требования выявлены. Другими словами, вам больше не нужно беспокоиться об эффективности выполнения js.Если вы используете более эффективные низкоуровневые языки для написания своей конечной структуры рассуждений или низкоуровневого кода, производительность возрастет. экспоненциально.pic

Запишите быстрый пример раннего внедрения: 1. Установка Wasm и компиляция Emscripten. Предполагается, что вы установили git, cmake и python. cmake можно установить через brew

# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git

# Enter that directory
cd emsdk

# Fetch the latest version of the emsdk (not needed the first time you clone)
git pull

# Download and install the latest SDK tools.
./emsdk install latest

# Make the "latest" SDK "active" for the current user. (writes .emscripten file)
./emsdk activate latest

# Activate PATH and other environment variables in the current terminal
source ./emsdk_env.sh

2. Напишите код C

#include <stdio.h>
int main(int argc, char ** argv) {
	printf("Hello, bowen!");
	return 0;
}

3. Выполните команду компиляции wasm для вывода в html

emcc hello.c -s WASM=1 -o hello.html

4. Используйте команду emrun для создания веб-сервера с протоколом http для отображения наших скомпилированных файлов.

emrun --no_browser --port 8080 .

5. Посетите hello.html в браузере и просмотрите вывод Hello Bowen в консоли, что означает, что компиляция прошла успешно.

Конечно, это всего лишь пример чрезвычайно быстрой работы wasm.Wasm мощен, и есть много аспектов, которые можно сделать, например, использовать wasm для перенастройки плеера. Я все еще изучаю~?

Суммировать

Суммировать? После прочтения вышеизложенного, мне все еще нужно подводить итоги? В любом случае, позвольте мне сказать вам, сквозной интеллект неизбежен, вы можете изучить webgl прямо сейчас и изучить веб-сборку. ??????????????????

Шучу, надо еще подытожить, я видел статью под названием на infoq раньше ** "буду честен, 90% сценариев приложений не нуждаются в WebAssembly"** я очень хотел его ненавидеть, когда увидел это статья ,«При всем уважении, сценарий приложения, который застрял у вас, часто — это 10%». Хотя то, что он сказал, хорошо обосновано, это всегда те небольшие 10%, которые нужно сломать. Я признаю, что в настоящее время использование wasm действительно очень мало, но часто это окончательный опыт. Когда требуется прорыв, он часто застревает в шее Это несколько работ, которые никто не делает.

Во-вторых, это действительно хороший выбор — использовать возможности webGL или wasm для повышения вычислительной мощности и производительности на конечной стороне, особенно wasm.pic