Стандартная архитектура при создании сервисов с использованием машинного обучения подразумеват обучение модели на одном сервере и её использование на другом сервере, который непосредственно работает на предикт. Однако, на предикт может работать много серверов, и возникает вопрос: как доставить обученную модель на все сервера? Обычно модель сохраняют в виде файла. Поэтому можно сделать mount какого-то общего сетевого ресурса, и на нём хранить модель. Но более гибко будет сохранить модель в базе данных, тем более что все инстансы уже скорее всего имеют соединение с общей базой.
Ниже приведу пример того, как сохранить объект python в базе данных в колонке типа блоб.
import _pickle import pymysql.cursors ## Для простоты возьмём лёгкий объект # однако обученная модель может достигать сотни мегабайт, а то и ещё больше listToPickle = [(10, 10), ("example", 10.0), (1.0, 2.0), "object"] ## Преобразование нашего объекта в строку pickledList = _pickle.dumps(listToPickle) ## Соединение с базой данных mysql connection = pymysql.connect(host='localhost', port=3306, user='dbuser', password='pass', db='somedb', cursorclass=pymysql.cursors.DictCursor) ## создание курсора with connection.cursor() as cursor: ## Вставка в БД cursor.execute("""INSERT INTO pickleTest VALUES (NULL, 'testCard', %s)""", (pickledList, )) connection.commit() ## Выборка по сохраненной модели cursor.execute("""SELECT features FROM pickleTest WHERE card = 'testCard'""") ## Получим и распечатаем результат res = cursor.fetchone() ## Обратное преобразование unpickledList = _pickle.loads(res['pickledStoredList']) print(unpickledList)
Как видим всё просто, достаточно перед сохранием в блоб преобразовать объект с помощью _pickle.dumps() а при загрузке объекта обратно преобразовать в строку в объект с помощью _pickle.loads().
Также отмечу, что в третьем питоне не надо устанавливать дополнительных библиотек, используется встроенная библиотека _pickle. Таким образом Pickling в Python — это способ хранения весьма сложных структур данных в двоичном представлении, которые требуется восстановить через некоторое время, для получения той же структуры данных.