Универсальная объектная сериализация Python для интеграции с Docker
Я работаю над проектом с целью разделения процессов обучения и тестирования в проектах машинного обучения. Я разработал код, чтобы обернуть используемую модель, и под моделью я подразумеваю, например, классификатор в классе Model.
class Model:
def init(self, newModel):
self.model = newModel
Затем я передаю объекты-функции, которые модель должна предоставить, используя список:
def addFunctions(self,functions):
for function in functions:
self.functions[function.__name_ _] = function
Теперь эту модель можно использовать, например, для классификации, создав ее с помощью объекта классификатора и передав ее функции в списке в addFunctions, чтобы я мог их вызывать. Затем я упаковываю модель и код в докер- контейнер. Чтобы упростить то, что он делает, это легкая виртуальная машина.
Цель разделения - просто передать обученную модель в контейнер докера после ее оптимизации без необходимости передавать весь код. Таким образом, возникает необходимость сохранения / сериализации модели Python.
Я пытался использовать pickle, а также jsonpickle, но оба они имели ограничения при сериализации определенных типов объектов. Я не смог найти альтернативы, достаточно универсальной для хранения и поиска объектов. Есть ли альтернативы?
1 ответ
И то и другое dill
а также cloudpickle
являются очень надежными сериализаторами и могут сериализовать практически любые объекты в стандартном Python. (Я dill
автор, кстати.)
dill
доступен в виде отдельного пакета по адресу: https://github.com/uqfoundation/dill/
в то время как cloudpickle
в значительной степени умер (это было поддержано picloud
, но они пошли коммерческими… и ушел pyspark
и несколько других пакетов, поддерживающих его в своих собственных кодовых базах): https://github.com/apache/spark/blob/master/python/pyspark/cloudpickle.py
я использую dill
в качестве основы параллельных и распределенных вычислений в статистических вычислениях и оптимизации, и использовал их для обеспечения параллельных методов машинного обучения. Я не пробовала docker
объекты однако.