Как стать автором
Обновить

Комментарии 6

Небольшое дополнение, забыл написать. Даже если не использовать модель в С++, а остаться в рамках Python, решение, превращенное в скрипт, не задействует GIL. Это чего-то да стоит!

Пара вопросов, очень интересно раз вы ковырялись!
Я вот лично попробовал простую модель затрейсить автоматом, сработало, C++ не знаю, на том и оставил.


(i)
В двух сценариях, когда мы остаемся в рамках Python и когда не остаемся, не является ли архив my_script.pth просто zip архивом как пишут вот тут?


A serialized model (call it model.pt) is a ZIP archive containing many files. If you want to manually crack it open, you can call unzip on it to inspect the file structure directly:

...

You'll notice that there are .py and .pkl files in this archive. That's because our serialization format tries to mimic Python's. All "code-like" information (methods, modules, classes, functions) are stored as human-readable .py containing valid Python syntax, and all "data-like" information (attributes, objects, etc.) are pickled using a subset of Python's pickle protocol.

A model is really a top-level module with some submodules, parameters, and so on depending on what the author needs. So, data.pkl contains the pickled top-level module. Deserializing the model is as simple as calling unpickle() on data.pkl, which will restore the module object state and load its associated code on demand.

Или это относится только к питону? Или когда вы компилируете в C++, это все упаковывается в один бинарь?


(ii)
Кроме обфускации и упаковки, такие штуки еще всегда обещают приросты по скорости.
Вы не сравнивали, на CPU / GPU?
Очень тоже интересно.

Ну, обфускация там весьма условная: для тех, кто не догадается заменить расширение на *.zip.
Как вы заметили, это он и есть, причем он же и поставляется и грузится в C++.
В тех случаях, которые реализовывал (конкретно, переводил проект на основе RetinaNet + куча питоновского кода вокруг, а также разные игры для себя) — особо прироста скорости не заметил… «Ну и вы говорите!» © Хотя, возможно, в каких-то других случаях он и есть или я что-то не умею готовить :)

А вы делали всю эту работу чисто для портирования под форточки, никакого другого профита получается нет?


Если да, то почему просто не заюзали докер? Какая-то фишка особенная?


Может на мобилу они уже что-то сделали или иное что-то?

Нет, в первую очередь для того, чтобы встроить решение, которое я делаю на PyTorch и Python, в существующую коммерчески распространяемую систему, которая написана на С++. Портирование (если тут уместно это слово) под форточки являются следствием того, что система под форточки.

А докер то здесь при чем? Вообще не понял. К тому же если Вы обладаете сокровенным знанием, как завести на Windows докер с доступом в GPU — срочно пишите пост!

Спасибо за статью, очень полезный материал!

Зарегистрируйтесь на Хабре , чтобы оставить комментарий