这样的标准上海市疫情防控工作领导小组也好意思发布出来?

人民日报林治波社长发出灵魂拷问:你们是没有常识,还是没有良知?

惨烈的高峰防御战—“圣元春战役”打响!

母子乱伦:和儿子做了,我该怎么办?

一定在信仰的指导下抗击疫情《马克思主义信仰:战胜新冠肺炎疫情的内生力量》

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

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

Kinfey Lo 微软开发者MSDN 2022-11-16

点击上方蓝字

关注我们

(本文阅读时间:10分钟)

.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
  • 进行下载

    https://github.com/kinfey/HandsOnLab/tree/main/MLNetLab/tfnetcode/TF_DEEP_WIN_GPU_LearnDemo/image/flower_photos




训练

每个⼈会把数据训练看成⾮常重要的⼀环。在 .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.jsoncommand: | FILENAME=libtensorflow-gpu-linux-x86_64-2.5.0.tar.gz wget -q --no-check-certificatehttps://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:1experiment_name: tf-image-trainingenvironment:  build: path: . dockerfile_path: Dockerfilecompute: 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.0RUN 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看到的每次训练的内容
你也可以点击某次训练了解更多
这个例⼦并不是完美的算法,但也⾜矣说明问题了,当然你可以通过程序设定看看调整算法来提升精确度。
  • 获取代码
    https://github.com/kinfey/dotNETMLinAzureML
  • Azure CLI

    https://learn.microsoft.com/en-us/cli/azure/install-azurecli?ocid=AID3052907




模型部署

如果你对某次模型训练⽐较满意,你就可以选择把该次训练产⽣的模型注册,并部署到 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 全球大会!

相关链接
  • 免费 Azure 账号申请:

    https://azure.com/free

  • 学⽣免费 Azure 账号申请:

    https://aka.ms/studentgetazure

  • 了解 Azure ML:

    https://learn.microsoft.com/en-us/azure/machine-learning/overview-what-is-azure-machine-learning?ocid=AID3052907

  • 安装 Azure CLI:

    https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?ocid=AID3052907

  • 安装 Azure ML SDK v2:

    https://learn.microsoft.com/en-us/azure/machine-learning/how-to-configure-cli?tabs=public?ocid=AID3052907

  • 了解 ML.NET:

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

  • 了解 Tensorflow.NET:

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

  • 学习 Tensorflow.NET 的相关案例:

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


点击「阅读原文」报名 .NET 全球大会~

文章有问题?点此查看未经处理的缓存