要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程

要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程,请按照以下有序步骤操作:

  1. 设置环境

    • 导出MLflow跟踪URI:设置环境变量以指向您的MLflow跟踪服务。
    • export MLFLOW_TRACKING_URI=your-organization's-MLflow-server-url
  2. 加载数据和预处理

    • 读取数据集:使用pandas读取包含数据集的CSV文件。
      import pandas as pd
      data = pd.read_csv('https://raw.githubusercontent.com/mlflow/tutorials/main/quickstarts/lf/mm%2Ecsv', sep=';')
      
    • 划分数据:将数据集分为训练集、验证集和测试集。
      from sklearn.model_selection import train_test_split
      train_ratio = 0.7
      val_ratio = 0.2
      test_ratio = 0.1
      train, temp = train_test_split(data, test_size=(val_ratio + test_ratio), random_state=42)
      train_x, train_y = train.drop(['quality'], axis=1).values, train['quality'].values.ravel()
      valid_x, valid_y = temp.drop(['quality'], axis=1).values, temp['quality'].values.ravel()
      X_train, y_train = train_x, train_y
      X_valid, y_valid = valid_x, valid_y
      # 注意:X_test, y_test在示例中未直接定义,应从temp中进一步划分得到
      
  3. 定义模型架构

    • 神经网络模型:创建一个具有适当层的顺序模型并进行编译。
      import keras
      from keras.layers import Dense, Normalization
      from tensorflow.keras.optimizers import SGD
      
      def create_model(hp):
          model = keras.Sequential([
              keras.Input(shape=(len(X_train[0], ))),
              keras.layers.Normalization(axis=-1),
              keras.layers.Dense(units=hp.get('units'), activation='relu'),
              keras.layers.Dense(1)
          ])
          model.compile(optimizer=SGD(learning_rate=hp.get('learning_rate'), momentum=hp.get('momentum')),
                        loss='mse',
                        metrics=[keras.metrics.RootMeanSquareError()])
          return model
      
  4. 超参数搜索的目标函数

    • 函数定义:将模型训练包装在MLflow的start_run()上下文管理器内。
      def objective(params):
          with mlflow.start_run(nested=True):
              model = create_model(params)
              history = model.fit(X_train, y_train, epochs=params['epochs'], validation_data=(X_valid, y_valid))
              score = model.evaluate(X_test, y_test, verbose=0)
              return {'loss': float(score[1]), 'params': params}
      
  5. 执行超参数搜索

    • 使用HyperOpt:利用hypertune模块执行搜索。
      import hpbandster as hp
      import numpy as np
      
      space = {
          'learning_rate': hp.uniform('lr', 0.001, 0.1),
          'momentum': hp.uniform('mom', 0.0, 1.0),
          'epoch': hp.randint('epoch', low=2, high=10, qstep=1)
      }
      study = hp.BayesStudy(space, objective)
      results = []
      max_trials = 10
      for i in range(max_trials):
          print(f'Trial {i+1}/{max_trials}')
          config = study.suggest()
          # 注意:study trial i+1 应该是 study.evaluate(objective, config) 或类似调用,示例中存在笔误
          res = objective(config)
          results.append(res)
      
  6. 选择最佳模型运行

    • 分析结果:根据记录的指标确定表现最佳的运行。
      min_loss = min([res['loss'] for res in results])
      best_index = [idx for idx, res in enumerate(results) if res['loss'] == min_loss][0]
      best_config = results[best_index]['params']
      print(f'Best configuration: {best_config}')
      
  7. 记录和部署最佳模型

    • 记录参数和指标:捕获最佳运行的关键见解。
      with mlflow.start_run():
          mlflow.set_params(best_config)
          mlflow.log_metrics({'rmse': min_loss})
      
    • 保存和容器化:构建封装最终模型的Docker镜像。
      mlflow models build-docker --model-uri=models:/wine_quality/1 --name=qsp
      
    • 创建REST API端点:使用Docker容器将模型对外提供服务。
      docker run -e MODEL_NAME=wine_quality --env Leasing:1000 qsp:latest -p 5002:8080
      curl -d '{}' -H "Content-Type: application/json" -X POST localhost:5002/invocations
      
  8. 最终步骤

    • 评估性能:使用样本输入测试端点,确保预测结果与预期输出一致。
    • 记录与分享:为利益相关者提供详细解释和更新。

通过系统地应用这些步骤,您可以有效地利用MLflow来简化实验、自动化模型开发,并促进可扩展的部署流程。

你可能感兴趣的:(python,人工智能,python,机器学习,mlflow)