重新训练和部署机器学习模型

适用于:适用于。机器学习 Studio(经典版)Azure 机器学习 不适用。

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

重新训练是确保机器学习模型保持准确的一种方法,该方法基于最相关的可用数据。 本文介绍如何在工作室(经典)中重新训练和部署机器学习模型作为新的 Web 服务。 如果要重新训练经典 Web 服务,请参阅此操作说明文章

本文假设你已部署了一个预测 Web 服务。 如果还没有预测 Web 服务, 请在此处了解如何部署工作室(经典)Web 服务。

你将执行以下步骤来重新训练和部署机器学习新 Web 服务:

  1. 部署重新训练 Web 服务
  2. 使用重新训练 Web 服务来训练新模型
  3. 将现有的预测实验更新为使用新模型

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

部署重新训练 Web 服务

使用重新训练 Web 服务,可以使用一组新的参数(例如新数据)来重新训练模型,并保存它供以后使用。 将“Web 服务输出”连接到“训练模型”时,训练实验将输出一个新模型供你使用。

使用以下步骤来部署重新训练 Web 服务:

  1. 将一个 Web 服务输入模块连接到你的数据输入。 通常情况下,想要确保输入数据的处理方式与原始训练数据的处理方式相同。

  2. 将一个 Web 服务输出模块连接到训练模型的输出。

  3. 如果你有一个评估模型模块,则可以连接一个 Web 服务输出模块来输出评估结果。

  4. 运行实验。

    运行实验之后,生成的工作流应当类似于下图:

    生成的工作流

    现在,将训练实验部署为重新训练 Web 服务,用于输出经过训练的模型和模型评估结果。

  5. 在实验画布的底部,单击“设置 Web 服务”

  6. 选择“部署 Web 服务[新建]”。 机器学习 Web 服务门户会打开“部署 Web 服务”页面

  7. 为 Web 服务键入名称,选择一个付款计划。

  8. 选择“部署”。

重新训练模型

对于此示例,我们使用 C# 创建重新训练的应用程序。 还可使用 Python 或 R 示例代码完成此任务。

使用以下步骤来调用重新训练 API:

  1. 在 Visual Studio 中创建 C# 控制台应用程序:“新建”>“项目”>“Visual C#”>“Windows 经典桌面”>“控制台应用(.NET Framework)”
  2. 登录机器学习 Web 服务门户。
  3. 单击正在使用的 Web 服务。
  4. 单击“使用”。
  5. 在“使用”页底部的“示例代码”部分中,单击“Batch”。
  6. 复制 Batch 执行的示例 C# 代码,并将其粘贴到 Program.cs 文件。 请确保命名空间保持不变。

按照注释中指定的方式添加 NuGet 包 Microsoft.AspNet.WebApi.Client。 要添加对 Microsoft.WindowsAzure.Storage.dll 的引用,可能需要安装 Azure 存储服务的客户端库

以下屏幕截图显示机器学习 Web 服务门户中的“使用”页面

使用页

更新 apiKey 声明

定位 apikey 声明:

const string apiKey = "abc123"; // Replace this with the API key for the web service

在“使用”页的“基本使用信息”部分中,找到主密钥,并将其复制到 apikey 声明。

更新 Azure 存储信息

BES 示例代码将文件从本地驱动器(例如,“C:\temp\CensusInput.csv”)上传到 Azure 存储、对其进行处理,并将结果写回 Azure 存储。

  1. 登录到 Azure 门户
  2. 在左侧导航栏中,单击“更多服务”,搜索“存储帐户”,然后选择它。
  3. 从存储帐户列表中,选择一个来存储重新训练模型。
  4. 在左侧导航栏中,单击“访问密钥”
  5. 复制并保存“主访问密钥”
  6. 在左侧导航列中,单击“ Blob”。
  7. 选择现有容器或创建新的容器并保存名称。

找到“StorageAccountName”、“StorageAccountKey”和“StorageContainerName”声明,然后更新从门户保存的值。

const string StorageAccountName = "mystorageacct"; // Replace this with your Azure storage account name
const string StorageAccountKey = "a_storage_account_key"; // Replace this with your Azure Storage key
const string StorageContainerName = "mycontainer"; // Replace this with your Azure Storage container name

还必须确保输入文件在代码中指定的位置上可用。

指定输出位置

在“请求有效负载”中指定输出位置时,在 RelativeLocation 中指定的文件的扩展必须指定为 ilearner

Outputs = new Dictionary<string, AzureBlobDataReference>() {
    {
        "output1",
        new AzureBlobDataReference()
        {
            ConnectionString = storageConnectionString,
            RelativeLocation = string.Format("{0}/output1results.ilearner", StorageContainerName) /*Replace this with the location you want to use for your output file and a valid file extension (usually .csv for scoring results or .ilearner for trained models)*/
        }
    },

下面是重新训练输出的示例:

重新训练输出

评估重新训练结果

运行应用程序时,输出包括 URL 和访问评估结果所需的共享访问签名令牌。

通过组合 output2 的输出结果中的 BaseLocationRelativeLocationSasBlobToken 并在浏览器地址栏中粘贴完整的 URL,可以查看重新训练模型的性能结果。

检查结果以确定新训练的模型是否比现有模型的表现更好。

保存输出结果中的 BaseLocationRelativeLocationSasBlobToken

更新预测实验

登录到 Azure 资源管理器

首先,使用 Connect-AzAccount cmdlet 从 PowerShell 环境中登录到 Azure 帐户。

获取 Web 服务定义对象

接下来,通过调用 Get-AzMlWebService cmdlet 获取 Web 服务定义对象。

$wsd = Get-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'

若要确定现有 Web 服务的资源组名称,请运行 Get-AzMlWebService cmdlet,无需任何参数即可在订阅中显示 Web 服务。 定位到 Web 服务,并查看其 Web 服务 ID。 资源组的名称是 ID 中的第四个元素,紧随 resourceGroups 元素之后。 在下面的示例中,资源组名称为 Default-MachineLearning-SouthCentralUS。

Properties : Microsoft.Azure.Management.MachineLearning.WebServices.Models.WebServicePropertiesForGraph
Id : /subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237
Name : RetrainSamplePre.2016.8.17.0.3.51.237
Location : South Central US
Type : Microsoft.MachineLearning/webServices
Tags : {}

或者,若要确定现有 Web 服务的资源组名称,请登录机器学习 Web 服务门户。 选择 Web 服务。 资源组名称是 Web 服务的 URL 的第五个元素,紧随 resourceGroups 元素之后。 在下面的示例中,资源组名称为 Default-MachineLearning-SouthCentralUS。

https://services.azureml.net/subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237

将 Web 服务定义对象导出为 JSON

若要修改已训练模型的定义以使用新训练的模型,必须先使用 Export-AzMlWebService cmdlet 将其导出到 JSON 格式文件。

Export-AzMlWebService -WebService $wsd -OutputFile "C:\temp\mlservice_export.json"

将引用更新到 iLearner blob

在资产中,定位到 [训练的模型],使用 iLearner blob 的 URI 更新 locationInfo 节点中的 URI 值。 通过组合 BES 重新训练调用的输出结果中的 BaseLocationRelativeLocation 生成 URI。

"asset3": {
    "name": "Retrain Sample [trained model]",
    "type": "Resource",
    "locationInfo": {
        "uri": "https://mltestaccount.blob.core.windows.net/azuremlassetscontainer/baca7bca650f46218633552c0bcbba0e.ilearner"
    },
    "outputPorts": {
        "Results dataset": {
            "type": "Dataset"
        }
    }
},

将 JSON 导入到 Web 服务定义对象

使用 Import-AzMlWebService cmdlet 将修改后的 JSON 文件转换回可用于更新谓词实验的 Web 服务定义对象。

$wsd = Import-AzMlWebService -InputFile "C:\temp\mlservice_export.json"

更新 Web 服务

最后,使用 Update-AzMlWebService cmdlet 更新预测实验。

Update-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'

后续步骤

若要了解有关如何管理 Web 服务或跟踪多个实验运行的详细信息,请参阅以下文章: