Docker – это программное обеспечение, которое упаковывает код приложения и все его зависимости, создавая изолированную среду, называемую контейнером.
Почему мы должны использовать контейнеры Docker для развертывания моделей машинного обучения?
- В нашей системе можно легко создать модель машинного обучения. Но когда мы хотим использовать эту модель на этапе производства в других системах, это сложная задача. Docker делает эту задачу проще, быстрее и надежнее.
- Используя Docker, мы можем легко воспроизвести рабочую среду для обучения и запуска модели в разных операционных системах.
- Мы можем легко развернуть и сделать вашу модель доступной для клиентов с помощью таких технологий, как OpenShift, дистрибутив Kubernetes.
- Разработчики могут отслеживать разные версии образа контейнера, проверять, кто с какой версией создал версию, а также выполнять откат к предыдущим версиям.
- Даже если наше приложение машинного обучения не работает, восстанавливается или обновляется, оно не перестанет работать.
- Наша модель машинного обучения обычно написана на одном языке программирования, таком как Python, но приложению, безусловно, потребуется взаимодействовать с другими приложениями, написанными на разных языках программирования. Docker управляет всем этим. взаимодействия, так как каждый микросервис может быть написан на другом языке, что обеспечивает масштабируемость и легкое добавление или удаление независимых сервисов.
Давайте разберемся, как на самом деле развернуть нашу модель машинного обучения внутри контейнера Docker. Здесь я возьму простую модель машинного обучения для прогнозирования зарплаты, чтобы проиллюстрировать рабочий процесс.
- Создайте отдельный каталог для этой задачи и скопируйте в него свой код машинного обучения.
2. Создайте Dockerfile.
- Здесь я использовал rockylinux в качестве базового образа для контейнера.
- Установите все пакеты, необходимые для запуска кода.
- Команда COPY скопирует указанные файлы с локальной машины в контейнер, который будет запущен с использованием этого образа.
- ENTRYPOINT указывает команду, которая будет выполняться при запуске контейнера.
- CMD указывает ввод командной строки, который будет передан программе, выполняемой точкой входа (python3 Salary_predict.py). Это переопределяется вводом командной строки, переданным во время запуска контейнера (если есть).
ПРИМЕЧАНИЕ. Entrypoint и CMD, оба могут использоваться для указания команды, которая будет выполняться при запуске контейнера. Единственное отличие состоит в том, что ENTRYPOINT
не позволяет вам переопределить команду. Вместо этого все, что добавляется в конец команды docker run
, добавляется к команде.
3. Код Python.
Модуль sys предоставляет функции и переменные, используемые для управления различными частями среды выполнения Python.
sys.argv – это список аргументов командной строки.
Но sys.argv[0] — это имя текущего скрипта Python.
sys.argv[1] — это первый аргумент командной строки.
sys.argv[2] — это второй аргумент командной строки и так далее.
Итак, мы предоставляем sys.argv[1] для нашей модели машинного обучения.
5. Теперь создайте образ из Dockerfile, созданного ранее.
6. Наконец, мы готовы запустить наш контейнер и запустить нашу модель машинного обучения.
Здесь, поскольку мы не предоставили никакого аргумента командной строки, 0 будет использоваться в качестве аргумента для программы точки входа.
7. Мы также можем обеспечить ввод командной строки для нашего кода Python.
Здесь, поскольку мы предоставили аргумент командной строки, 0 будет заменен на 1.
Теперь мы знаем, как запустить модель машинного обучения внутри контейнера Docker. Удачного кодирования. 😀