模型生成器使你很容易开始使用机器学习并创建你的第一个模型。随着时间的推移,你收集了更多的数据,你可能想不断完善或重新训练你的模型。使用CLI和Azure工具的组合,你可以训练一个新的ML.NET模型,并将训练集成到一个管道中。这篇博文展示了一个训练管道的例子,它可以使用Azure轻松地重新运行。
我们将使用Azure机器学习数据集来跟踪数据,并使用Azure ML管道来训练一个新模型。然后,这个重新训练的管道可以由Azure DevOps触发。 在这篇文章中,我们将介绍:
- 创建一个Azure机器学习数据集
- 通过Azure机器学习CLI(v2)训练一个ML.NET模型
- 在Azure DevOps中创建一个用于重新训练的管道
先决条件
- Azure机器学习工作区
- 工作区中的计算集群
创建一个Azure机器学习数据集
-
在Microsoft Azure机器学习工作室中打开工作区。
-
我们需要创建一个文件数据集。导航到数据集。点击 +创建数据集。
-
选择数据源。我们将上传一份从Kaggle获得的这个歌曲流行度数据集的副本。这是一个相当大的数据集,我不想在本地维护。
-
给数据集一个独特的名字,确保选择 "文件 "作为数据集类型:

-
从本地文件上传至默认的工作区blobstore。记住文件名:

-
当数据上传完成后,创建数据集。
-
点击已完成的数据集来查看它。确认 "探索"选项卡中的预览看起来是正确的。
-
记下数据集名称、文件名称,如果你上传了多个版本,记下版本号。我们将在下一步中使用这些值。
通过Azure机器学习训练一个ML.NET模型
现在我们有一个数据集上传到Azure ML,我们可以创建一个Azure ML训练管道,并使用Azure CLI v2来运行它。下面的管道将创建一个带有ML.NET CLI实例的Docker容器,用来进行训练:
-
创建Docker文件,并将其保存在一个新的文件夹中,用于本实验。如果不熟悉Dockerfiles,这些文件类型没有扩展名。该文件应称为 "Dockerfile",没有扩展名,并包含以下内容:
FROM mcr.microsoft.com/dotnet/sdk:6.0 RUN dotnet tool install -g microsoft.mlnet-linux-x64 ENV PATH="$PATH:/root/.dotnet/tools" -
我们需要弄清楚我们的ML.NET CLI命令来训练我们的模型。如果需要,请参阅ML.NET CLI的安装说明。

我们正在做回归,并将指定一个数据集和标签列。对于表格文件也支持文本分类和推荐。查看命令信息或ML.NET CLI文档,了解其他训练场景的更多细节。
确保包括选项
--verbosity q,因为CLI的一些功能在Linux环境下会导致问题。mlnet regression --dataset <YOUR_DATA_FILE_NAME> --label-col <YOUR_LABEL> --output outputs --log-file-path outputs/logs --verbosity q -
在与Docker文件相同的文件夹中创建AzureTrain.yml文件。这就是将被传递给Azure CLI的内容。 通过在管道中使用输入数据,Azure ML将下载文件数据集到我们的计算中。然后可以直接引用该训练文件。我们只需要在命令中指定ML.NET CLI的路径。 做好以下工作:
- 替换成唯一的数据集名称,以及版本号(可能是1)。这两个值在数据集标签中都是可见的。在这个例子中,这个值是
dataset: azureml:song_popularity:1。 - 用本地的ML.NET CLI命令替换命令。我们将使用{inputs.data}来代替本地文件路径,告诉管道使用Azure计算上的下载路径。添加数据文件名。在这个例子中,它是
--dataset {inputs.data}/song_data.csv。 - 用我们的计算名称替换计算。工作区中可用的计算集群在Computes->Compute clusters下可见。
- 替换成唯一的数据集名称,以及版本号(可能是1)。这两个值在数据集标签中都是可见的。在这个例子中,这个值是
更多信息见命令作业YAML模式文档:
inputs:
data:
dataset: azureml:<DATASET_NAME>:<VERSION>
mode: download
experiment_name: mldotnet-training
code:
local_path: .
command: mlnet regression --dataset {inputs.data}/<YOUR_DATA_FILE_NAME> --label-col <YOUR_LABEL_COLUMN> --output outputs --log-file-path outputs/logs --verbosity q
compute: azureml:<YOUR-COMPUTE-NAME>
environment:
build:
local_path: .
dockerfile_path: Dockerfile
手动运行
为了从本地机器上启动训练,或者只是测试运行的功能,我们可以安装和设置带有ML扩展的Azure CLI(v2)。在这些说明中,我运行的是ml扩展2.0.7版:
-
机器学习子命令需要-workspace/-w和-resource-group/-g参数。配置数据集的组和工作空间的默认值:
az configure –-defaults group=<YOUR_RESOURCE_GROUP> workspace=<YOUR_WORKSPACE> -
运行上一步创建的再训练管道:
az ml job create –-file AzureTrain.yml -
在Azure机器学习工作室的Experiments->mldotnet-training下在线检查运行结果。
用Azure DevOps服务管道自动进行训练
我们可以通过Azure DevOps管道来运行Azure ML训练。这允许使用任何触发器,包括基于时间或文件变化。
下面是让Azure ML管道运行的步骤。更多细节,请看设置Azure DevOps和Azure ML的分步说明。
- 将Dockerfile和AzureTrain.yml检查到源控制中。最好是创建一个新的子文件夹,把这些文件放进去。Azure CLI会在运行实验时上传整个包含文件夹。
- 在Azure ML和Azure DevOps之间建立一个服务连接。在Azure DevOps中。
- 转到项目设置。选择管道->服务连接
- 创建一个新的Azure资源管理器类型的连接
- 选择服务主体(自动)和范围级机器学习工作区。把它配置到你的机器学习工作区的资源组。将其命名为aml-ws。
- 在Azure DevOps中创建一个新的管道,使用以下文件作为模板。替换变量和触发器(如果适用)。ml-ws-connection是步骤2中创建的连接。根据文件签入的地方,将AzureTrain.yml文件路径添加到 "创建训练作业 "步骤中。
variables:
ml-ws-connection: 'aml-ws' # Workspace Service Connection name
ml-ws: '<YOUR_VALUE>' # AML Workspace name
ml-rg: '<YOUR_VALUE>' # AML resource Group name
trigger:
<YOUR_TRIGGER>
pool:
vmImage: ubuntu-latest
steps:
- task: AzureCLI@2
displayName: 'Set config functionality'
inputs:
azureSubscription: $(ml-ws-connection)
scriptLocation: inlineScript
scriptType: 'bash'
inlineScript: 'az config set extension.use_dynamic_install=yes_without_prompt'
- task: AzureCLI@2
displayName: 'Install AML CLI (azureml-v2-preview)'
inputs:
azureSubscription: $(ml-ws-connection)
scriptLocation: inlineScript
scriptType: 'bash'
inlineScript: 'az extension add -n ml'
- task: AzureCLI@2
displayName: 'Setup default config values'
inputs:
azureSubscription: $(ml-ws-connection)
scriptLocation: inlineScript
scriptType: 'bash'
inlineScript: 'az configure --defaults group=$(ml-rg) workspace=$(ml-ws)'
- task: AzureCLI@2
displayName: 'Create training job'
inputs:
azureSubscription: $(ml-ws-connection)
scriptLocation: inlineScript
scriptType: 'bash'
inlineScript: 'az ml job create --file <YOUR_PATH>/AzureTrain.yml'
在本地或从Azure DevOps运行Azure CLI作业将在Azure中创建一个输出模型。要看到这个模型,请到微软Azure机器学习工作室,导航到你的ML工作区。点击实验->mldotnet-training。切换 "仅查看我的运行",以查看由Azure管道服务负责人启动的运行。完成的训练运行应该是可见的。训练后的模型和示例代码会在输出文件夹中的 "输出 +日志"部分生成。
在这篇文章中,我们通过Azure ML创建了一种灵活的方式来跟踪我们的数据和模型。 Azure ML数据集可以被添加和更新,同时保持历史数据。这个Azure ML再训练管道可以在Azure DevOps中手动或自动运行。 一旦你的模型得到训练,你就可以使用Azure ML自定义容器进行部署。
用Azure机器学习数据集和Azure DevOps建立你自己的ML.NET再训练管道?如果有任何问题、功能要求或一般反馈,请在ML.NET工具(模型生成器和ML.NET CLI)GitHub repo中提交问题,让我们知道。
用Azure ML训练ML.NET模型一文首次出现在.NET博客上。