Самый простой и дешевый способ развернуть модели машинного обучения в Azure.

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

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

Здесь я покажу быстрый способ развертывания модели NLP в Azure в качестве микрослужбы напрямую с использованием кода Python (вместо создания контейнеров) для развертывания.

Этот учебник работает для любой модели машинного обучения, а не только для НЛП.

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

Прежде чем начать, обязательно подготовьтесь следующим образом:

  1. Создайте учетную запись Azure с действующей подпиской. Если у вас еще нет учетной записи с действующей подпиской, вы можете создать новую учетную запись для Azure и получить двухнедельный пробный период.
  2. Установите Azure CLI. Мы будем использовать команды для создания ресурсов в Azure (вместо пользовательского интерфейса портала Azure). Этот подход наиболее удобен в сопровождении, поскольку у нас есть сценарии для каждого создаваемого ресурса, что упрощает его развитие и воспроизведение. Нажмите здесь, чтобы узнать, как установить Azure CLI.
  3. Установите основные инструменты функций Azure. Перед развертыванием нашей микрослужбы в Azure мы создадим и протестируем все локально, не потратив ни копейки. Основные инструменты Azure Functions предоставляют возможности локальной разработки для проектирования, разработки, тестирования, запуска и отладки Azure Functions. Нажмите здесь, чтобы узнать, как его установить.

Ниже мы пройдем следующие три шага:

1. Create and test an Azure function locally
2. Create the resources on Azure
3. Deploy the function to Azure

1. Создайте и протестируйте функцию Azure локально

В идеале мы хотим протестировать все локально перед развертыванием в Azure. Локальное тестирование позволяет нам убедиться, что все работает, и не тратить лишние деньги на отладку онлайн. При этом использование инструментов мониторинга, таких как «Application Insights» в Azure, по-прежнему оправдано и необходимо для обеспечения бесперебойной работы ваших приложений. Но это выходит за рамки данного поста.

Ниже сначала мы используем терминал для создания и активации среды Python. Затем мы создаем проект FunctionApp локально, который будет объединять несколько функций. Наконец, мы создаем функцию getSentiment, которая будет запускаться HTTP-запросом.

# Create and activate an environment
python3 -m venv .venv
source .venv/bin/activate
# Create a FunctionApp Project Locally
func init --worker-runtime python
# Create a Function
func new --name getSentiment --template "HTTP trigger" --authlevel anonymous

Теперь мы можем отредактировать функцию в файле getSentiment\__init__.py, добавив следующий код (измените для своей модели):

Созданная выше функция получит параметр text и вернет входной текст с соответствующим анализом тональности, полученным из модели Обнимающего Лица Базовый необработанный точно настроенный SST-2 DistilBERT.

Поскольку мы добавили несколько библиотек для приведенного выше кода, обязательно обновите файл requirements.txt следующим образом:

И после этого устанавливаем библиотеки в среду, которую мы создали выше:

pip install -r requirements.txt

Теперь мы готовы протестировать функцию локально. Для этого вам нужно запустить:

func start

Вы должны получить что-то вроде этого в качестве вывода в терминале:

Таким образом, мы можем перейти по указанному выше URL-адресу, передав параметр text для тестирования модели. Например:

http://localhost:7071/api/getSentiment?text=I%20really%20like%20bananas

Вывод должен быть:

Теперь, когда все работает локально, как и ожидалось, мы можем создать необходимые ресурсы в Azure и развернуть нашу микрослужбу.

2. Создайте ресурсы в Azure.

Вы можете выполнить следующие действия через портал Azure, щелкнув каждый ресурс и выбрав параметры. Но это трудно поддерживать. Так что в целом рекомендуется использовать скрипты.

Итак, ниже мы запускаем несколько команд в терминале, чтобы создать следующие ресурсы, которые являются минимумом, необходимым для развертывания функции в Azure:

  • Группа ресурсов. Группа ресурсов — это просто способ хранения нескольких связанных ресурсов для решения Azure.
  • Учетная запись хранения. Учетная запись хранения Azure централизует объекты данных, такие как большие двоичные объекты, общие файловые ресурсы, очереди, таблицы и диски. Это дает уникальное пространство имен для хранения. Мы будем использовать стандартный тип (самый дешевый), который в основном рекомендуется для файлов, больших двоичных объектов и таблиц.
  • FunctionApp. Приложение-функция — это ресурс, который группирует функции как логическую единицу для упрощения управления, развертывания, масштабирования и совместного использования ресурсов. Мы будем использовать самый простой план потребления для размещения приложения-функции и указать созданную учетную запись хранения.
# Login to your Azure Account from the Command Line
az login
# Create a Resource Group
az group create --name rgSENT --location westus
# Create a Storage Account
az storage account create --name stracc2sent --location westus --resource-group rgSENT --sku Standard_LRS
# Create a FunctionApp
az functionapp create --name nlpfuncsa --resource-group rgSENT --os-type linux --consumption-plan-location westus --storage-account stracc2sent --functions-version 3 --runtime python --runtime-version 3.9

Обратите внимание, что я использовал nlpfuncsa в качестве имени приложения FunctionApp. Это имя должно быть уникальным в Azure, поэтому используйте другое имя для своего приложения. Если приведенная выше команда возвращает Operation returned an invalid status ‘Conflict’ , это может быть причиной. Поэтому убедитесь, что вы используете другое (и уникальное) имя для вашего FunctionApp.

3. Разверните функцию в Azure.

Наконец, мы можем развернуть код нашего локального проекта в FunctionApp, созданном в Azure, с помощью следующей команды:

func azure functionapp publish nlpfuncsa

Этот процесс занимает некоторое время из-за удаленного здания. В итоге вы должны получить следующий результат:

Теперь вы можете перейти по указанному выше URL-адресу, передав параметр text для тестирования вашей модели. Например:

https://nlpfuncsa.azurewebsites.net/api/getsentiment?text=I%20really%20like%20bananas

Вывод должен быть таким же, как мы видели локально:

Вот и все. Теперь ваша модель NLP развернута в Azure. Вот репозиторий Github со всем кодом, отправленным в Azure.

Если вы хотите удалить все, что вы создали, перейдите на портал Azure, найдите «Группа ресурсов», нажмите на созданную группу ресурсов (если вы точно следовали этому сообщению, это должно быть «rgSENT»), затем нажмите «Удалить группу ресурсов». Поскольку все созданные ресурсы находятся в одной группе ресурсов, выполнение вышеуказанного приведет к удалению всего.

Если вам нравится читать такие истории и вы хотите поддержать меня как писателя, подумайте о том, чтобы зарегистрироваться, чтобы стать участником Medium. Это 5 долларов в месяц, что дает вам неограниченный доступ к историям на Medium. Если вы зарегистрируетесь по моей ссылке, я получу небольшую комиссию.