Управление инстансом с помощью MLflow Client
Управляйте инстансами MLflow Deploy с помощью MLflow Deployment Client, предустановленной python-библиотеки в JupyterHub от VK Cloud.
- Создайте инстанс JupyterHub.
- Создайте инстанс MLflow.
- Перезагрузите виртуальную машину с JupyterHub:
- Перейдите в раздел Облачные вычисления → Виртуальные машины.
- В подразделе Инстансы ML Platform найдите нужный инстанс JupyterHub.
- Наведите на значок с тремя точками и выберите пункт Перезагрузить.
-
Подключитесь к инстансу JupyterHub.
-
Перейдите в директорию tutorials.
В состав JupyterHub от VK Cloud включены обучающие Jupyter-ноутбуки:
mlflow_demo.ipynb
иmlflow_deploy_demo.ipynb
. -
Подготовьте тестовую модель:
- Нажмите два раза на
mlflow_demo.ipynb
. - В открывшемся окне нажмите на клетку с примером кода и выберите в меню Run → Run Selected Cells.
- Повторите операцию для всех клеток с кодом.
- Нажмите два раза на
Чтобы пройти весь сценарий обучающего Jupyter-ноутбука:
- Нажмите два раза на
mlflow_deploy_demo.ipynb
. - В открывшемся окне нажмите на клетку с примером кода и выберите в меню Run → Run Selected Cells.
- Повторите операцию для всех клеток с кодом.
Разберем подробнее проводимые операции с разворачиванием сервера и docker-контейнера.
Создайте MlflowClient из Tracking модуля MLflow для получения URI ML-модели. URI понадобится далее для деплоя модели. В примере приведено обращение к модели по URI.
from mlflow.tracking import MlflowClient
cli = MlflowClient()
Для примера используйте самую первую модель:
model_source_uri = cli.search_registered_models()[0].latest_versions[0].source
print("Имя модели: ", cli.search_registered_models()[0].latest_versions[0].name)
print("URI модели: ", model_source_uri)
Создайте Client из Deployments модуля MLflow для работы в Cloud ML Platform:
from mlflow.deployments import get_deploy_client
client = get_deploy_client('vk-cloud-mlplatform')
endpoint
в терминологии VK Cloud MLflow Deploy — это ВМ, сконфигурированная как деплой-сервер.
deploy_server_name = "deploy_server_one"
client.create_endpoint(name=deploy_server_name)
client.create_endpoint(name, performance="low", disk_size=50, disk_type="ceph-ssd", av_zone=None)
Выше перечислен полный список параметров. Создать деплой-сервер можно и с указанием только имени сервера. av_zone
в этом случае будет взята аналогично зоне в которой расположен связанный MLflow сервис.
Параметр perfomance
в методе create_enpoint
отвечает за конфигурацию виртуальной машины. Доступны следующие значения:
low — standard 4-4
(4 ядра, 4 гигабайта RAM);mid — advanced 8-8
(8 ядер, 8 гигабайт RAM);high — advanced 16-16
(16 ядер, 16 гигабайт RAM).
Деплой-сервер готов для работы после смены статуса CREATING
на RUNNING
. Обычно подготовка деплой-сервера занимает около пяти-десяти минут.
client.list_endpoints()
Получите информацию о статусе деплой-сервера по его имени:
client.get_endpoint(deploy_server_name)
deployment
в терминологии VK Cloud MLflow Deploy — это запущенный docker-контейнер с моделью на деплой-сервере.
deployment_name="test_deployment"
client.create_deployment(server_name=deploy_server_name, deployment_name=deployment_name, model_uri=model_source_uri, port_out = None)
port_out
можно не указывать, выберется первый свободный в диапазоне от 62000
до 65000
. Запуск модели обычно занимает менее минуты.
-
Выведите список запущенных моделей на деплой-сервере:
client.list_deployments(deploy_server_name)
-
Получите информацию о развернутой модели по имени деплой-сервера и модели:
client.get_deployment(deploy_server_name, deployment_name)
-
Используйте метод
predict
у модели в docker-контейнере:data = {"inputs":[[0.045341, 0.050680, 0.060618, 0.031065, 0.028702, -0.047347, -0.054446, 0.071210, 0.133597, 0.135612],[0.075341, 0.010680, 0.030618, 0.011065, 0.098702, -0.007347, -0.014446, 0.071210, 0.093597, 0.115612]]}
client.predict(deploy_server_name, deployment_name, data)
-
Задайте имя пользователя и пароль.
auth_value = "user:PasswordDA@dvv//!123$"
auth_deployment_name = "test_deploy_auth"
client.create_deployment(deploy_server_name, auth_deployment_name, model_source_uri, auth=auth_value)
-
Получите информацию о задеплоенной модели:
deployment_info = client.get_deployment(deploy_server_name, auth_deployment_name)
print(deployment_info)
-
Получите DNS-имя для обращения к модели:
print(deployment_info['model_ref'])
-
Сформируйте запрос с данными для авторизации (ниже приведен пример):
import requests
data = {"inputs":[[0.045341, 0.050680, 0.060618, 0.031065, 0.028702, -0.047347, -0.054446, 0.071210, 0.133597, 0.135612],[0.075341, 0.010680, 0.030618, 0.011065, 0.098702, -0.007347, -0.014446, 0.071210, 0.093597, 0.115612]]}
response = requests.post('https://ml-platform-3bb5b04ebb82c0.ml.msk.vkcs.cloud/deploy/0e84f86c-b9f0-4102-861d-222c41a81452/test_deploy_auth/invocations', json=data, auth=("user", "PasswordDA@dvv//!123$"))
print(response.text)
-
Используйте метод
predict
у модели в docker-контейнере:client.predict(deploy_server_name, auth_deployment_name, data)
Удалите deployment с сервера, обращаясь по имени сервера и deployment:
client.delete_deployment(deploy_server_name, deployment_name)
client.delete_endpoint(deploy_server_name)
from mlflow.deployments import get_deploy_client
client = get_deploy_client('vk-cloud-mlpatform')
# endpoint – это деплой-сервер ВМ
client.create_endpoint(name, performance="low", disk_size=50, disk_type="ceph-ssd", av_zone=None)
client.list_endpoints()
client.get_endpoint(server_name)
# deployment – запущеный docker-контейнер с моделью на deployment сервере
client.create_deployment(server_name, deployment_name, model_uri, port_out = None)
# port_out – можно не указывать, выберется первый свободный в диапазоне от 62000 до 65000
client.list_deployments(server_name)
client.get_deployment(server_name, deployment_name)
# вызов метода predict у модели в docker-контейнере
client.predict(server_name, deployment_name, df_payload)
client.delete_deployment(server_name, deployment_name)
client.delete_endpoint(server_name)