Лучшие практики для хранения моделей машинного обучения Python

24

Каковы лучшие практики для сохранения, хранения и обмена моделями машинного обучения?

В Python мы обычно храним двоичное представление модели, используя pickle или joblib. Модели, в моем случае, могут быть размером ~ 100Mo. Кроме того, joblib может сохранять одну модель в нескольких файлах, если вы не укажете compress=1( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- кор ).

Но тогда, если вы хотите контролировать права доступа к моделям и иметь возможность использовать модели с разных машин, каков наилучший способ их хранения?

У меня есть несколько вариантов:

Антуан Дюссо
источник
Вы получили эффективный способ сделать это?
iNet,

Ответы:

2

Я сталкивался с этой проблемой (и до сих пор сталкиваюсь с ней сегодня) много лет. Я действительно считаю, что, если вы не предоставите подробные требования, вы не можете ожидать серьезного ответа. Я объясняю себя примерами моей работы:

  • Я регулярно пробую несколько вариантов одной и той же модели, чтобы найти, какие параметры работают лучше всего. Требуется несколько дней, чтобы обучить одну модель, которая дает некоторый результат, который позже используется для оценки. Для этого я делаю простой дамп NumPy модели, поскольку его легко разделить между серверами или коллегами. Вам следует избегать pickle, поскольку он хранит гораздо больше (экземпляры классов, библиотек ...), чем просто параметры, изученные вашей моделью. Импорт модели на другой компьютер может не работать, если среда Python немного отличается.

  • При продвижении модели в производстве мне нужна 1) версия модели, которую я могу быстро загрузить в случае отказа сервера (обычно двоичный формат, сохраняющий только то, что необходимо, например, веса нейронной сети) и 2) способ сохранить модель в оперативной памяти, чтобы быстро обрабатывать запросы API.

Для двух разных целей мне нужны три разных формата. Тогда, в более общем смысле, выбор формата зависит от инструментов, которые вы используете. Например, если вы работаете с TensorFlow, вас может заинтересовать их система обслуживания TensorFlow.

Робин
источник
1

Я хотел бы предложить еще 2 подхода.

  1. Сохраните их в хранилище документов (например, mongoDB) - этот метод рекомендуется, когда файлы вашей модели меньше 16 МБ (или фрагменты Joblib), тогда вы можете сохранить модель в виде двоичных данных. Кроме того, некоторые библиотеки ML поддерживают экспорт и импорт моделей в формате json (например, LightGBM), что делает его идеальным кандидатом для хранения в хранилище документов. Преимущества : легкое отслеживание генерации модели и легкий доступ, Недостатки : вещи станут запутанными, если объект модели слишком большой.

  2. Храните вашу модель на объектном хранилище (например, Amazon S3) - этот метод хорош, если ваши модели очень большие, в этом случае вы получаете неограниченное хранилище и довольно простой API, вы платите больше, это точно. Преимущества : Неограниченное пространство и возможность хранения файлов произвольного формата. Недостатки : стоимость и тот факт, что для того, чтобы сделать это правильно, вам необходимо разработать собственную систему отслеживания.

удачи!

Рой Миара
источник