Нейронные сети на Эльбрусе

от автора

Вступление

Для начала хотел пояснить что это далеко не все нейронные сети, которые портировали на Эльбрус, как минимум можно вспомнить компанию SmartEngines. В данной статье хочу поделиться результатами моих экспериментов на тему нейронных сетей.

GGML

Ранее я уже писал о данной нейронной сети, однако в предыдущей статье данные устарели, так как ggml уже переделали на 1000 раз, хочу показать последние результаты, которых удалось добиться благодаря стараниям Ильи Курдюкова. В нынешнем ggml упор пошел больше на GPU чем на CPU. Поэтому для тестов предлагаю данный репозиторий. Его также можно установить на любое устройство, которое поддерживает ggml. Также имеется скрипт bench.sh, который можно запустить для тестов. Для скачивания модели есть скрипт ./download-koala.sh

Тесты ggml

Результаты представлены в миллисекундах.

Ядра

Ryzen 7 5800H, мс

Intel Core i5-8250U, мс

Эльбрус-16С, мс

Эльбрус-8СВ, мс

1

331.89

544.01

771.46

974.84

2

173.18

313.06

402.19

503.77

3

122.39

280.07

280.82

349.39

4

106.68

269.33

219.58

271.34

5

99.08

181.06

225.06

6

99.24

155.89

194.02

7

104.36

137.33

172.53

8

116.13

123.22

160.89

P.S. Тут представлены пока не все тесты, в дальнейшем дополню.

NCNN

ncnn — Это высокопроизводительный фреймворк нейросетевого вывода, оптимизированный для мобильной платформы. Также данный фреймворк поддерживает vulkan что позволяет запускать нейросети на видеокартах AMD. Тут уже больше не про оптимизации, а про мои «хотелки». Изначально я просто хотел запустить Stable-Diffusion на Эльбрусе, однако, pytorch полноценно пока не портирован под e2k. Поэтому я пошел по пути наименьшего сопротивления и нашел данный фреймворк вместе с которым можно использовать Stable-Diffusion. Ссылка на репозиторий. Для начала, благодаря данному фреймворку, запустил нейронную сеть Yolov3. Во всех последующих экспериментах использовалась видеокарта radeon RX6700XT. Сборка была сделана следующим образом:

git clone https://github.com/Tencent/ncnn.git cd ncnn git submodule update --init mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DNCNN_VULKAN=ON .. make -j8 sudo make install

Если хотите запустить пример с работой нейронной сети yolov3 то можно выполнить следующие действия:

cd examples make -j8 wget https://raw.githubusercontent.com/Qengineering/YoloV3-ncnn-Jetson-Nano/main/mobilenetv2_yolov3.param wget https://github.com/Qengineering/YoloV3-ncnn-Jetson-Nano/raw/main/mobilenetv2_yolov3.bin ./yolov3 (изображение, на котором хотите запустить распознавание).png

Stable-Diffusion-ncnn

Ну и на сладкое генерация картинок. На данный момент все собирается без каких либо проблем. Единственное в коде изменил false на true в параметре use_vulkan_compute. Также скачал стандартные модели (AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin), предложенные разработчиком. После, в файле magic.txt заменил на свой промпт, и получил следующее изображение

Изображение, сгенерированное на Эльбрус-8СВ и видеокарте radeon RX6700XT

Изображение, сгенерированное на Эльбрус-8СВ и видеокарте radeon RX6700XT

Upscaler

Для апскейла изображения использовался waifu2x-ncnn-vulkan.

git clone https://github.com/nihui/waifu2x-ncnn-vulkan cd waifu2x-ncnn-vulkan git submodule update --init --recursive mkdir build cd build cmake ../src cmake --build . -j 8  ./waifu2x-ncnn-vulkan -i input.png -o output.png -n 2 -s 2

Заключение

В данной статье я просто хотел показать что нейронные сети можно запускать на компьютерах под управлением процессора Эльбрус. Если нужна более подробная информация по установке, можно перейти по ссылке.


ссылка на оригинал статьи https://habr.com/ru/articles/752138/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *