rPman, если вы прочитали только первые две строчки описания, то это непонятно. Если прочитали целиком и работаете с torch, то вопрос очевиден по последним двум строчкам.
Принципиальная разница между нашими вопросами - я знаю какой функционал мне нужен и спрашиваю как он работает в torch, а у вас есть просто идея, но вы не знаете как её реализовать.
Нет, совсем не так.
Есть классическое обучение с учителем - данные + правильный ответ. На разнице ответа сети и правильного ответа оптимизируют параметры сети.
У меня правильных ответов нет - я их вычисляю "на лету" по ответам нейронной сети. Получив несколько ответов с батча, я высчитываю эффективность НН и оцениваю в диапазоне от отлично до плохо. И вот получив этот ответ мне нужно как-то запихнуть это в loss, чтобы отработали backward и optimizer.
В torch loss просто цифрой не прокатывает, а нужен тензор с градиентами и что-то ещё.
Вот и вопрос как правильно сформировать эту переменную loss.
Похоже вы не в курсе кто такой MPI. )) Это стандартизированный API для обмена данными в распределённых вычислениях. mpi4py это адаптация этого стандарта для питона. Его используют на суперкомпьютерах. В частности на "Ломоносов" и "Ломоносов2". Собственно на их примерах кода я и пытаюсь сейчас разобраться как оно работает.
И да, там можно как зафигачить всю матрицу на все ноды эхом, так и разделить её на части по количеству нод и разослать "кусочками", а потом так же из кусочков собрать целый ответ.
Так же у MPI есть и реализации для других языков программирования, в том числе и Си.
А какие накладные расходы? Сам код разворачивается одинаковый при запуске на всех узлах, при этом широковещательно, а не персонально для каждого узла. Данные для обработки - ну да, каждому передаётся свой пакет данных, но этого не избежать в любом случае. Собрать обратно обработанные данные - ну это тоже как бы неизбежность. Тупняк кодера - это тоже как бы неизбежность - косяки либо есть, либо нет и не зависят от способа реализации.
На Си или чём-то ещё специфичном возможно будет быстрее, но там и порог входа совсем другой. Да и jit никто не отменял. И честно говоря, для меня это интересное хобби, а не работа или коммерческий проект - я не готов жертвовать временем на то, чтобы изучать досконально то, что мне нужно будет один-два раза.
Кто такой ssh? ))) ... шутка.
Мне нужно "разогнать" вычисления конкретно на питоне. У меня есть свободное "железо". Я надеялся, что это всё можно собрать влёгкую в одну виртуальную машину, но оказалось, что нет. Т.к. я жёстко привязан к питону, то мне определённо нужна библиотека, которая поддерживает распределённые вычисления. В частности это оказался mpi4py. Эта библиотека немного замороченная, и я думал вдруг вы знакомы с питоном и знаете более простой способ организовать на питоне распределённые вычисления. Похоже питон для вас это слишком "ламерское" и вы работаете более глобально, поэтому вопрос снимается. ))
Реально спасибо за первоначальный ответ.
Вопрос как раз в том, как проще разделить задачу, какими именно средствами, в моём случае в питоне.
Я надеялся, что возможно создавать какую-то виртуальную среду, которая способная объединять ресурсы... но к сожалению. После того, как вы меня "разочаровали"и покопав глубже в сторону кластерных вычислений понял, что меня спасёт только MPI4PY. Конечно, получается сложнее, чем я рассчитывал, но вроде не ужас-ужас. Будем курить мануалы. ))
Пичалька.
Возможно вы знакомы с питоном и можете подсказать в какую сторону лучше копать для использования кластерных вычислений?
Хотелось бы не что-то "навороченное" и ультра функциональное, а что-то типа
- подключить ноду 1.2.3.
- запустить процедуру с таикм-то листом параметров задействую ноды.
что-то типа обычного Pool в мультипроцессинге, но с задействованием нод.
У меня просто время выполнения потока где-то 2-3 секунды и "накладные расходы" не сильно беспокоят.
создаём класс на основе dataset, в объект на основе этого класса загружаются наши данные для обучения и потом это всё используется через стандартный dataloader, который сам обращается к нашему getitem. Я правильно понял?
Vindicar, какая разница какая сеть, если вопрос в способе передачи данных средствами PyTorch при обучении. Вопрос находится в рамках между загрузкой данных с диска и передачей их во входные нейроны. Что до или после - роли не играет.
так как порядок элементов в памяти один и тот же.
При чём здесь порядок, если речь про объём. Вы же не будете утверждать, что массив Х и массив [Х-1, 10] займут одинаковый объём памяти. Или я что-то не знаю?
Александр Скуснов, а так можно? я считал она жёстко привязана к библиотеке и параметрам. Я знаком с программированием, но не с питоном конкретно. Есть какая-то ссылка на описание на русском как это можно реализовать?
Вы либо не читали, что я написал и ответили лишь бы ответить, либо я как-то недостаточно разжевал.
Мне не нужно, чтобы из массива данные брались с 1 по 10, потом с 11 по 20. Мне нужно, чтобы вторая "порция" была со 2 по 11.
Подозреваю вы предлагаете способ брать диапазон значений из массива, но это можно использовать, если у вас есть цикл. А если вы знакомы с библиотеками для обучения нс, то знаете, что там формально циклов нет. В конкретном случае, есть тензор с обучающими данными, тензор с правильными ответами, модель сети и команда "сделать красиво". Поэтому и вопрос как правильно подать данные. что бы не "плодить сущности".
И чем вас так удивили гигабайты в массиве? Поток данных за период. Он может быть и "толще", если использовать несколько параметров.
Drno, позволю себе не согласиться. Мне достался 7-летний сервер. Я его админю уже около 5-и лет. За всё время поочерёдно сдохли два диска в рейде, которые я просто вытащил и втащил новые. На сервере крутится куча 1Сок на скуле, фтп и несколько мобильных сервисов. Работает ... тьфу-тьфу-тьфу.
Дома винду ставлю раз в 4-5 лет когда новый комп покупаю. Ничего не тормозит и не глючит.
От пользователей регулярно слышу, что винда говно, а приносят - оказывается адварей всё завалено и т.п.
Подозреваю всё дело в прокладке между монитором и клавиатурой, а не в оси, которая стоит.
Вот если заблочат винду и станет везде линух, тогда тоже вдруг выяснится, что он неудобный и ненадёжный. )
CityCat4, что значит обычно? Может в вашем окружении это обычно, а в моём - кроме названия о линухе никто ничего не знает.
Вы путаете методы использования. Есть служебные системы и развлекательные. Просто на линухе особо не поиграешь и ничего не поделаешь. Поэтому его один раз настраивают и не лазят шалавливыми ручонками. А если вы порно на сервере с виндой смотрите, то да в вирусах и глюках винда будет виновата. )))
P.S. А ещё я фанат intel и nvidia, а amd отстой. ))))
У вас получилось что-то выяснить?