В Интернете есть множество материалов по машинному обучению. Тем не менее, для нашего конкретного требования мы не смогли найти метод, который мог бы удовлетворить наш вариант использования для доставки моделей машинного обучения в производство.

Решения, доступные в Интернете, варьировались от простого копирования модели в папку до сложных подходов, согласованных для удовлетворения потребностей в высоких технологиях. Простая модель требовала ручного труда, в то время как сложные модели были излишними по сравнению с нашими требованиями.

TL;DR

  • Экспорт модели
  • Загрузите его в AWS S3
  • Скачать на сервер

Подробные шаги

После завершения обучения есть несколько способов экспортировать веса, чтобы их можно было использовать в приложении. Самый простой способ - использовать pickle в Python. Заливка - это процесс преобразования иерархии объектов Python в поток байтов. U npickling - это обратная операция, посредством которой поток байтов преобразуется обратно в иерархию объектов.

Получение дампа модели после примерки / тренировки

pickle.dump(model, open(filename, ‘wb’))

Загрузка модели

loaded_model = pickle.load(open(filename, ‘rb’))

Зачем загружать на S3?

Конкретно для нашего случая у нас есть 2 репозитория git, один для обучения модели, а другой для приложения Flask. Чтобы использовать нашу модель в приложении на производстве, нам нужно было найти способ, который помог бы нам обеспечить легкий доступ к нашей обученной модели.

Проблема заключалась в размере обученной модели. Он был больше 100 МБ (максимальный размер файла на GitHub), поэтому нам нужно было вручную загрузить модель на наш сервер. Таким образом, мы нашли альтернативный способ для нашего варианта использования.

Следующий шаг - поделиться моделью с нашим приложением. Для этого мы использовали Amazon S3.

Блок-схема

Для этого мы написали сценарий. Мы использовали библиотеку boto3¹, чтобы создать папку с именем my_model на S3 и загрузить в нее модель.

Установить boto3

pip install boto3

Шаги по загрузке

  • Задайте учетные данные и файлы конфигурации AWS в каталоге ~/.aws.
  • Измените путь к модели и имя сегмента в upload_to_s3.py файле.
  • Используйте команду python3 upload_to_s3.py, чтобы загрузить свой режим.

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

upload_to_s3.py

Скачать на сервере

Для загрузки модели из S3 существует еще один скрипт Python, который снова подключается к ведру AWS S3 и загружает модель.

download_model_from_s3.py²

Теперь модель готова к использованию в приложении.

Необязательно

В идеале мы никогда не должны использовать в нашем коде какую-либо важную информацию. Эти сведения представляют собой конфигурации, которые могут выявить что-то, что может представлять угрозу безопасности. Обычно мы используем файлы конфигурации и устанавливаем эти учетные данные в среде.

export AWS_BUCKET_NAME = YOUR_BUCKET_NAME
export AWS_FOLDER_PATH_NAME = FOLDER_NAME_HERE
export PATH_TO_SAVE_MODEL = PATH_TO_SAVE_MODEL_HERE

Этот код можно сохранить в setup_model.sh файле, и он не должен быть доступен ни в одном общедоступном репозитории.

Мы придумали альтернативный подход к развертыванию модели машинного обучения, которая соответствует нашим требованиям на данный момент. Использовать корзину Amazon S3 для распространения нашей модели просто, но эффективно. Мы хотели бы услышать мнения об этом подходе.

Уже более 3 лет мы стремимся переосмыслить упаковку как бизнес с нуля. Путь к совершенствованию еще далеко, но мы считаем, что неплохо начали. Почему бы вам не подняться на борт и не присоединиться к нам в наших поисках?

Источник:
[1] https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html
[2] https: //stackoverflow.com/questions/31918960/boto3-to-download-all-files-from-a-s3-bucket/31929277