Распределенные вычисления. Проект Volvox.

 
Перечитывал тут давеча темы форума по нейронкам и наткнулся на сообщение Vinina о том, что его сеть имела 4 слоя по 50 нейронов и обучение такой сети, согласно его задачам, занимало очень много времени.
Да и вообще часто в литературе встречаю высказывании про то, что на обучение сети может потратиться очень много времени. Может даже и недель. (Я пока только штудирую данную тему, поэтому с реальными цифрами собственного опыта не знаком).

В свою университетскую молодость я со своим коллегой разработали клиент/серверное приложение для распределенных вычислений. В принципе делали мы это забавы ради в качестве изучения TCP/IP протокола. Но результаты оказались настолько красивыми, что мы даже попытались наладить связи между различными НИИ, которые на наш взгляд реально нуждались в такой разработке. К сожалению, дальше эта тема не пошла (никто не хотел финансировать или брать в свой штат) и проект Volvox был скромно положен на верхнюю полку и запылился. А буквально месяц назад я наткнулся на очень похожую разработку (rixler.com).

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


Если такая возможность есть (а мне бы очень хотелось бы чтоб была), то я могу сразу предложить два пути осуществления этого интересного проекта

1) у вас есть возможность найти хотя бы 5-10 машин (на работе у друга, в институте или еще где-нибудь)

2) Вариант поинтереснее. Все желающие могут взять и поставить у себя на машине (а может и у друзей или еще где-нибудь) клиентскую часть и поделиться «гуляющим» процессорным временем. Во-вторых. В этом случае каждый из вас тоже смог бы получить взамен самое ценное – время.
Даже если в такую группу войдут всего несколько человек, уже будет неплохо.

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

Поэтому если кто желает принять участие в осуществлении этого проекта, то буду рад единомышленникам.
 

Странно, один ответ уже исчез. Но уже не важно. У распределенных вычислений есть свои достоинства и недостатки. Хотелось бы их услышать поконкретнее.

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

Но дело даже пока не в этом. Вопрос таков: можно ли разбить на мелкие подзадачи, которые можно решать паралельно, вычисления при обучении нейросетей.
 
sergeev:
Самая главная проблема в применительности распределенных вычислений - это как я написал возможность разбиения самого процесса вычисления на мелкие подзадачи.
Достоинства - , что есть возможность сократить время вычислений, а недостатки - требуемое наличие нескольких компьютеров.

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

Хорошо, уточню вопрос. В распределенных вычислениях обычно фактор времени становится обычно не критичным. Если какой-то комп, отключился от сети и не передал результат, то вычисления продолжаются дальше. Просто этот результат будет получен позже. На обработку результатов "сервер" дает "клиентам" вполне определенное время. Возникает вопрос о критичности временных интервалов. Может возникать ситуация, когда паровоз уже ушел а результата еще нет. Может я не о том говорю, может быть. Тогда нужно конкретнее ставить задачу. (Это относится не к нейросетям, а к тяжелым вычислениям).
 
Integer:

sergeev, вы убили кого-то чтоли? Откуда такая навязчивая потребность к чистоте после себя?


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


 

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

Если вы так переживаете, что я удалю эту тему после 10 страниц такого вот ненужного здесь флуда - то вы будете наверно на 100% правы!

Или у вас появилась навязчивая идея флудить и писать всякие неприятные и обидные слова именно в моих топиках?

Если тема для многих людей интересна, то я быхотел попросить третью сторону (модераторов или если захочет Vinin) не так озабоченную по отношению ко мне, создать ее под своим авторством. Чтоб у меня даже не было возможности что либо менять.

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

Хорошо, уточню вопрос. В распределенных вычислениях обычно фактор времени становится обычно не критичным. Если какой-то комп, отключился от сети и не передал результат, то вычисления продолжаются дальше. Просто этот результат будет получен позже. На обработку результатов "сервер" дает "клиентам" вполне определенное время. Возникает вопрос о критичности временных интервалов. Может возникать ситуация, когда паровоз уже ушел а результата еще нет. Может я не о том говорю, может быть. Тогда нужно конкретнее ставить задачу. (Это относится не к нейросетям, а к тяжелым вычислениям).

Ты все правильно говоришь. У себя в Volvox я реализовал выход из ситуации таким образом: За единицу времени вычислений я принимал среднее время вычислений одного пакета данных. И если от конкретного клиента нет ответа в течении 2-3 едениц среднего времени, то этот пакет передавался другому клиенту.
Так что с этим я думаю не стоит волноваться. Там все красиво реализовано

Но все таки я так и не понял можно ли распаралелить вычисления при обучении нейросетей?
 
sergeev:
Vinin:

Хорошо, уточню вопрос. В распределенных вычислениях обычно фактор времени становится обычно не критичным. Если какой-то комп, отключился от сети и не передал результат, то вычисления продолжаются дальше. Просто этот результат будет получен позже. На обработку результатов "сервер" дает "клиентам" вполне определенное время. Возникает вопрос о критичности временных интервалов. Может возникать ситуация, когда паровоз уже ушел а результата еще нет. Может я не о том говорю, может быть. Тогда нужно конкретнее ставить задачу. (Это относится не к нейросетям, а к тяжелым вычислениям).

Ты все правильно говоришь. У себя в Volvox я реализовал выход из ситуации таким образом, что за 1 вычислений я принимал среднее время вычислений одного пакета данных. И если от конкретного клиента нет ответ в течении 2-3 едениц среднего времени, то этот пакет передавался другому клиенту.
Так что с этим я думаю не стоит волноваться.

Но все таки я так и не понял можно ли разпаралелить вычисления при обучении нейросетей?

Распараллерить можно, просто нужна не одна нейронка а несколько, и еще одна для сведения общего результата. Возьмем например машки. Одна нейронка обрабатывает скорость, вторая расположение машек друг относительно другаЮ ттетья еще что-то. В каждом случае получаем вполне конкретный результат с определенной точностью. Последняя сеть должна по результатам предыдущей работы вынести вполне определенное резюме. Тогда можно для каждого вида рынка (тренд, флэт или что-то другое, суждений довольно много) принимать какое-то свое решение.
 
Хочу уточнить что мы сейчас можем пока говорить не о разделении глобальных задач межд компьютерами (одна нейронка одному а другая другому) А о разделении вычислений вообще... внутри одной нейронки
 
Да и еще.
Хочу уточнить что речь пока идет о длительности процесса обчения и возможности его ускорения.
 
Хотел бы я знать, как можно back propagation распараллелить... Сами по себе НС по своей природе уже считаются системами параллельных вычислений, вне зависимости от количества компутеров. Ну Vinin уже ответил. Что-то типа комитета с каждой НС на отдельном компе получается?
 
sergeev:
Хочу уточнить что мы сейчас можем пока говорить не о разделении глобальных задач межд компьютерами (одна нейронка одному а другая другому) А о разделении вычислений вообще... внутри одной нейронки

Распределенные вычисления здесь вряд ли помогут. Может помочь только смена алгоритма обучения.
Причина обращения: