Название: нейронная сеть и потоки Отправлено: dimka8ya от Март 18, 2021, 00:16 Доброго времени суток. я сделал нейронную сеть на QVector<QVector<QVector<double>>> веса; и QVector<Qvector<double>> активированные выходы; , все это работает в одном потоке ,но так медленнннноооо .как я понимаю самые трмоза в математических расчетах сигмоиды и вес * актив.выход . с потоками не разу дело не имел , то что видел в инете - это создаем поток и выводим в терминал . как можно создать параллельные потоки и дождатся их равершения и только потом переходить на следующий слой . у меня Linux , если я правильно понимаю ,то можно создать хоть 10000 потоков и Ось с ними разберется и передаст управление основному потоку ( здесь я могу ошибаться из-за своей безграмотности ). может у кого есть пример похожий на мою проблему или как это можно решить ? спасибо за понимание ;D
Название: Re: нейронная сеть и потоки Отправлено: Авварон от Март 18, 2021, 02:22 Может тормозить из-за Copy-On-Write, попробуйте std::vector
Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 18, 2021, 09:27 QVector и std::vector особой разницы нет . тут именно математика числа double и возведение в степень .
Название: Re: нейронная сеть и потоки Отправлено: Igors от Март 18, 2021, 09:55 Перед тем как копать/оптимизировать неплохо убедиться что задача вообще "разпоточивается". Это ларчик может просто "не открываться"
Название: Re: нейронная сеть и потоки Отправлено: ecspertiza от Март 18, 2021, 11:53 1. 10000 потоков создать можно, но из за конкуренции между ними, работать быстрее не станет. Кол-во потоков выставляй кол-ву ядер процессора, в этом случае будет прирост, дальше либо без прироста скорости либо тормоза.
2. Можешь выносить вычисления по нейрону в QtConcurrent например, он возьмет поток из готового пула и отдаст ему расчет, создавай по QtConcurrent на вычисление. Когда все QtConcurrent завершились переходишь к следующему слою. В этом случае у тебя часть нейронов будут считаться в одном потоке, часть в другом и т.д. Не больше тредов чем кол-во ядер, насколько помню. 3. На CPU считать нейросети крайне затратная вещь. Не предназначен он для этого. Если это баловство с сетками или задача в универе, тогда вопросов нет. Иначе подрубай GPU для расчета. Название: Re: нейронная сеть и потоки Отправлено: Igors от Март 18, 2021, 12:13 Иначе подрубай GPU для расчета. Какой "бодрый" совет :) Интересно каким образом его "подрубать"? (давеча создавал похожую тему)Название: Re: нейронная сеть и потоки Отправлено: m_ax от Март 18, 2021, 12:19 Цитировать как я понимаю самые трмоза в математических расчетах сигмоиды и вес * актив.выход . Нет, дело не в этом. Как у вас back propagation error происходит/реализовано? Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 18, 2021, 12:29 все очень просто
Код: std::thread t( [=]{ Название: Re: нейронная сеть и потоки Отправлено: m_ax от Март 18, 2021, 12:31 все очень просто Код: std::thread t( [=]{ Это что за..? Название: Re: нейронная сеть и потоки Отправлено: ecspertiza от Март 18, 2021, 12:37 Судя по коду имеет смысл почитать про треды для начала )))) У вас тут не будет "параллельной" работы.
Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 18, 2021, 12:49 Судя по коду имеет смысл почитать про треды для начала )))) У вас тут не будет "параллельной" работы. согласен . многопоточности нет Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 18, 2021, 13:04 Код: void do_work(unsigned id); Название: Re: нейронная сеть и потоки Отправлено: Авварон от Март 18, 2021, 23:33 Код: for (auto &thread: threads) Название: Re: нейронная сеть и потоки Отправлено: ecspertiza от Март 19, 2021, 10:41 ТС, у тебя задача какая? Побаловаться с нейронками или что то в прод. сделать?
Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 19, 2021, 17:01 все только для личного пользования . GPU нет , и покупать новый ПК нет желания . есть ноут 8и ядерный и сейчас думаю как разделить переменное количество нейронов в слое(от 1 до бесконечности) на 7 дополнительных потоков. пробовал разные библиотеки и у всех одна проблема ,нейрон в виде классов ,а это сжирает оперативку и мусор ненужный . вместо сигмоиды пробовал другие активации нейрона , получается усереднение ошибки ( сигмоида ошибка 0.03 , а другие доходили только до 0.14 ) . экспериментировал целый месяц и выводил ошибки на график QCuctom Plot и пришол к итогу который у меня сейчас . нужно только решить с скоростью обучения сети , так как сеть нужно переучивать постоянно ( мои личные эксперименты и тараканы ) . с моим количеством слоев и нейронов в слое на обучение уходит 2е суток в 1 поток , сеть не стандартная .
Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 19, 2021, 21:03 оказывается есть драйвер для Linux который поддерживает CUDA ,только это выяснил .
01:00.0 VGA compatible controller: NVIDIA Corporation GF108M [GeForce GT 635M] (rev a1) новые возможности с новыми тараканами и посредственной видяшкой . к черту CUDA , нет желания прыгать с бубном . Название: Re: нейронная сеть и потоки Отправлено: ecspertiza от Март 25, 2021, 10:53 Если для себя тогда дерзайте, удачи вам в этом не легком деле. Но я бы предложил посмотреть в сторону готовых решений типа keras, и т.д
Название: Re: нейронная сеть и потоки Отправлено: RedDog от Март 25, 2021, 13:17 Вот это не подойдет? https://cloud.google.com/tpu/
Название: Re: нейронная сеть и потоки Отправлено: dimka8ya от Март 29, 2021, 12:44 попрыгав с бубном и произнеся заклинания , удалось использовать CUDA & Linux .
результат : GPU: 0.244996 milliseconds CPU: 7.81898 milliseconds при прохождении 1 эпохи ели кому интересно ,то тут весьма не плохо рассказано про сторонние библиотеки и CUDA https://luniak.io/cuda-neural-network-implementation-part-1/ (https://luniak.io/cuda-neural-network-implementation-part-1/) Название: Re: нейронная сеть и потоки Отправлено: qtkoder777 от Апрель 05, 2021, 00:01 Доброго времени суток. я сделал нейронную сеть на QVector<QVector<QVector<double>>> веса; QVector<QVector<double>> уже тормозит адски. Делайте выводы. |