ca周记-在azureml上用.net跑机器学习

dotNET跨平台 dotNET跨平台     2022-12-06     317

关键词:

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

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

0

准备工作

从 Azure Portal 上构建一个 Azure 机器学习服务环境,因为你需要用 GPU,所以区域记得选择 “West US2”

创建成功后,你可以进入相关资源组,并记录下刚才创建的 Resource Group 和 Azure ML Service Name

你可以通过点击 Studio Web URL 进入 Azure Machine Learning Studio

1

从数据采集与整理开始

这个与编程语言无关的内容,但是也是非常重要的内容,数据是最重要的部分。通过 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. 从本地上传数据

4.上传成功后,你可以看到相关信息

记录下 Named asset URI 的名字,这里是 azureml:flower_data:1

2

训练

每个人会把数据训练看成非常重要的一环。在 .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. 1.input:对应的是输入的数据,可以对应在 Azure ML 设定的数据,你可以选择文件夹和文件类型

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

  3. 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 看到的每次训练的内容

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

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

3

模型测试

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

4

模型部署

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

1.模型注册

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

选择你所需要的训练

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

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

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

2. 在 Endpoints 中生成服务

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

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

5

总结

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

最后和大家剧透一下 ,全球的 .NET Conf 2022 下周就开始了,我在 .NET Conf 2022 上,我会和大家谈谈全场景的 .NET 深度学习开发,具体时间北京时间 11 月 10 日 北京时间 13:30 - 14:00 ,大家一定不要错过!(虽然是英文,但希望更位小伙伴也能上线大家)。下周约定大家不见不散

还有我们 12 月 3 日 和 12 月 4 日 的 .NET Conf 2022 中国也会开始了,有更多小伙伴们熟悉的 .NET 大神 。大家也一定不要错过。

相关资源

1.免费 Azure 账号申请 

https://azure.com/free

2.学生免费 Azure 账号申请 

 https://aka.ms/studentgetazure

3.了解 Azure ML 

https://learn.microsoft.com/en-us/azure/machine-learning/overview-what-is-azuremachine-learning

4.安装 Azure CLI 

https://learn.microsoft.com/en-us/cli/azure/install-azure-cli

5.安装 Azure ML SDK v2

https://learn.microsoft.com/en-us/azure/machine-learning/how-to-configurecli?tabs=public

6.了解 ML.NET 

https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet

7.了解 Tensorflow.NET 

https://github.com/SciSharp/TensorFlow.NET

8.学习 Tensorflow.NET 的相关案例 

https://github.com/SciSharp/SciSharp-Stack-Examples

CA周记往期回顾:


更多原创文章与资源共享

请关注Kinfey Techtalk

在本地运行 Azure 机器学习服务管道

...布时间】:2019-06-1218:27:21【问题描述】:我正在使用带有azureml-sdkpython库的Azure机器学习服务。我使用的是azureml.core1.0.8版我正在关注这个https://docs.microsoft.com/en-us/azure/machin 查看详情

ca周记-.netmauiingcr月报(2022年8月)

.NETMAUI正式版本发布已经三个月了,有小伙伴希望我们有一些关于.NETMAUI相关的本地化内容以及开源项目介绍,接下来从8月开始,我希望用月报的形式和大家分享.NETMAUI在中国的活动,学习资源,优秀的开源项... 查看详情

Azure 机器学习分类

...6-04-0320:15:00【问题描述】:有没有一种算法可以用来训练AzureML来识别图像。假设我想标记我收藏中包含汽车的任何图片。有没有办法使用AzureML算法和工具集来做到这一点?谢谢【问题讨论】:【参考方案1】:您可以在OpenCV库中... 查看详情

[机器学习]第二周记录

这篇记录的内容来自于AndrewNg教授在coursera网站上的授课。  1.多元线性回归(multivariatelinearregression):h函数:$h_ heta(x)= heta_0+sum_i=1^n heta_ix_i$为方便起见,每个样本的维度都设为n+1维,每一维都向后延一位,第一维是1。则$$h... 查看详情

ca周记-用visualstudiocode做基于.netmaui跨平台移动应用开发

自2010年以来,移动应用开发是非常热门的一个方向,从技术上我们经历了原生应用开发、基于H5的WebApp、混合模式的移动应用开发,再到跨平台移动应用开发。.NET不仅是一个跨平台的应用,也是一个跨应用场景的... 查看详情

在 AzureML 中部署模型时如何将参数传递给评分文件

】在AzureML中部署模型时如何将参数传递给评分文件【英文标题】:HowtopassargumentstoscoringfilewhendeployingaModelinAzureML【发布时间】:2020-06-2312:06:15【问题描述】:我正在使用PythonSDK将经过训练的模型部署到Azure机器学习上的ACI端点。... 查看详情

如何深入了解 AzureML 端点部署的异常和日志记录

】如何深入了解AzureML端点部署的异常和日志记录【英文标题】:HowtogetinsightsinexceptionsandloggingofAzureMLendpointdeployment【发布时间】:2020-06-2314:06:42【问题描述】:由于我的InferenceConfig中有错误的score.py文件,Model.Deploy无法使用ACI进... 查看详情

从 azureml studio 中删除环境

】从azuremlstudio中删除环境【英文标题】:Deletingenvironmentsfromazuremlstudio【发布时间】:2020-12-0704:42:56【问题描述】:如何从azure机器学习工作区中删除环境?我可以创建并列出它们,但不知道如何删除它们?【问题讨论】:您要... 查看详情

安排 Azure 机器学习计算实例

...nbook的azure自动化解决方案似乎一般适用于VM,但不适用于azureML。解决方案可以是脚本或ML管道。【问题讨论】:【参考方案1】:计算实例是一种Pa 查看详情

周记(第三周)

1.在看书籍和视频学习中成功调试了Java环境和eclipse,并且在eclipse中完成了helloWorld.Java并且在javac中完成了helloworld.java,每天依然坚持打字的训练,并且不间断地学习java语言和一些相关的知识,问题暂时还没有遇到特别难的,因... 查看详情

来了,周记篇二

  这周学习了UI测试,虽然刚开始没有一次性完成,可是后来还是在不断的努力中完成了测试。  通过这次对测试的学习,以后会更加努力的学习。学习并不是想象中那么简单,但是把学习当成一件快乐的事情来做... 查看详情

java入门学习周记week01

0.我为什么要写周记作为一名Java初学者,我深知总结复习的重要性。我认为学习就是一个积累的过程。所以我决定在这里记录下我每周学习的内容和一些总结,为以后的自己提供一些参考。1.Java语言跨平台原理平台:指的是操作... 查看详情

java学习周记week03

一.继承1.什么叫继承?继承是面向对象的三大特征之一。在程序中,继承描述的是类与类之间的关系,通过继承多个类之间形成一种关系体系。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出的类被称... 查看详情

如何在 Web 服务 Azure 机器学习工作室中执行多行

...ingStudio【发布时间】:2018-06-1722:03:07【问题描述】:我在AzureML工作室中创建了一个模型。我部署了网络服务。现在,我知道如何一次检查一条记录,但是如何加载csv文件并让算法遍历所有记录?如果我点击批量执行-它会要求我... 查看详情

.Net 的监督机器学习

】.Net的监督机器学习【英文标题】:SupervisedMachineLearningfor.Net【发布时间】:2017-02-2108:34:56【问题描述】:我有一个问题,我们的用户每天都会收到一个帐户的余额,并根据余额执行一项操作。鉴于历史余额列表和由此产生的行... 查看详情

每周专业学习周记-1(代码片段)

每周专业学习周记-1标签(空格分隔):周记说明:接下来的每一周都将会跟新我的专业学习周记,内容包括代码+总结。目前主要除了课程内的《数据结构与算法》课程之外,还有Python语言学习,Python作为现在比较热门并且易入... 查看详情

从 Azure 机器学习运行注册模型,无需下载到本地文件

...localfile【发布时间】:2021-03-1418:31:15【问题描述】:使用azureml.core实验在远程计算上训练模型,如下所示:experiment=Experiment(ws,name=experiment_name)src=Scr 查看详情

提高 Azure 机器学习工作区的处理能力

...布时间】:2017-02-2312:28:03【问题描述】:有没有办法提高AzureML的处理能力?我已经在一个庞大的数据集(8000多张视网膜图像)上部署了一个神经网络,而Azure正在花费大量的时间来运行该程序。是否可以从虚拟机部署ML工作区,... 查看详情