В прошлом, когда наука о данных развивалась, ребята из Devops отвечали за внедрение моделей машинного обучения (ML) или Deep Learning (DL). Специалисты по анализу данных ограничивались исследованиями и созданием модели в блокноте Jupyter, однако сейчас тенденция меняется. В настоящее время компании ищут специалиста по машинному обучению или специалистов по анализу данных. Таким образом, вам понадобится час, чтобы научиться развертывать модели в производственной среде как услугу или в однословных MLOps. У этих ребят хорошее будущее. В настоящее время нужно знать, как перенести эти модели в облако (AWS / GCP / Azure).
В моем последнем блоге ЧАСТЬ-1 я объяснил, как развернуть модель на экземпляре AWS-EC2. При этом я исследовал каждый уголок развертывания.
Ограничения в последнем блоге: -
1. Ограничено развертыванием только одного приложения на экземпляре.
2. Приложение не было развернуто как сервис, поэтому всякий раз, когда мы перезагружаем экземпляр, нам приходится вручную перезапускать наше приложение.
3. При перезапуске IP-адреса экземпляра IP-адрес экземпляра изменяется.
4. Нет настройки SSL-сертификации.
В этом блоге мы постараемся перейти от базы к продвижению. Если вы понимаете это, то поздравляю, вы знаете, как профессионально перенести свою модель в реальный мир.
В этом блоге я остановлюсь на следующих моментах: -
1. Разверните модель ML (обнаружение спама) и модель DL (классификатор изображений с использованием модели Resnet50).
2. Развертывание машинного обучения как услуги.
3. Использование эластичного IP-адреса, чтобы избежать изменения IP-адреса экземпляра при каждом перезапуске.
4. Создание сертификата SSL.
1. Развертывание моделей: -
При создании экземпляра EC2 (Подробности в Части-1) я открыл порты, а именно: - 22, 80, 443, 8000, 8080, 8081, 8082.
Модель ML (обнаружение спама) и модель DL (классификатор изображений) -
- Во-первых, сделайте SSH и подключитесь к своему локальному
- Во-вторых, загрузите SpamClassifier.zip и ImageClassifier.zip (отсюда)
- О том, как сделать SSH и загрузить файл, читайте в моей Части 1 (ссылка) этой серии.
- После загрузки моделей и распаковки мой SSH-терминал выглядит следующим образом:
Обновите порт приложения ImageClassifier и SpamClassifier, как показано ниже: -
Обе модели были успешно развернуты как приложение Flask. Здесь мы не будем использовать Flask в качестве сервера, потому что он не масштабируется и не может принимать даже 100 параллельных запросов (подробности см. здесь).
2. Развертывание ML как услуги: -
Теперь установите nginx и gunicorn, чтобы запустить приложение на сервере, используя следующие команды.
Мы хотим запускать модель как службу, чтобы она всегда выполнялась в серверной части. Для этого используйте следующую команду и создайте файл сокета и файл службы для обоих приложений.
- Приложение SpamClassifier: -
2. Приложение ImageClassifier: -
Теперь выполните следующие команды, эти команды создадут файл сокета в SpamClassifier и ImageClassifier.
Теперь мы войдем в установочный файл nginx, используя приведенный ниже код. Вы получите файл по умолчанию, который является файлом конфигурации nginx. Создайте там еще один файл с именем flask_app.
Теперь просто перезапустите службу с помощью - sudo service nginx restart
Итак, наши приложения ML и DL работают с общедоступным IP. Вы можете проверить это, используя
XX.XX.XX.XX: 8081 = ›Этот IP-адрес для приложения SpamClassifier
XX.XX.XX.XX: 8082 = ›Этот IP-адрес для приложения ImageClassifier
3. Использование эластичного IP-адреса, чтобы избежать изменения IP-адреса экземпляра при каждом перезапуске: -
На данный момент у нас есть общедоступный IP-адрес, и на нем работают приложения, но предположим, что из-за какого-либо сбоя или из-за каких-либо непредвиденных обстоятельств нам придется выключить и снова запустить экземпляр. После перезапуска AWS предоставит нам новый случайный IP-адрес для нашего экземпляра EC2, что определенно может повлиять на все наше приложение. Итак, чтобы избежать этого, мы выделим нашему экземпляру эластичный статический IP-адрес, который останется постоянным.
Выполните следующие действия, чтобы выделить эластичный IP-адрес: -
- Выберите экземпляр, с которым вы хотите работать, затем щелкните Действия ›Сеть› Управление IP-адресами.
2. Нажмите «Назначить эластичный IP-адрес».
3. Нажмите "Распределить".
4. Теперь мы должны назначить нашему экземпляру только что созданный эластичный IP-адрес. Действия ›Связать эластичные IP-адреса
5. Выберите наш экземпляр и нажмите кнопку "Связать".
6. Теперь перейдите к экземпляру, там мы видим, что эластичный IP-адрес был назначен нашему экземпляру. Что исправлено.
Обновите файл конфигурации nginx, обновив эластичный IP-адрес старым общедоступным IP-адресом следующим образом:
Теперь у нас есть статический IP-адрес, который не изменится даже после перезапуска нашего экземпляра.
4. Создание сертификата SSL: -
Если кто-то покупает домен у таких провайдеров, как godaddy, то он может получить сертификат SSL только у провайдера. Сертификация SSL объясняет, что можно работать на https: // ....., что означает безопасный веб-сайт без потенциальных угроз.
Здесь мы сами генерируем самоподписанный SSL-сертификат следующим образом.
Введите указанный выше код в SSH-терминал. Затем он попросит заполнить следующие данные: -
Как только это будет сделано, мы должны обновить файл конфигурации ngix следующим образом :-( Не забудьте проверить орфографическую ошибку и поставить точку с запятой в конце оператора). Мы используем порт 443, поскольку HTTPS работает на этом порту.
Теперь просто добавьте https: // перед своим общедоступным IP-адресом: https: //XX.XX.XX.XX: 8081
Он выдаст предупреждение о потенциальной угрозе, поскольку здесь сгенерированы сертификаты SSL, поскольку они самоподписаны, и ни один орган не проверил их, безопасен он или нет.
Нажмите «Продолжить», чтобы перейти на веб-сайт.
Мои развернутые приложения выглядят следующим образом: -
- Приложение Spam Classifier (https: //XX.XX.XX.XX: 8081)
2. Приложение Image Classifier (https: //XX.XX.XX.XX: 808 2)
Надеюсь, эта серия статей помогла вам развернуть любой тип модели Data Science на экземпляре EC2, чтобы продемонстрировать миру свое творчество. Я верю в то, что нужно учиться и делиться этим с сообществом. Сделать каждого читателя на шаг впереди в моем путешествии по MLOps.
В ближайшие дни мы поделимся более подробной информацией о развертывании, которое является неотъемлемой частью MLOps. В случае возникновения каких-либо вопросов, не стесняйтесь комментировать.
Примечание: -