Развертывание моделей с помощью REST
Узнайте, как использовать REST API Машинного обучения Azure для развертывания моделей.
REST API использует обычные HTTP-команды для создания, извлечения, обновления и удаления ресурсов. REST API работает с любыми языками и инструментами, которые могут выполнять HTTP-запросы. Благодаря своей простой структуре REST выбирается в средах создания сценариев и для автоматизации MLOps.
В этой статье вы узнаете, как с помощью новых REST API выполнять следующие задачи:
- Создание ресурсов Машинного обучения
- Создание простого задания на обучение
- Создание задания подбора гиперпараметров
Необходимые компоненты
- Подписка Azure, в которой у вас есть права администратора. Если у вас нет такой подписки, попробуйте использовать бесплатную или платную личную подписку.
- Рабочая область Машинного обучения Azure.
- Субъект-служба в рабочей области. Административные запросы REST используют проверку подлинности субъекта-службы.
- Маркер проверки подлинности субъекта-службы. Чтобы получить этот маркер, выполните действия, описанные в статье Получение маркера проверки подлинности субъекта-службы.
- Служебная программа curl. Программа curl доступна в подсистеме Windows для Linux или любого дистрибутива UNIX. В PowerShell curl является псевдонимом команды Invoke-WebRequest, и
curl -d "key=val" -X POST uri
становитсяInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.
Установка имени конечной точки
Примечание.
Имена конечных точек должны быть уникальными на уровне региона Azure. Например, в westus2 можно указать только одну конечную точку с именем my-endpoint.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Сетевые конечные точки Машинного обучения Azure
Подключеннные конечные точки дают возможность развертывать модель без необходимости создавать базовую инфраструктуру и кластеры Kubernetes, а также управлять ими. В этой статье вы создадите сетевую конечную точку и развертывание, а затем проверите ее путем вызова. Но сначала нужно зарегистрировать необходимые для развертывания ресурсы, включая модель, код и среду.
Существует множество способов создания Машинное обучение Azure веб-конечной точки, включая Azure CLI и визуально с помощью студии. В примере ниже показана сетевая конечная точка с REST API.
Создание ресурсов Машинного обучения
Сначала настройте ресурсы Машинного обучения Azure для своего задания.
В следующих вызовах REST API SUBSCRIPTION_ID
, RESOURCE_GROUP
, LOCATION
и WORKSPACE
используются в качестве заполнителей. Замените значения заполнителей на собственные.
Административные запросы REST запрашивают маркер проверки подлинности субъекта-службы. Замените TOKEN
собственным значением. Чтобы получить этот маркер, выполните следующую команду:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
Поставщик услуг использует аргумент api-version
для обеспечения совместимости. Аргумент api-version
меняется от службы к службе. Для возможности использования будущих версий API задайте ее в виде переменной:
API_VERSION="2022-05-01"
Получение сведений об учетной записи хранения
Чтобы зарегистрировать модель и код, сначала нужно отправить их в учетную запись хранения. Сведения об учетной записи хранения доступны в хранилище данных. В этом примере мы получаем хранилище данных по умолчанию и учетную запись хранения Azure для рабочей области. Отправьте рабочей области запрос GET, чтобы получить JSON-файл с соответствующей информацией.
Проанализировать результат JSON и получить необходимые значения можно с помощью средства JQ. Для получения тех же сведений также можно использовать портал Azure.
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
Отправка и регистрация кода
Теперь, когда у нас есть хранилище данных, можно создать скрип оценки. С помощью интерфейса CLI Службы хранилища Azure отправьте большой двоичный объект в свой контейнер по умолчанию.
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Совет
Для отправки также можно использовать другие методы, например портал Azure или Обозреватель службы хранилища Azure.
После отправки кода его можно указать в запросе PUT и сослаться на хранилище данных с помощью идентификатора datastoreId
.
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score\"
}
}"
Отправка и регистрация модели
Аналогично коду, отправьте файлы модели:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Теперь зарегистрируйте модель:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelUri\":\"azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model\"
}
}"
Создать окружение
Развертывание должно выполняться в среде со всеми необходимыми зависимостями. Создайте среду с помощью запроса PUT. Используйте образ docker из Microsoft Container Registry. Образ docker можно настроить с помощью Docker
и добавить зависимости conda с помощью condaFile
.
В следующем фрагменте кода содержимое среды Conda (YAML-файл) было считано в переменную среды:
ENV_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\":{
\"condaFile\": \"$CONDA_FILE\",
\"image\": \"mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1\"
}
}"
Создать конечную точку
Создайте сетевую конечную точку:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"identity\": {
\"type\": \"systemAssigned\"
},
\"properties\": {
\"authMode\": \"AMLToken\"
},
\"location\": \"$LOCATION\"
}")
Создать развертывание
Создайте развертывание для конечной точки:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"location\": \"$LOCATION\",
\"sku\": {
\"capacity\": 1,
\"name\": \"Standard_DS2_v2\"
},
\"properties\": {
\"endpointComputeType\": \"Managed\",
\"scaleSettings\": {
\"scaleType\": \"Default\"
},
\"model\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1\",
\"codeConfiguration\": {
\"codeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1\",
\"scoringScript\": \"score.py\"
},
\"environmentId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION\"
}
}")
Вызов конечной точки для оценки данных с помощью модели
Для вызова конечной точки требуется URI оценки и маркер доступа. Сначала получите URI оценки:
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN")
scoringUri=$(echo $response | jq -r '.properties.scoringUri')
Получите маркер доступа конечной точки:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
Теперь вызовите конечную точку, используя curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Проверка журналов
Проверьте журналы развертывания:
curl --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue/getLogs?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{ \"tail\": 100 }"
Удаление конечной точки
Если вы не планируете использовать развертывание, удалите его с помощью следующей команды (она удаляет конечную точку и все базовые развертывания):
curl --location --request DELETE "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" || true
Следующие шаги
- Узнайте, как развернуть модель с помощью Azure CLI.
- Узнайте, как развернуть модель с помощью студии.
- Узнайте, как устранять неполадки при развертывании и оценке с использованием подключенных конечных точек
- Сведения о доступе к ресурсам Azure с помощью подключенной конечной точки и управляемого удостоверения
- Узнайте, как отслеживать сетевые конечные точки.
- См. Безопасное развертывание подключенных конечных точек.
- Просмотр затрат на управляемую подключенную конечную точку Машинного обучения Azure.
- Список SKU управляемых подключенных конечных точек.
- Узнайте об ограничениях для конечных точек в Сети.