861

На пути к нейросети

Мы занимаемся разработкой экзоскелета кисти с биологической обратной связью для реабилитации детей с синдромом ДЦП. А точнее, пытаемся обучить нейросеть распознавать сигналы мозга для управления экзокистью.

Хочу рассказать, с чего началось и как продвигается наше исследование.

Несколько месяцев назад мы начали подготовку данных - сняли около 1000 энцефалограмм, которые содержат признаки, характерные для мысленного представления определенных движений кистью. Всего планируем снять 2000 ЭЭГ, но уже сейчас у нас достаточно данных для начала работы.

Следующий этап - установка видеокарты GeForce RTX 3090 c GDDR6 24Гб. Она позволяет обрабатывать большие обучающие выборки благодаря наличию большого объема памяти и использованию технологии CUDA. Но в новизне видеокарты скрывались подводные камни, которые я не без труда, но с успехом преодолел.

Видеокарта «взлетела» не сразу. Для начала стало ясно, что она не помещается ни в один из имеющихся в наличии корпусов. Был приобретен новый корпус Full Tower и отдельно блок питания на 750Вт. При попытке задействовать возможности CUDA в обучении нейронных сетей возникла следующая проблема – видеокарта слишком новая, фреймворки и библиотеки для искусственного интеллекта (DeepLearning4j, Theano, TensorFlow) её еще не поддерживают. Выход – скачать исходники фреймворков для ИИ и самостоятельно перекомпилировать их для поддержки видеокарты. Однако в процессе оказалось, что эти фреймворки ускоряются не только за счет ресурсов видеокарты, но и требуют поддержки современных инструкций процессора. Был приобретен современный процессор Inter Core I7-10700K с поддержкой AVX, AVX2 команд – , вместе с новой материнской платой и 32 Гб DDR4.


И вот наконец GeForce RTX 3090 смогла продемонстрировать свои возможности!


На первом графике видно, как задействуется память видеокарты и ресурсы GPU при обучении Convolution 1D — сверточной одномерной сети, обрабатывающей временные ряды — данные исследований ЭЭГ. Ранее обучение нейронной сети на этом датасете занимало около 4 часов. На новой видеокарте — порядка 3-4 секунд.

А вот задача посложнее: LSTM — рекуррентная сеть с долгой краткосрочной памятью. Те же данные считаются дольше — около 2 минут, и нагрузка на GPU выше:

Видеокарта решает! Раньше при внесении даже небольших изменений в конфигурацию сети, приходилось ждать несколько часов, чтобы понять, каким образом внесенные изменения отобразились на качестве распознавания признаков нейронной сетью. Теперь эта задача существенно облегчается.


Таким образом, видеокарту удалось запустить в Keras, используя только что вышедшее обновление TensorFlow в версии для GPU.

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

Поэтому необходимо было получить возможность работать с ИНС в Java-приложениях, но с этим из-за использования слишком нового железа возникли трудности. Описанными в мануалах способами GPU никак не хотел подключаться, и решения на тематических форумах на сайте разработчиков и GitHub не было, а те рецепты решения проблемы, которые советовали разработчики, не помогали.


Возникло понимание, что причина проблемы - в несовместимости ряда библиотек, компонентов фреймворка, с новыми библиотеками CUDA от NVIDIA.

Пришлось скачивать исходники и пытаться собирать библиотеки под необходимые платформы: CUDA 11.* и CuDNN 8.*, что оказалось нетривиальной задачей: имелось несколько тысяч файлов и масса условий окружения для нормальной сборки, а мануалы описывали сборки устаревших версий и не работали с новыми.

Кроме того, в исходных кодах возникали некоторые ошибки компиляции, одинаковые как для компиляции из Windows 10 (VS2019), так и из Ubuntu (gcc).

Удалось скомпилировать, после правки исходных кодов, часть зависимых библиотек проекта - libnd4j, а затем уже с ними библиотеку nd4j-cuda-11.1.


Ранее поддержка проекта рекомендовала использовать snapshots - версии библиотек из специального репозитория:


«we’ll be releasing a version with 11.0 in a bit, for now you can use snapshots and see if that works? https://deeplearning4j.konduit.ai/config/config-snapshots»


Однако, как оказалось, часть необходимых для работы файлов там отсутствовала, и рекомендация не помогла.


https://oss.sonatype.org/service/local/artifact/maven/redire...

404 — Not Found

Path /org/nd4j/nd4j-cuda-11.0/1.0.0-SNAPSHOT/nd4j-cuda-11.0-1.0.0-20201117.023522-181-windows-x86_64.jar not found in local storage of repository «Snapshots» [id=snapshots]


Что и обусловило компиляцию недостающих файлов. К счастью, версия deeplearniung4j для 11.0 версии CUDA импортировалась, и, добавив в проект в виде отдельных jar и dll файлов скомпилированные библиотеки, удалось запустить приложение на видеокарте!


Часть POM файла работоспособного проекта:

Скомпилированные библиотеки добавлены в зависимости вручную:

В данном случае - обучение на сравнительном не большом объеме данных заняло 42 минуты 37 секунд, на CPU эта же задача выполнялась более 2500 минут при полной загрузке процессора.


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


Спасибо за внимание. Пока мы еще в начале пути, буду продолжать рассказывать о нашей работе!

Искусственный интеллект

5.4K постов11.7K подписчика

Правила сообщества

ВНИМАНИЕ! В сообществе запрещена публикация генеративного контента без детального описания промтов и процесса получения публикуемого результата.


Разрешено:


- Делиться вопросами, мыслями, гипотезами, юмором на эту тему.

- Делиться статьями, понятными большинству аудитории Пикабу.

- Делиться опытом создания моделей машинного обучения.

- Рассказывать, как работает та или иная фиговина в анализе данных.

- Век жить, век учиться.


Запрещено:


I) Невостребованный контент

  I.1) Создавать контент, сложный для понимания. Такие посты уйдут в минуса лишь потому, что большинству неинтересно пробрасывать градиенты в каждом тензоре реккурентной сетки с AdaGrad оптимизатором.

  I.2) Создавать контент на "олбанском языке" / нарочно игнорируя правила РЯ даже в шутку. Это ведет к нечитаемости контента.

  I.3) Добавлять посты, которые содержат лишь генеративный контент или нейросетевой Арт без какой-то дополнительной полезной или интересной информации по теме, без промтов или описания методик создания и т.д.


II) Нетематический контент

  II.1) Создавать контент, несвязанный с Data Science, математикой, программированием.

  II.2) Создавать контент, входящий в противоречие существующей базе теорем математики. Например, "Земля плоская" или "Любое действительное число представимо в виде дроби двух целых".

  II.3) Создавать контент, входящий в противоречие с правилами Пикабу.


III) Непотребный контент

  III.1) Эротика, порнография (даже с NSFW).

  III.2) Жесть.


За нарушение I - предупреждение

За нарушение II - предупреждение и перемещение поста в общую ленту

За нарушение III - бан

30
Автор поста оценил этот комментарий

У меня вопрос - как можно принять участие в проекте? Это именно та тема которая меня крайне интересует! Я бы хотел проверить несколько гипотез - в частности проверить пригодность генетических алгоритмов, например NEAT, в обучении управлении рукой. Или проверить как сработают алгоритмы кластеризации - c-means, k-means. Есть еще много мыслей и идей которые надеюсь смогут вам помочь, коротко их тут не описать.

Готов посвятить почти всё свободное от работы время)

раскрыть ветку (1)
18
Автор поста оценил этот комментарий
Напишите мне на fablab@cfuv.ru
показать ответы
19
Автор поста оценил этот комментарий

Даааааа

3 строчки про дцп и детях,

20 абзацев про видяху)))))

раскрыть ветку (1)
11
Автор поста оценил этот комментарий
Не всё сразу )
показать ответы
3
Автор поста оценил этот комментарий
А почему бы просто не использовать сервера типа azure или гугловские или те же облачные решения от нвидиа? Это дешевле для построения прототипа, чем покупать видеокарты и процессоры.
По опыту знаю, что даже вычислить predict по входным данным при достаточно сложной архитектуре нейронки, бывает достаточно долго по времени. Так что все равно придется саму руку оборудовать либо подключением к интернету постоянным, либо мощным процессором.
раскрыть ветку (1)
6
Автор поста оценил этот комментарий
Крым. Я драйвера даже через впн качаю
показать ответы
2
настрочил
Автор поста оценил этот комментарий

Здорово в целом!

Подобные задачи у разработчиков и MLOps-ов возникают постоянно, но на пикабу вроде не было.


А про проект и про вас что-нибудь где-нибудь есть? Гитхаб, описание проекта, описание фаблаба?

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Я не настоящий сварщик )) и уж тем более не MLOps. Это хобби такое, удалось совместить с должностью доцента кафедры анатомии.

2
настрочил
Автор поста оценил этот комментарий

Здорово в целом!

Подобные задачи у разработчиков и MLOps-ов возникают постоянно, но на пикабу вроде не было.


А про проект и про вас что-нибудь где-нибудь есть? Гитхаб, описание проекта, описание фаблаба?

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Спасибо )) Проект в процессе развития, готовим научную статью. А про наш фаблаб всё здесь: fablabcfuv.ru (надеюсь, ссылку можно оставить)

показать ответы
17
Автор поста оценил этот комментарий

- Почему статья здесь, а не на Хабре, например?

- Добавляя поддержку в библиотеки, отправляли ли вы их в гит разработчиков?

- Вы уверены, что ML поможет? У каждого мозг уникален и меняется со временем, поэтому нет гарантии, что устройства будут работать правильно даже на одном пользователе? Не лучше ли внедрить калибровку и ML уже на конечном продукте?

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
Я выложил на форумах ссылки на либы, как просили пользователи, разработчики обещают добавить в следующих релизах, я не понимаю причин, почему они сами эти библиотеки в репозитории не выложили.
DL используется давно в распознавании патернов ЭЭГ, читал десятки статей на эту тему... готовлю большую выборку экспериментальных данных для обучения сети. Планировал с 200 человек но ковид внес свои коррективы
показать ответы
21
Автор поста оценил этот комментарий

>Использовать Windows

>Жаловаться на отсутствие поддержки в библиотеках

Не надо так. Nvidia Docker runtime for GPU вам в помощь. Triton, TensorRT Server и прочее.


Ну и про то, что питон не подходит для обслуживания высокой нагрузки под ИНС - тоже неправда. Вам просто нужно использовать multiprocessing. Либо в бэкенде TensorRT Server с оптимизированной моделькой а фронт - на flask под питоном.

раскрыть ветку (1)
8
Автор поста оценил этот комментарий
Дело не в обслуживании высокой нагрузки, а в работе в условиях близких к real time... сьем данных с устройства, обработка: фильтрация, децимация, подача данных в ИНС, управление внешним устройством... и т.д.
в дальнейшем это решение будет работать локально, без интернета, к тому же мы немного из Крыма, я даже драйвера и CudaToolkit скачать могу только через vpn
показать ответы
4
Автор поста оценил этот комментарий
Резонно, надо писать на то, что лучше знаешь.
По теме вопроса, очень интересная у вас задача. Сразу много идей появляется, как и что можно было бы реализовать.
Не знаю, какой у вас опыт работы с машинным обучением, но готов предложить свою помощь, если вдруг будет польза. У меня есть опыт разработки готовых решений на базе нейросетей для торговли ценными бумагами. Как раз работал с сигналами, распределенными по времени.
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Спасибо за предложение. Буду иметь ввиду, напишите, пожалуйста на емейл fablab@cfuv.ru. Сейчас снимаем ээг с добровольцев-студентов, пока сняли с 90 человек (по 10 сеансов), хотя планировал 200... ковид, все разьехались на удаленку((
2
Автор поста оценил этот комментарий
Java я постоянно использую, удобней, на C++ писал последний раз, когда он был еще 6.0))
сразу нашел нужные либы для обработки сигналов ээг (brainflow, java) нашел недоделанную, доделал сам, библиотеку для работы с edf файлами (java), написал быстренько конвертеры. На java у меня получается быстро сделать высокопроизводительное приложение с GUI.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Использовать хочу в составе реабилитационного комплекса для детей с дцп
3
Автор поста оценил этот комментарий
Простите тогда за скепсис:) Такого опыта у меня не было.
Но все-таки, как вы хотите использовать уже обученную модель в руке?
И почему выбор пал на Яву, как язык реализации, а не на плюсы например? Фреймворк тенсорфлоу изначально на плюсах написан же.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Java я постоянно использую, удобней, на C++ писал последний раз, когда он был еще 6.0))
сразу нашел нужные либы для обработки сигналов ээг (brainflow, java) нашел недоделанную, доделал сам, библиотеку для работы с edf файлами (java), написал быстренько конвертеры. На java у меня получается быстро сделать высокопроизводительное приложение с GUI.
показать ответы
6
Автор поста оценил этот комментарий
Крым. Я драйвера даже через впн качаю
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Там где прототип эксплуатировался в этом году (на другом классификаторе) , г. Евпатория, не работал даже мобильный интернет
1
Автор поста оценил этот комментарий

под свои задачи собирал себе такой вот вариант:
2 Xeon 2697v2 + 512Gb ОЗУ + 32 вычислителя P104-100 8Gb (в ближайшее время попробую запустить 52 таких вычислителя на одной плате)
выделяю по одной линии PCIe на вычислитель.

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

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Это совсем разные задачи и совсем разный бюджет... :)
пока моя выборка вмещается в 20ГБ и небольшой запас еще есть!)
1
Автор поста оценил этот комментарий

Списались по почте, все хорошо) надеюсь на долгосрочное сотрудничество )

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Мы тоже надеемся!) Фаблаб - это как раз то место где творческие и увлеченные люди могут обьединиться для решения каких то интересующих их задач!
0
Автор поста оценил этот комментарий

Ну, Симферополь - это довольно много Крыма.)

Не было проблем с утверждением сметы на игровой комп в 200К рублей?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
На всё, кроме видеокарты, я сам себе смету утвердил и сам профинансировал из своей зарплаты. Проблем пока не было ))
показать ответы
3
Автор поста оценил этот комментарий

Я так понимаю ранее у вас стоял core 2 duo?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
I5-750 :)
показать ответы
0
Автор поста оценил этот комментарий

О, прикольно, это на базе универа исследования? Случайно не физико-технический институт занимается?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Да, это исследования на базе Медакадемии КФУ. К ФТИ отношения не имеем, Фаблаб - это отдельное структурное подразделение КФУ.
показать ответы
0
Автор поста оценил этот комментарий

https не работает

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Сайт на личном сервере, https нет.
0
DELETED
Автор поста оценил этот комментарий
750? такой был?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Конечно был!) И сейчас вторым компом дома работает. Его более-менее на все хватало, пока ИНС не пошли....
0
Автор поста оценил этот комментарий
А вы рассматривали вариант запуска на кластере на нескольких мелких видеокартах?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

это решение, мне кажется будет менее эффективно по скорости, из-за, например, более медленной распределенной памяти, тут же 10456 ядер CUDA общаются с 24 ГБ массивом напрямую по 384 битной шине, так что для моих задач -это решение лучше, возможно, позже поставлю 2 gtx3090, если возникнет необходимость...


"GeForce RTX 3090 оказался единственной видеокартой 30-го семейства, которая поддерживает интерфейс NVLink для прямой коммуникации между двумя GPU. Общая пропускная способность канала осталась практически такой же, как в потребительских ускорителях архитектуры Turing (112,5 Гбайт/ с против 100 Гбайт/с в обе стороны), но это уже другая версия интерфейса, который теперь состоит из четырех линий скоростью 28,13 Гбайт/с вместо двух прежних на 50 Гбайт/с и требует использовать мостики нового образца. Функцию NVLink в RTX 3090 тоже оставили не для игр, а для приложений GP-GPU, которые в состоянии ей воспользоваться, но размер кластера в любом случае ограничен двумя графическими процессорами. "

показать ответы
1
Автор поста оценил этот комментарий

Отличная штуку делаете.
Не думали использовать электромиографию вместо ЭЭГ? У ЭЭГ, ЕМНИМ, на три порядка меньше амплитуда и в разы сложнее обработка.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
0
Автор поста оценил этот комментарий

«немного из Крыма» - это Севастополь?)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Крымский федеральный университет ))
показать ответы
1
Автор поста оценил этот комментарий

@FabLabCFU Поясните пожалуйста, Вы пишете, что у вас возникли проблемы с вызовом Tensorflow модели из Java из-за какой-то несовместимости оборудования, вы её починили и потом ВНЕЗАПНО говорите, что это было Deeplearning4j. Что-то упустил, где произошла подмена и что в итоге не работает - скомпилированная Tensorflow на 3090 или эта Deeplearning4j.
Если второе - то тогда какие были проблемы у компиляции Tensorflow (через Tensorflow Java/TFLite)?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Tensorflow я использовал с Keras. Ранее не получалось из-за отсутствия avx инструкций в проце, и я подключал theano, сейчас проц поддерживает avx, avx2, пока я собирал tensorflow из исходников, (а один файл, внезапно, мог компилироваться больше 24 часов, на форумах писали о 2 сутках...) выпустили обновление, и после переименования нескольких файлов из cudnn(с вида *_11.dll в *_10.dll), все работает. Но это решение Keras, я использую для прототипирования архитектуры НС. Для реально работающего приложения собираюсь использовать dp4j, ситуация с которым и была описана, ...
показать ответы
0
Автор поста оценил этот комментарий
Почему делаете на ЭЭГ, а не на Эмг?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Из-за целевой аудитории и вообще цели использования. Нужны воображаемые движения, используются с детьми с дцп для "тренировки" мозга, возникновению новых нейронных связей и в дальнейшем это дает улучшение координации реальных движений у больных детей
0
Автор поста оценил этот комментарий
А кто разрабатывает эти экзоскелеты? Есть сайт проекта? В России с нашими чиновниками мы их не увидим наверное...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
В нашем случае - НПО "Андроидная техника".
2
DELETED
Автор поста оценил этот комментарий

тут выбор очевиден, 24 гига гддр 6 в новой карте решают, даже слай из прошлых топов не будет таким производительным. какой сетап был до i10+3090?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Печальный был сетап (i5 16GB, gtx970) к счастью еще есть, удаленно, 40 потоковый серв с 32GB Ram считал и на нем, но карта рулит. Чуть не купил квадро на предыдущих gpu с 24gb ram, но поставщик не смог ее найти и предложил эту, новая, кстати, дешевле оказалась
0
Автор поста оценил этот комментарий

Ранее обучение нейронной сети на этом датасете занимало около 4 часов. На новой видеокарте — порядка 3-4 секунд.
Какая ранее была видеокарта?
Да неужели важна настолько скорость 3-4 секунды, а не 20-30 как думаю была-бы в 3080, в соотношений скорости/цена очень отличается.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Важен обьем памяти на видеокарте, раньше было out of memory на моей выборке, пришлось обьем данных уменьшать
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества