Это шестая и последняя статья в моей серии руководств по MLflow:

  1. Настроить MLflow в производстве
  2. MLflow: Основные функции ведения журнала
  3. Ведение журнала MLflow для TensorFlow
  4. Проекты MLflow
  5. Получение лучшей модели с помощью Python API для MLflow
  6. Обслуживание модели с помощью MLflow (вы здесь!)

Создать среду

conda create -n production_env
conda activate production_env
conda install python
pip install mlflow
pip install sklearn

Запустите образец модели машинного обучения из Интернета

mlflow run [email protected]:databricks/mlflow-example.git -P alpha=0.5

Проверьте, успешно ли он работал

ls -al ~/mlruns/0

Получите uuid модели, которую мы только что запустили, с помощью приведенной выше команды и обслужите модель.

mlflow models serve -m ~/mlruns/0/your_uuid/artifacts/model -h 0.0.0.0 -p 8001

Сделайте выводы в новом окне терминала. Неистовствовать!

curl -X POST -H "Content-Type:application/json; format=pandas-split" --data '{"columns":["alcohol", "chlorides", "citric acid", "density", "fixed acidity", "free sulfur dioxide", "pH", "residual sugar", "sulphates", "total sulfur dioxide", "volatile acidity"],"data":[[12.8, 0.029, 0.48, 0.98, 6.2, 29, 3.33, 1.2, 0.39, 75, 0.66]]}' http://0.0.0.0:8001/invocations

Чтобы делать выводы с помощью Python, вы можете импортировать библиотеку request:

import requests

host = '0.0.0.0'
port = '8001'

url = f'http://{host}:{port}/invocations'

headers = {
    'Content-Type': 'application/json',
}

# test_data is a Pandas dataframe with data for testing the ML model
http_data = test_data.to_json(orient='split')

r = requests.post(url=url, headers=headers, data=http_data)

print(f'Predictions: {r.text}')

Команда mlflow models serve останавливается, как только вы нажимаете Ctrl + C или выходите из терминала. Если вы хотите, чтобы модель была запущена и работала, вам необходимо создать для нее службу systemd. Перейдите в каталог / etc / systemd / system и создайте новый файл с именем model.service со следующим содержанием:

[Unit]
Description=MLFlow Model Serving
After=network.target

[Service]
Restart=on-failure
RestartSec=30
StandardOutput=file:/path_to_your_logging_folder/stdout.log
StandardError=file:/path_to_your_logging_folder/stderr.log
Environment=MLFLOW_TRACKING_URI=http://host_ts:port_ts
Environment=MLFLOW_CONDA_HOME=/path_to_your_conda_installation
ExecStart=/bin/bash -c 'PATH=/path_to_your_conda_installation/envs/model_env/bin/:$PATH exec mlflow models serve -m path_to_your_model -h host -p port'

[Install]
WantedBy=multi-user.target

Активируйте и включите вышеуказанный сервис с помощью следующих команд:

sudo systemctl daemon-reload
sudo systemctl enable model
sudo systemctl start model
sudo systemctl status model

Приведенный выше пример очень простой. Для сложных моделей, таких как Deeplab, при сохранении модели необходимо определить входной и выходной тензоры. Рассмотрите возможность обращения к TF Serving для этой цели. Этот блог - хорошее руководство по обслуживанию модели Deeplab с использованием TF Serving.

Использованная литература:

Https://thegurus.tech/posts/2019/06/mlflow-production-setup/