DustiX, ну как я понял, там не очень сложно.
Делаете количество выходов по количеству ваших меток. И на выходе получаете 0, если объект не обнаружен, и 1 если обнаружен. Соответственно на выходах вы можете получить {0,0,1,0,1}. По примеру получается, что искалось наличие 5 объектов - 1, 2 и 4 не обнаружены, 3 и 5 обнаружены. Соответственно порядковые номера объектов, это конкретные объекты - 1 трава, 2 куст, 3 дерево, 4 лошадь и т.д.
Т.к. ответы да/нет, то их можно преобразовать в битовую структуру для экономии памяти модели [00101].
В вашем случае объектов максимум 139, значит и выходов 139.
Если не ошибаюсь, то нума работает в рамках одного сервера - она не может объединить всю стойку в одно целое. Вы хотите сказать, что размер модели ограничен устройством с максимальным количеством памяти?
Т.е. если у карт нвидиа максимальный объём памяти у устройства 192 гб, то и максимальный размер модели не может превышать этот размер?
Drno, май инглиш из бед, но по первой половине описания я понял, что настраивается резервирование. Выделю пк, потренируюсь, посмотрю.
Спасибо за наводку.
Появился повод потрогать линух))
В том-то и дело, мне не нужно на сервере. Мне нужно всю сеть защитить.
Т.е. в моём представлении нужный мне фаервол будет стоять между двумя роутерами. В итоге должно получиться интернет-роутер-фаервол-роутер-офисная сеть.
Фаервол как я представляю это будет мини-пк с двумя сетевыми картами и какое-то приложение, которое банит трафик по IP.
Как вот такая схема реализуется?
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. Я правильно понял?