头图

通过 .NET 完成机器学习的整个流程,这个平台可以!

f25b6c51b447fed80ae1b394b20622d7.png

.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、创建数据,给名字和对应的格式,这里的数据你可以进行下载

图片

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 获取代码

这里有几点需要注意的,因为在 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

4、compute:就是对应创建的算力

本地的 yaml 环境后,就可以在本地运行对应的脚本 (你必须安装 Azure CLI 环境,还有 Azure ML SDK v2 的扩展支持,这是必须的), 在本机环境中执行如下步骤:

az configure --defaults group=CUDAWSGroup workspace=CUDAWS
az ml job create --file AzureTrain.yml

5、experiment_name: 你可以给训练起⼀个名字,这个我觉得蛮好用的,可以针对不同的项目进行归类如果执行顺利,你就可以直接通过 Azure ML 开启你的 .NET 机器学习/深度学习训练了,下图是通过点击 job看到的每次训练的内容

图片

你也可以点击某次训练了解更多

图片

这个例子并不是完美的算法,但也足矣说明问题了,当然你可以通过程序设定看看调整算法来提升精确度。

模型部署

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

1、模型注册

选择 Models,并点击 Register,选择 From a job output

图片

选择你所需要的训练

图片

你就可以从 outputs 文件夹中选取对应的模型,作为部署

图片

部署成功后你就可以看到相关的模型信息

图片

当然你也可以不在 Azure 上部署,可以在 Jobs 把模型下载下来给不同平台使用

图片

2、在 Endpoints 中生成服务

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

Azure 上可以支持托管部署,和 Kubernetes 部署,这就看你需要什么方式。

总结

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

最后和大家剧透⼀下,全球的 .NET Conf 2022 下周就开始了,我会在 .NET Conf 2022 上和⼤家谈谈全场景的 .NET 深度学习开发(Deep Learning in .NET),北京时间 11 ⽉ 10 ⽇ 13:30-14:00 ,⼤家⼀定不要错过!

相关链接

参与2022年 .NET 全球大会~

微软技术生态官方平台。予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。

403 声望
968 粉丝
0 条评论
推荐阅读
选择 .NET 的 n 个理由
自从我们启动快速发展的 .NET 开源和跨平台项目以来,.NET 发生了很大变化。我们重新思考并完善了该平台,添加了专为性能和安全性而设计的新低级功能,以及以生产力为中心的高级功能。Span&lt;T&gt;、硬件内在函...

微软技术栈阅读 70

封面图
必看!.NET 7 在网络领域的四大更新
最新的 .NET 7 现已发布,我们想介绍一下其在网络领域所做的一些有趣的更改和添加。这篇文章我们将讨论 .NET 7 在 HTTP 空间、新 QUIC API、网络安全和 WebSockets 方面的变化。

微软技术栈1阅读 564

封面图
给 .NET 程序加个「设置开机启动」
前几天写了个「干掉微信只读」的程序,用来解决微信更新 3.9 以后收到文件会自动设置为只读的问题。微信这个设计可以有效地保证收到的原始文件安全性,避免被无意改动。但确实有违某些用户的习惯性操作。「干掉微...

边城1阅读 372

封面图
使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App
.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Co...

微软技术栈阅读 842

封面图
MASA Stack 1.0 发布会 倒计时一天
​扫描二维码,预约直播2023/1/16 14:00 与你不见不散发布会精彩看点抢先看MASA Stack 1.0 趋势篇世界技术圈在发什么?应用现代化宣布MASA Stack1.0版本正式发布MASA Stack 1.0 产品篇1.0产品架构介绍一站式现代化...

MASA技术团队阅读 601

MASA Stack 1.0 发布会圆满收官
云原生的演进跟大家一起回顾张磊老师在云原生开发者日上关于“云原生技术演进”的分享。介绍整个云原生生态的体现就是一套逻辑链路,就是当有一套概念和方法论之后,就会出现对应的技术和架构,我们在开源社区里就...

MASA技术团队阅读 401

用 Visual Studio 升级 .NET 项目
现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些项目类型仍正...

微软技术栈阅读 289

封面图

微软技术生态官方平台。予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。

403 声望
968 粉丝
宣传栏