Comments 3
Интересное решение, спасибо.
Какие типы данных поддерживаются? Могу я зашарить к примеру сложную структуру с numpy массивами или pytorch модель?
Ваша библиотека уже где-то используется?
В одном из наших сервисов мы используем mmap(-1) для передачи спикленных торчёвых моделей от основного процесса во множество воркеров и для расшаривания больших numpy массивов (они пишутся в shared память, а затем используются прямо оттуда без копирования, numpy это позволяет)
Библиотека нигде не используется, и, как я написал, это скорее proof-of-concept, там потенциально куча багов, довольно много неподдерживаемых фич и просто недоработок.
NumPy-массив, как я писал в статье, можно поместить в разделяемую память ( и модель PyTorch тоже), но дальше возникает проблема - что с ними делать? Передавать между процессами ID сегмента? Это можно сделать любым инструментом, будь то multiprocessing или ZeroMQ, там накладные расходы от передачи строки ничтожны по сравнению с обработкой с самих данных. Смысл многозадачности, как правило, заключается в возможности параллельного координированного изменения данных, или хотя бы чтения параллельно с изменением. В PyTorch есть какие-то подвиги в этом направлении (torch.multiprocessing), а в NumPy подразумевается, что параллельное выполнение возможно только вне питона со специальными внутренними структурами данных, то есть, там уже всё подогнанно под специальные костыли в обход питона. Я могу лишь точно сказать, что реализация полноценной поддержки NumPy займет не день и не два.
Кстати, думаю перевести статью на русский, но не уверен, что кому-то это будет сильно интересно -- все-таки материал такой, что целевая аудитория обычно не испытввает проблем с английским языком.
Easy concurrency with Python Shared Object