VK Cloud logo

MLflow Client көмегімен ML-модельдерді орналастыру

VK Cloud ұсынған JupyterHub-та алдын ала орнатылған python-кітапхана — MLflow Deployment Client көмегімен MLflow Deploy инстанстарын басқарыңыз.

Жұмысты бастамас бұрын

  1. Құрыңыз JupyterHub инстансын.
  2. Құрыңыз MLflow инстансын.
  3. JupyterHub бар виртуалды машинаны қайта жүктеңіз:
    1. Бұлттық есептеулер → Виртуалды машиналар бөліміне өтіңіз.
    2. ML Platform инстанстары бөлімшесінде қажетті JupyterHub инстансы үшін  басып, Қайта жүктеу тармағын таңдаңыз.

ML-модельді дайындау

  1. Қосылыңыз JupyterHub инстансына.

  2. tutorials директориясына өтіңіз.

    VK Cloud ұсынған JupyterHub құрамына оқытуға арналған Jupyter ноутбуктары кіреді: mlflow_demo.ipynb және mlflow_deploy_demo.ipynb.

  3. Тестілік ML-модельді дайындаңыз:

    1. mlflow_demo.ipynb файлын екі рет басыңыз.
    2. Ашылған терезеде код мысалы бар ұяшықты басып, мәзірден Run → Run Selected Cells таңдаңыз.
    3. Код бар барлық ұяшықтар үшін әрекетті қайталаңыз.

Инстансты басқару

Оқытуға арналған Jupyter ноутбугының бүкіл сценарийін орындау үшін:

  1. mlflow_deploy_demo.ipynb файлын екі рет басыңыз.
  2. Ашылған терезеде код мысалы бар ұяшықты басып, мәзірден Run → Run Selected Cells таңдаңыз.
  3. Код бар барлық ұяшықтар үшін әрекетті қайталаңыз.

Орналастыру сервері мен docker-контейнерді орналастыру бойынша орындалатын операцияларды толығырақ қарастырайық.

MlflowClient жасау

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 жасау

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 жасау

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-модельді іске қосу әдетте бір минуттан аз уақыт алады.

deployment тізімі мен күйін алу

  1. Орналастыру серверіндегі іске қосылған ML-модельдердің тізімін шығарыңыз:

    client.list_deployments(deploy_server_name)
  2. Орналастыру серверінің атауы және ML-модель атауы бойынша орналастырылған ML-модель туралы ақпарат алыңыз:

    client.get_deployment(deploy_server_name, deployment_name)
  3. 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)

Публичті DNS арқылы қолжетімді deployment жасау

  1. Пайдаланушы атын және құпиясөзді орнатыңыз.

    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)
  2. Орналастырылған ML-модель туралы ақпарат алыңыз:

    deployment_info = client.get_deployment(deploy_server_name, auth_deployment_name)print(deployment_info)
  3. ML-модельге жүгінуге арналған DNS атауын алыңыз:

    print(deployment_info['model_ref'])
  4. Авторизация деректері бар сұрауды құрастырыңыз (төменде мысал келтірілген):

    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)
  5. Docker-контейнердегі ML-модельде predict әдісін пайдаланыңыз:

    client.predict(deploy_server_name, auth_deployment_name, data)

deployment жою

Сервер атауы және deployment атауы бойынша жүгініп, орналастыру серверінен deployment жойыңыз:

client.delete_deployment(deploy_server_name, deployment_name)

deployment жою

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)