MLflow Client көмегімен ML-модельдерді орналастыру
VK Cloud ұсынған JupyterHub-та алдын ала орнатылған python-кітапхана — MLflow Deployment Client көмегімен MLflow Deploy инстанстарын басқарыңыз.
- Құрыңыз JupyterHub инстансын.
- Құрыңыз MLflow инстансын.
- JupyterHub бар виртуалды машинаны қайта жүктеңіз:
- Бұлттық есептеулер → Виртуалды машиналар бөліміне өтіңіз.
- ML Platform инстанстары бөлімшесінде қажетті JupyterHub инстансы үшін
басып, Қайта жүктеу тармағын таңдаңыз.
-
Қосылыңыз JupyterHub инстансына.
-
tutorials директориясына өтіңіз.
VK Cloud ұсынған JupyterHub құрамына оқытуға арналған Jupyter ноутбуктары кіреді:
mlflow_demo.ipynbжәнеmlflow_deploy_demo.ipynb. -
Тестілік ML-модельді дайындаңыз:
mlflow_demo.ipynbфайлын екі рет басыңыз.- Ашылған терезеде код мысалы бар ұяшықты басып, мәзірден Run → Run Selected Cells таңдаңыз.
- Код бар барлық ұяшықтар үшін әрекетті қайталаңыз.
Оқытуға арналған Jupyter ноутбугының бүкіл сценарийін орындау үшін:
mlflow_deploy_demo.ipynbфайлын екі рет басыңыз.- Ашылған терезеде код мысалы бар ұяшықты басып, мәзірден Run → Run Selected Cells таңдаңыз.
- Код бар барлық ұяшықтар үшін әрекетті қайталаңыз.
Орналастыру сервері мен docker-контейнерді орналастыру бойынша орындалатын операцияларды толығырақ қарастырайық.
ML-модельдің URI-сын алу үшін MLflow-тың Tracking модулінен MlflowClient жасаңыз. URI кейін ML-модельді орналастыру үшін қажет болады. Мысалда URI бойынша ML-модельге жүгіну келтірілген.
from mlflow.tracking import MlflowClientcli = MlflowClient()
Мысал үшін ең бірінші ML-модельді пайдаланыңыз:
model_source_uri = cli.search_registered_models()[0].latest_versions[0].sourceprint("Имя ML-модели: ", cli.search_registered_models()[0].latest_versions[0].name)print("URI ML-модели: ", model_source_uri)
Cloud ML Platform-та жұмыс істеу үшін MLflow-тың Deployments модулінен Client жасаңыз:
from mlflow.deployments import get_deploy_clientclient = 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 сервисі орналасқан аймақ таңдалады.
create_enpoint әдісіндегі perfomance параметрі виртуалды машинаның конфигурациясына жауап береді. Келесі мәндер қолжетімді:
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 терминологиясында — орналастыру серверіндегі ML-модельі бар іске қосылған 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-ға дейінгі ауқымнан бірінші бос порт таңдалады. ML-модельді іске қосу әдетте бір минуттан аз уақыт алады.
-
Орналастыру серверіндегі іске қосылған ML-модельдердің тізімін шығарыңыз:
client.list_deployments(deploy_server_name) -
Орналастыру серверінің атауы және ML-модель атауы бойынша орналастырылған ML-модель туралы ақпарат алыңыз:
client.get_deployment(deploy_server_name, deployment_name) -
Docker-контейнердегі ML-модельде
predictәдісін пайдаланыңыз: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) -
Орналастырылған ML-модель туралы ақпарат алыңыз:
deployment_info = client.get_deployment(deploy_server_name, auth_deployment_name)print(deployment_info) -
ML-модельге жүгінуге арналған DNS атауын алыңыз:
print(deployment_info['model_ref']) -
Авторизация деректері бар сұрауды құрастырыңыз (төменде мысал келтірілген):
import requestsdata = {"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) -
Docker-контейнердегі ML-модельде
predictәдісін пайдаланыңыз: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_clientclient = 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-контейнер с ML-моделью на сервере развертыванияclient.create_deployment(server_name, deployment_name, model_uri, port_out = None)# port_out можно не указывать, выберется первый свободный в диапазоне от 62000 до 65000client.list_deployments(server_name)client.get_deployment(server_name, deployment_name)# вызов метода predict у ML-модели в docker-контейнереclient.predict(server_name, deployment_name, df_payload)client.delete_deployment(server_name, deployment_name)client.delete_endpoint(server_name)