关于.net:通过-NET-完成机器学习的整个流程这个平台可以

145次阅读

共计 3458 个字符,预计需要花费 9 分钟才能阅读完成。

.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,⼤家⼀定不要错过!

相干链接

  • 收费 Azure 账号申请
  • 学生收费 Azure 账号申请
  • 理解 Azure ML
  • 装置 Azure CLI
  • 装置 Azure ML SDK v2
  • 理解 ML.NET
  • 理解 Tensorflow.NET
  • 学习 Tensorflow.NET 的相干案例

参加 2022 年 .NET 寰球大会~

正文完
 0