MLflow:從實驗到部署

MLflow是一個開源的平台,用於管理端到端的機器學習生命周期。它包括用於跟蹤,管理和部署機器學習模型的工具。本文將從mlflow教程, mlflow tensorflow, mlflow部署, mlflow docker, mlflow代碼解析, mlflow kubeflow, mlflow 模型發布, mlflow model docker部署等多個方面詳細介紹MLflow的使用和部署。

一、MLflow教程

MLflow的目標是提供可重複性和可管理性的流程,使得機器學習模型的開發更加高效。首先,我們需要在機器上安裝MLflow。其中,最簡單的方法是使用pip install mlflow安裝,如果你使用的是conda,則使用conda install -c conda-forge mlflow安裝。

!pip install mlflow

接下來,我們可以進入到mlflow的UI頁面,並查看相關信息。首先,我們需要在代碼開始時引入mlflow庫:

import mlflow
mlflow.set_experiment('test_experiment')

然後,通過使用with mlflow.start_run()可以方便地記錄我們要追蹤的指標。

with mlflow.start_run():
    mlflow.log_param('param1', 1)
    mlflow.log_metric('metric1', 2.5)
    mlflow.log_artifact('/path/to/artifact')

通過執行代碼後,可以在mlflow的UI界面上查看記錄的實驗和相關的參數。

二、MLflow Tensorflow

MLflow對於各種機器學習框架都有良好的支持,其中,Tensorflow就是其中一個。在MLflow中使用Tensorflow,首先需要安裝對應的MLflow Tensorflow插件:

!pip install mlflow tensorflow==1.15.2
!pip install mlflow-tensorflow

然後,在Tensorflow訓練文件(例如train.py)中引入mlflow庫,通過調用mlflow.tensorflow.autolog()來自動記錄訓練指標。

import mlflow.tensorflow

mlflow.tensorflow.autolog()

with mlflow.start_run(run_name='test run'):
    model.fit(X_train, y_train, epochs=10, batch_size=32)


運行完上述腳本,就可以在mlflow UI中看到所有的Tensorflow模型信息,以及它們的性能指標。

三、MLflow部署

部署一個機器學習模型的過程可能是非常繁瑣的,因此,MLflow提供了一些工具來簡化這個過程。例如,通過使用MLflow models API,可以將訓練好的模型打包並使用MLflow部署API輕鬆部署到基於Docker的服務中。

import mlflow
import mlflow.tensorflow
from mlflow.models.signature import infer_signature

mlflow.tensorflow.log_model(
    tf_saved_model_dir=model_dir,
    tf_meta_graph_tags=['train'],
    tf_signature_def_key='predict_output',
    artifact_path='model'
)

# 部署部分
import os
import json
import requests

def predict(input_data_json):
    endpoint = 'http://localhost:5000/invocations'
    headers = {'Content-Type': 'application/json'}
    data = input_data_json

    response = requests.post(endpoint, headers=headers, data=data)
    return json.loads(response.content.decode('utf-8'))

運行完上述腳本後,即可在Docker中部署模型,並進行預測。

四、MLflow Docker

MLflow的Docker鏡像可以通過Docker Hub下載。例如,我們可以使用docker run mlflow來啟動一個包含MLflow的Docker容器。可以通過以下命令來啟動MLflow本地伺服器:

docker run -p 5000:5000 -e http_proxy=localhost:8000 mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root ./mlflow_artifacts

運行命令後,即可在本地的埠5000上訪問MLflow的UI界面。

五、MLflow代碼解析

MLflow的代碼解析包括兩部分,一是在MLflow中使用其他機器學習庫,二是在模型存儲和載入時使用MLflow。

對於第一部分,以XGBoost為例,我們需要通過MLflow來訓練模型並記錄實驗以及結果。其中,XGBoost的代碼略去,我們只列出MLflow部分的代碼:

import mlflow
import xgboost as xgb

with mlflow.start_run():
    params = {'objective': 'reg:squarederror', 'colsample_bytree': 0.3, 'learning_rate': 0.1}

    dtrain = xgb.DMatrix(X_train, label=y_train)
    dtest = xgb.DMatrix(X_test, label=y_test)

    model = xgb.train(params, dtrain, evals=[(dtest, 'test')])
    mlflow.xgboost.log_model(model, 'model') 

對於第二部分,我們可以使用MLflow的API來存儲和讀取模型的信息。例如,我們可以在訓練模型時使用MLflow來存儲其參數:

import mlflow

mlflow.log_param("x", 1)
mlflow.log_param("y", 2)
mlflow.log_param("z", 3)

mlflow.log_metric("rmse", 0.53)
mlflow.log_metric("mae", 0.325)
mlflow.log_metric("r2", 0.83)

mlflow.log_artifact("model.pkl")

並且,在模型載入時,可以通過MLflow讀取存儲的信息。

import mlflow.sklearn

model_uri = "runs:/run_id/model"

model = mlflow.sklearn.load_model(model_uri=model_uri)
params = mlflow.sklearn.load_model(model_uri=model_uri)['_sklearn_argparse_spec']
artifacts = mlflow.sklearn.load_model(model_uri=model_uri, artifact_path="model.pkl")

六、MLflow Kubeflow

Kubeflow是一個用於機器學習工作流的開源生態系統,而MLflow模型在Kubeflow上部署非常方便。首先,我們需要先安裝Kubeflow。然後,通過調用MLflow的Kubernetes Deploy API,我們可以將模型部署到Kubernetes平台上:

import mlflow
import mlflow.kubernetes

mlflow.kubernetes.deploy(app_name="my-model",
                          model_uri="runs:/run_id/model",
                          image="my-docker-image",
                          ports=[8000])

運行上述代碼後,MLflow會為我們創建一個Kubernetes部署,並將模型部署到Kubernetes節點上。

七、MLflow模型發布

一旦我們在MLflow中開發了模型,發布這個模型也是非常容易的。我們首先可以將模型打包為.tar或.zip格式的文件,然後將其存儲在MLflow的artifact store中來分享模型。隨後,我們也可以將Artifact作為數據表來共享它們。

import mlflow.sagemaker as mfs

mfs.deploy(app_name="my-model",
           model_uri="runs:/run_id/model",
           app_entry_point="entry_point.py",
           mode="create", # "replace"
           region_name="us-west-2",
           execution_role_arn="arn:aws:iam::XXXXXXXXXXXX:role/SageMakerRole",
           instance_type="ml.m4.xlarge",
           instance_count=1,
           accelerator_type="ml.eia2.medium",
           endpoint_name="my-model-endpoint")

運行完上述腳本後,即可將模型部署到Amazon SageMaker中,並將該模型作為API調用。同時,MLflow也可以幫助我們記錄模型的所有metric和parameter數據,以便在部署時使用。

MLflow model Docker部署

MLflow Model可以輕鬆打包為Docker,然後發布到任何支持Docker部署的地方,例如Kubernetes。我們需要定義一個Dockerfile,並包含以下內容:

FROM python:3.6
RUN pip install mlflow boto3
WORKDIR /app
COPY mlflowmodel.py /app
COPY requirements.txt /app
RUN pip install -r /app/requirements.txt
ENTRYPOINT ["python", "mlflowmodel.py"]

然後,我們可以運行以下命令將該模型打包成Docker鏡像:

docker build -t mlflow-model .

最終,我們可以將該模型部署到Docker容器中,並進行使用:

docker run -it -p 5000:5000 mlflow-model

結論

總之,MLflow提供了一個全面的平台以管理從實驗到部署的機器學習生命周期。我們可以通過使用MLflow追蹤實驗結果,使用MLflow Tensorflow記錄模型的性能指標,MLflow部署API輕鬆部署模型,使用MLflow的API保存和載入模型等。通過以上的剖析,我們可以清楚地了解如何使用MLflow來管理端到端的機器學習生命周期。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245477.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:09
下一篇 2024-12-12 13:09

相關推薦

  • MLflow官網用法介紹

    本文將從多個方面詳細闡述MLflow官網的功能和使用方法,讓讀者在學習和使用MLflow過程中更加便利。 一、介紹 MLflow是一個開源的機器學習平台,由Databricks團隊…

    編程 2025-04-29

發表回復

登錄後才能評論