使用 Azure Databricks 实现 LLMOps

Azure Databricks 提供了一个统一的平台,可简化从数据准备到模型服务和监控的 AI 生命周期,从而优化机器学习系统的性能和效率。 它支持生成式 AI 应用程序的开发,利用 Unity Catalog(用于数据管理)、MLflow(用于模型跟踪)和 Mosaic AI 模型服务(用于部署 LLM)等功能。

完成本实验室大约需要 20 分钟。

开始之前

需要一个你在其中具有管理级权限的 Azure 订阅

预配 Azure OpenAI 资源

如果还没有 Azure OpenAI 资源,请在 Azure 订阅中预配 Azure OpenAI 资源。

  1. 登录到 Azure 门户,地址为 **
  2. 请使用以下设置创建 Azure OpenAI 资源:
    • 订阅**选择已被批准访问 Azure OpenAI 服务的 Azure 订阅
    • 资源组创建或选择资源组
    • 区域**:从以下任何区域中进行随机选择***
      • 美国东部 2
      • 美国中北部
      • 瑞典中部
      • 瑞士西部
    • 名称:所选项的唯一名称**
    • 定价层:标准版 S0

* Azure OpenAI 资源受区域配额约束。 列出的区域包括本练习中使用的模型类型的默认配额。 在与其他用户共享订阅的情况下,随机选择一个区域可以降低单个区域达到配额限制的风险。 如果稍后在练习中达到配额限制,你可能需要在不同的区域中创建另一个资源。

  1. 等待部署完成。 然后在 Azure 门户中转至部署的 Azure OpenAI 资源。

  2. 在左窗格的“资源管理”下,选择“密钥和终结点”。

  3. 复制终结点和其中一个可用密钥,因为稍后将在本练习中使用它。

部署所需的模块

Azure 提供了一个名为 Azure AI Studio 的基于 Web 的门户,可用于部署、管理和探索模型。 你将通过使用 Azure OpenAI Studio 部署模型,开始探索 Azure OpenAI。

备注:使用 Azure AI Studio 时,可能会显示建议你执行任务的消息框。 可以关闭这些消息框并按照本练习中的步骤进行操作。

  1. 在 Azure 门户中的 Azure OpenAI 资源的“概述”页上,向下滚动到“开始”部分,然后选择转到 Azure AI Studio 的按钮。

  2. 在 Azure AI Studio 的左侧窗格中,选择“部署”页并查看现有模型部署。 如果没有模型部署,请使用以下设置创建新的 gpt-35-turbo 模型部署:

    • 部署名称gpt-35-turbo
    • 模型:gpt-35-turbo
    • 模型版本:默认
    • 部署类型:标准
    • 每分钟令牌速率限制:5K*
    • 内容筛选器:默认
    • 启用动态配额:已禁用

*每分钟 5,000 个令牌的速率限制足以完成此练习,同时也为使用同一订阅的其他人留出容量。

预配 Azure Databricks 工作区

提示:如果你已有 Azure Databricks 工作区,则可以跳过此过程并使用现有工作区。

  1. 登录到 Azure 门户,地址为 **
  2. 请使用以下设置创建 Azure Databricks 资源:
    • 订阅选择用于创建 Azure OpenAI 资源的同一 Azure 订阅
    • 资源组在其中创建了 Azure OpenAI 资源的同一资源组
    • 区域在其中创建 Azure OpenAI 资源的同一区域
    • 名称:所选项的唯一名称**
    • 定价层高级试用版
  3. 选择“查看 + 创建”,然后等待部署完成。 然后转到资源并启动工作区。

创建群集

Azure Databricks 是一个分布式处理平台,可使用 Apache Spark 群集在多个节点上并行处理数据。 每个群集由一个用于协调工作的驱动程序节点和多个用于执行处理任务的工作器节点组成。 在本练习中,将创建一个单节点群集,以最大程度地减少实验室环境中使用的计算资源(在实验室环境中,资源可能会受到限制)。 在生产环境中,通常会创建具有多个工作器节点的群集。

提示:如果 Azure Databricks 工作区中已有一个具有 13.3 LTS ML 或更高运行时版本的群集,则可以使用它来完成此练习并跳过此过程。

  1. 在Azure 门户中,浏览到创建 Azure Databricks 工作区的资源组。
  2. 单击 Azure Databricks 服务资源。
  3. 在工作区的“概述”** 页中,使用“启动工作区”** 按钮在新的浏览器标签页中打开 Azure Databricks 工作区;请在出现提示时登录。

提示:使用 Databricks 工作区门户时,可能会显示各种提示和通知。 消除这些内容,并按照提供的说明完成本练习中的任务。

  1. 在左侧边栏中,选择“(+) 新建”任务,然后选择“群集”。
  2. 在“新建群集”页中,使用以下设置创建新群集:
    • 群集名称:用户名的群集(默认群集名称)
    • 策略:非受限
    • 群集模式:单节点
    • 访问模式:单用户(选择你的用户帐户)
    • Databricks Runtime 版本**:选择最新非 beta 版本运行时的 ML** 版本(不是**标准运行时版本),该版本符合以下条件:
      • 不使用 GPU**
      • 包括 Scala > 2.11
      • 包括 Spark > 3.4
    • 使用 Photon 加速**:未选定
    • 节点类型:Standard_D4ds_v5
    • 在处于不活动状态 20 分钟后终止****
  3. 等待群集创建完成。 这可能需要一到两分钟时间。

注意:如果群集无法启动,则订阅在预配 Azure Databricks 工作区的区域中的配额可能不足。 请参阅 CPU 内核限制阻止创建群集,了解详细信息。 如果发生这种情况,可以尝试删除工作区,并在其他区域创建新工作区。

安装所需的库

  1. 在 Databricks 工作区中,转到“工作区”** 部分。

  2. 选择“创建”**,然后选择“笔记本”**。

  3. 为笔记本命名,然后选择“Python”作为语言。

  4. 在第一个代码单元格中,输入并运行以下代码以安装所需的库:

     %pip install azure-ai-openai flask
    
  5. 安装完成后,在新单元格中重启内核:

     %restart_python
    

使用 MLflow 记录 LLM

  1. 在新单元格中,运行以下代码来初始化 Azure OpenAI 客户端:

     from azure.ai.openai import OpenAIClient
    
     client = OpenAIClient(api_key="<Your_API_Key>")
     model = client.get_model("gpt-3.5-turbo")
    
  2. 在新单元格中,运行以下代码来初始化 MLflow 跟踪:

     import mlflow
    
     mlflow.set_tracking_uri("databricks")
     mlflow.start_run()
    
  3. 在新单元格中,运行以下代码来记录模型:

     mlflow.pyfunc.log_model("model", python_model=model)
     mlflow.end_run()
    

部署模型

  1. 创建新笔记本并在第一个单元格中运行以下代码,从而为模型创建 REST API:

     from flask import Flask, request, jsonify
     import mlflow.pyfunc
    
     app = Flask(__name__)
    
     @app.route('/predict', methods=['POST'])
     def predict():
         data = request.json
         model = mlflow.pyfunc.load_model("model")
         prediction = model.predict(data["input"])
         return jsonify(prediction)
    
     if __name__ == '__main__':
         app.run(host='0.0.0.0', port=5000)
    

监视模型

  1. 在第一个笔记本中,创建新单元格并运行以下代码来启用 MLflow 自动记录:

     mlflow.autolog()
    
  2. 在新单元格中,运行以下代码来跟踪预测和输入数据。

     mlflow.log_param("input", data["input"])
     mlflow.log_metric("prediction", prediction)
    
  3. 在新单元格中,运行以下代码来监控数据偏移:

     import pandas as pd
     from evidently.dashboard import Dashboard
     from evidently.tabs import DataDriftTab
    
     report = Dashboard(tabs=[DataDriftTab()])
     report.calculate(reference_data=historical_data, current_data=current_data)
     report.show()
    

开始监控模型后,可以根据数据偏移检测设置自动重新训练管道。

清理

使用完 Azure OpenAI 资源后,请记得在位于 https://portal.azure.comAzure 门户 中删除部署或整个资源。

在 Azure Databricks 门户的“计算”页上,选择群集,然后选择“■ 终止”以将其关闭。

如果已完成对 Azure Databricks 的探索,则可以删除已创建的资源,以避免产生不必要的 Azure 成本并释放订阅中的容量。