Зачем мне нужно sklearn в док-контейнере, если у меня уже есть модель в качестве маринада? - PullRequest
0 голосов
/ 22 октября 2018

Я выбрал модель и хочу показать только prediction API, написанный на Flask.Однако, когда я пишу dockerfile для создания изображения без sklearn, я получаю ошибку ModuleNotFoundError: No module named 'sklearn.xxxx', где xxx относится к классам алгоритма ML sklearn, в тот момент, когда я загружаю модель с использованием pickle типа classifier = pickle.load(f),

Когда я перезаписываю dockerfile, чтобы создать изображение с sklearn, я не получаю сообщение об ошибке, даже если в API I никогда import sklearn.
Моя концепция маринования очень проста: он будет сериализовывать класс-классификатор со всеми его данными.Поэтому, когда мы откроем его, так как класс классификатора уже имеет атрибут predict, мы можем просто вызвать его.Зачем мне иметь sklearn в среде?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

У вас неправильное представление о том, как работает pickle.

Он не отделяет что-либо, кроме состояния экземпляра (__dict__ по умолчанию или пользовательской реализации).При расщеплении, он просто пытается создать экземпляр соответствующего класса (здесь идет ваша ошибка импорта) и установить состояние засолки.

Есть причина для этого: вы не знаете заранее, какие методы будут использоваться после load, так что вы не можете засолить реализацию.В дополнение к этому, во время рассола вы не можете построить AST, чтобы увидеть, какие методы / модули понадобятся после десериализации, и основная причина этого - динамическая природа python - ваша реализация может фактически меняться в зависимости от ввода.

В конце концов, даже если предположить, что теоретически у нас будет интеллектуальная автономная сериализация рассола, это будет фактическая модель + склеарн в одном файле, без надлежащего способа управления им.

0 голосов
/ 22 октября 2018

Рассол - это просто представление данных внутри модели.Вам все еще нужен код, чтобы использовать его, поэтому вам нужно иметь sklearn внутри контейнера.

...