CA周记|在 Azure ML 上用 .NET 跑机器学习

作者:Kinfey Lo - 微软云技术布道师

排版:Alan Wang

在这里插入图片描述
.NET 是一个跨平台,全场景应用的开源技术,你有在用 .NET 做机器学习/深度学习的应用吗?如果从框架角度,ML.NET、Tensorflow.NET,以及不断在进步的 TorchSharp 通过几年的发展已经趋于稳定,但如果在一些大型项目上,特别是现在与云端环境的对接上都是非常重要的,毕竟云端可以帮助机器学习每一步的流程进行优化,从数据管理,到训练,再到测试,以及部署都是非常重要的。

Azure ML 是非常优秀的机器学习/深度学习平台,涵盖整个机器学习/深度学习的所有流程。那这个时候有人会问,Azure ML 上跑的传统的机器学习/深度学习项目都是基于 Python,但能否可以跑 .NET 的机器学习呢?是否可以让 .NET 的机器学习项目和云端结合在一起?今天就来给大家展示一下,我是如何使用 .NET 结合 Azure ML 跑图像分类的。

准备工作

从 Azure Portal 上构建一个 Azure 机器学习服务环境,因为你需要用 GPU,所以区域记得选择 “West US2”
在这里插入图片描述
创建成功后,你可以进入相关资源组,并记录下刚才创建的 Resource Group 和 Azure ML Service Name
在这里插入图片描述
你可以通过点击 Studio Web URL 进入 Azure Machine Learning Studio
在这里插入图片描述

一. 从数据采集与整理开始

这部分内容与编程语言无关,但也是非常重要的内容,因为数据是最重要的部分。通过 Azure ML 你可以对数据进行管理,这就包括数据存储、版本管理,以及数据特征提取等工作。我们可以从 Azure ML 门户的数据选项上,进行不同数据的管理。

  1. 选择左菜单栏的 Assets ,选择 Data,选择 Data assets 进行添加
    在这里插入图片描述
  2. 创建数据,设置名字和对应的格式,这里的数据你可以通过该链接 https://github.com/kinfey/HandsOnLab/tree/main/MLNetLab/tfnetcode/TF_DEEP_WIN_GPU_LearnDemo/image/flower_photos 进行下载
    在这里插入图片描述
  3. 从本地上传数据
    在这里插入图片描述
    上传成功后,你可以看到相关信息
    在这里插入图片描述
    记录下 Named asset URI 的名字,这里是 azureml:flower_data:1

二. 训练

我们都会把数据训练看成非常重要的一环。在 .NET 中你可以选用 ML.NET、TensorFlow.NET,或者 TorchSharp 进行训练。很多文档中会使用 Python 进行训练,而我将在这里分享一下使用 .NET 训练的方式。

首先你需要在 Azure ML 上构建你的算力,点击菜单 “Compute”,再选择“Compute clusters”。通过创建,选择 GPU 选择使用 K80(如果你需要其他算力,可以自动申请)
在这里插入图片描述
在这里插入图片描述
构建完成后,这里需要把代码进行调整,代码我这里使用了 Tensorflow.NET 的图像分类的示例,并做了一下调整,大家可以参考我的 GitHub 获取代码 https://github.com/kinfey/dotNETMLinAzureML

这里有几点需要注意的,因为在 Azure ML 上,所有计算的算力都是基于 Linux 和 GPU,所以在加载 Tensorflow.NET 的库时请使用 Tensorflow.NET Linux 的 GPU 版本。大家可以参考

<PackageReference Include="SciSharp.TensorFlow.Redist-Linux-GPU" Version="2.5.0" />
<PackageReference Include="TensorFlow.Keras" Version="0.7.0" />
<PackageReference Include="TensorFlow.NET" Version="0.70.1" />

要让 .NET 在 Azure ML 上跑,我们需要有一个容器环境结合算力一起跑。这就好比作,你需要一个 .NET 的运行环境然后加上算力。

在 Azure ML 上,你可以通过本地配置 yaml 去设定相关的内容,包括需要执行的语句,也包括数据存储相关的路径、运行环境,以及所需要的算力等。如下所示

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: |
  FILENAME=libtensorflow-gpu-linux-x86_64-2.5.0.tar.gz
  wget -q --no-check-certificate https://storage.googleapis.com/tensorflow/libtensorflow/${FILENAME}
  tar -C /usr/local -xzf ${FILENAME}
  ldconfig /usr/local/lib
  cd code
  dotnet restore
  dotnet build
  dotnet run --dataPath ${{inputs.data_dir}} --outputPath outputs 
code: .
inputs:
  data_dir:
    type: uri_folder
    path: azureml:flower_data:1
experiment_name: tf-image-training
environment: 
  build:
    path: .
    dockerfile_path: Dockerfile
compute: azureml:GPUCluster

补充说明

  1. input:对应的是输入的数据,可以对应在 Azure ML 设定的数据,你可以选择文件夹和文件类型

  2. command: 对应的是你要执行的文件, 因为 Tensorflow.NET 需要 libtensorflow,你必须去做相关的下载,并在运行环境中设置好

  3. environment: 环境依赖,你可以直接设定容器,但我更喜欢把环境设置在 Dockerfile 上,这样你可以随时添加所需要的支持,如 ML.NET CLI 环境或者是一些包等,以下是我的 Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:6.0
RUN  apt install wget
  1. compute:就是对应创建的算力

搭建好本地的 yaml 环境后,就可以在本地运行对应的脚本(你必须安装 Azure CLI 环境,还有 Azure ML SDK v2 的扩展支持,这是必须的。具体你可以点击该地址 https://learn.microsoft.com/en-us/cli/azure/install-azure-cli 了解更多),在本机环境中执行如下步骤

az configure --defaults group=CUDAWSGroup workspace=CUDAWS 
az ml job create --file AzureTrain.yml
  1. experiment_name: 你可以给训练起一个名字,这个我觉得蛮好用的,可以针对不同的项目进行归类

如果执行顺利,你就可以直接通过 Azure ML 开启你的 .NET 机器学习/深度学习训练了,下图是通过点击 job 看到的每次训练的内容
在这里插入图片描述
你也可以点击某次训练了解更多
在这里插入图片描述
这个例子并不是完美的算法,但也足以说明问题了,当然你可以通过程序设定看看调整算法来提升精确度

三. 模型测试

你可以在程序中添加测试样例去看结果,这个会在以后的内容中和大家再说说

四. 模型部署

如果你对某次模型训练比较满意,你就可以选择注册该次训练产生的模型,并部署到 endpoint,可以选择在本地用 yaml 完成,但有些小伙伴喜欢在 Azure 门户上用一些手动化操作也可以

  1. 模型注册

选择 Models,并点击 Register ,选择 From a job input
在这里插入图片描述
选择你所需要的训练
在这里插入图片描述
你就可以从 outputs 文件夹中选取对应的模型,进行部署
在这里插入图片描述
部署成功后你就可以看到相关的模型信息
在这里插入图片描述

当然你也可以选择不在 Azure 上部署,可以在 Jobs 把模型下载下来给不同平台使用
在这里插入图片描述
2. 在 Endpoints 中生成服务

或者你需要在 Azure 上直接部署服务,这个时候你只需要点击 Endpoints 和对应服务关联就可以了。或者我更喜欢用 Azure Functions 来完成该步骤,这个日后再和大家说说

Azure 上可以支持托管部署,和 Kubernetes 部署,这就看你需要什么方式
在这里插入图片描述

总结

你可以看到,我们使用 .NET 在 Azure ML 上完成了机器学习的整个流程。这也让各位 .NET 开发人员和团队更有信心地采用 .NET 做机器学习/深度学习的项目。现在 .NET 机器学习不仅仅只是框架,也可以通过云端进行管理,是一套完整的解决方案。各位小伙伴可以放心大胆地使用。也希望有更多小伙伴做出更多有趣的机器学习应用。

相关链接

  1. 免费 Azure 账号申请
  2. 学生免费 Azure 账号申请
  3. 了解 Azure ML
  4. 安装 Azure CLI
  5. 安装 Azure ML SDK v2
  6. 了解 ML.NET
  7. 了解 Tensorflow.NET
  8. 学习 Tensorflow.NET 的相关案例
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值