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 - бан

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

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

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

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


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

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

о каком реалтайме речь? реалтайм - это гарантированный отклик системы порядка десятков микросекунд. реалтайм - это не про нейронки. тем более на говне и палках как 3090 и стоковое железо из лабаза.

раскрыть ветку (24)
7
Автор поста оценил этот комментарий
Реалтайм - это просто про гарантированный отклик, соответствующий задаче. Значение верхней границы по времени может быть любым. Все остальное - фантазии тех, кто не знает значение термина.
раскрыть ветку (21)
Автор поста оценил этот комментарий

Реалтайм для пряморуких - это микроконтроллер и ассемблер. С известной частотой, временем цикла и опроса.

раскрыть ветку (10)
5
Автор поста оценил этот комментарий
Чуток снобизмом потянуло. Так и до побитовой обработки дойдем.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Да как-то не чуток. Чуток некомпетентностью или юношеским максимализмом.
1
Автор поста оценил этот комментарий
Реалтайм для действительно пряморуких - использовать те средства, которые позволяют четко выполнить ТЗ. А ассемблер и тп - это только там где нужно.
До сих пор вспоминаю не хорошим словом "пряморуких", которые мне на сложном проекте в самом начале карьеры запретили использовать Си. Аж библиотеку float-point пришлось самому писать.
раскрыть ветку (7)
0
Автор поста оценил этот комментарий

А без флоата обойтись не? Шестнадцатеричных чисел недостаточно?


Под новые современные процессоры коммерческие оптимизаторы кода с флоатом определенно будут лучше ассемблера.


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

раскрыть ветку (6)
1
Автор поста оценил этот комментарий
Но когда код на мегабайт управляет двумя сервоприводами это тоже не нормально. И у тех кто ассемблера не знает обычно так и выходит

Если это всё стабильно работает и обновляться в интернет не лезет - то какие претензии? Память стоит гроши, а время специалиста дорого. Оптимизация оправдана в двух случаях:

1. Массовое производство большой партией, дешёвое железо оправдает доп. затраты на разработку.

2. Задача настолько сложная что не существует железа, которое вытянет её без оптимизаций.

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

Смотря о какой железке идет речь. Если это касается безопасности - даже в несчастном блоке АБС компоненты соединяются не пайкой, а сваркой с навесным монтажом и керамической платой. И к коду там тоже есть определенные требования.

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

Это второй пункт. Надёжность и скорость реакции тоже часть задачи. Да и блоки абс штампуются миллионами

0
Автор поста оценил этот комментарий
Это было 20 лет назад. Высокоточные измерения, многоканальная система с выдачей сразу в виде значения физвеличины. Фикседпоинт не очень хватало
0
DELETED
Автор поста оценил этот комментарий

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

Ужас какой /s
У меня в лабе вообще 95% автоматизации установок через лабвью делалась, ибо так на порядок быстрее чем в питоне что-то там писать к железу с непонятными протоколами когда у итогового кода надо иметь простой и хороший интерфейс, про автоматизацию на ассемблере я вообще молчу - это был бы 1 эксперимент в год)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ну объективно говоря лабвьюв система с изначальным направлением "виртуальные приборы". Шаг в право или в лево (к примеру интеграция в асутп, как мне встречалось) или использование нестандартного оборудования превращаются в адский геморрой. Но вот как система для лабораторий с частой перестройкой под эксперимент не имеет никаких адекватных аналогов по простоте, скорости и качеству.
Автор поста оценил этот комментарий

нет

раскрыть ветку (9)
0
Автор поста оценил этот комментарий
Да. Я несколько лет курс осрв читал
раскрыть ветку (8)
Автор поста оценил этот комментарий

Сорян, но если у вас время реакции несколько десятков минут - это не реалтайм, это batch processing )

Так что - нет.

раскрыть ветку (7)
3
Автор поста оценил этот комментарий
Если по тз мне поставят задачу по максимальному времени реакции хоть в сутки и я это гарантировано всегда обеспечиваю, то я могу утверждать, что отвечаю требованиям реального времени.
А вы путаете жопу с пальцем: реальное время и быстродействие.
Вы там ещё про микросекунды вещали, так вот типичные цифры ограничения времени реакции для настоящих систем реального времени, например тех же асутп в большинстве случаев десятки-сотни миллисекунд.
А там, где микросекунды, часто предъявляются требования так называемого "мягкого" реального времени (многие уважаемые авторы вообще против такого термина), то есть что-то типа "реакция системы не более чем ххх единиц времени в уу% случаев.
Так что предлагаю вам расписаться в том, что вы не в теме и не нести пургу.
раскрыть ветку (6)
Автор поста оценил этот комментарий
Если по тз мне поставят задачу по максимальному времени реакции хоть в сутки и я это гарантировано всегда обеспечиваю, то я могу утверждать, что отвечаю требованиям реального времени.

Ага. Только раз в сутки - это уже не "реальное время". Это "периодическое обслуживание", "пакетная обработка" - что угодно, но не "реальное время". Системы реального времени имеют время реакции в доли секунды и менее.


А там, где микросекунды, часто предъявляются требования так называемого "мягкого" реального времени.

Зависит. Может быть и жесткого, смотря что за задача.

раскрыть ветку (5)
0
Автор поста оценил этот комментарий
1) Есть общепризнанное понятие (не люблю википедию как источник, но там хорошая статья и вот вам определение: "Система реального времени (СРВ) — система, которая должна реагировать на события во внешней по отношению к системе среде или воздействовать на среду в рамках требуемых временных ограничений."). Никакого ограничения на величину времени в этом понятии нет и не было никогда. То, что вам это не нравится и вы такое принять не можете ничего не меняет. Хотите - живите с кашей в голове, хотите - разберитесь в теме.

2) Ну и читайте все таки оппонента. Я написал "часто", а не "всегда". Конечно может, я разве это оспаривал?

Добавка: у меня есть система очень ответственная (nda к сожалению). В ней нормировано ограничение по реакции в 20 секунд. В разделе тз "требования обеспечения реального времени"
раскрыть ветку (4)
Автор поста оценил этот комментарий

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

З.Ы. в России NDA не работает.

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

Это обучение долго длится, а может reasoning (или как оно там) шустрее будет.

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

Распознавание (если мы про картинки) - тоже небыстро. а уж загрузка рантайма в таких случаях может доходить до 3х-5х от времени  распознавания, и приходится тупо при старте модель примораживать и видюху захватывать принудительно.

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

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

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

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

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

Интересно, спасибо за ответ)

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

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

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

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

Удачи Вам в Вашем начинании.

Понял процентов 30 от происходящего в после, но благие цели и увлеченность повышают веру в светлое будущее! Спасибо Вам!

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества