.NET是个跨平台,全场景应用的开源技术。你有在用.NET做机器学习/深度学习的应用吗?如果从框架角度,ML.NET/Tensorflow.NET/不断在进步的TorchSharp通过几年的发展已经开始稳定,但如果在些型项目上,特别现在与云端环境的对接上都是非常重要的,毕竟云端可以帮助机器学习每步的流程进行优化,从数据管理,到训练,再到测试,以及部署都是非常重要的。
AzureML是非常优秀的机器学习/深度学习平台,涵盖整个机器学习/深度学习的所有流程。那这个时候有会问AzureML能跑传统的机器学习/深度学习项目都是基于Python,但能否可以跑.NET的机器学习呢?是否可以让.NET的机器学习项目和云端结合在起。今天就来给家展示下如何使用.NET结合AzureML跑图像分类。
从AzurePortal上构建个Azure机器学习服务环境,因为你需要用GPU,所以区域记得选择“WestUS2”
你可以通过点击StudioWebURL进AzureMachineLearningStudio
这个与编程语言无关的内容,但是也是非常重要的内容,数据是最重要的部分。通过AzureML你可以对数据进行管理,这就包括数据存储,版本管理,以及数据特征提取等工作。我们可以从AzureML门户的数据选项上,进行不同数据的管理。
1、选择左菜单栏的Assets,选择Data,选择Dataassets进行添加
3、从本地上传数据
记录下NamedassetURI的名字,这是azureml:flower_data:1
首先你需要在AzureML上构建你的算力,点击菜单“Compute”,再选择“Computeclusters”。通过创建,选择GPU选择使用K80(如果你需要其他算力,可以自动申请)
这里有几点需要注意的,因为在AzureML上,所有计算的算力都是基于Linux和GPU,所以在加载Tensorflow.NET的库的时候请使用Tensorflow.NETLinux的GPU版本。大家可以参考下:
1、input:对应的是输入的数据,可以对应在AzureML设定的数据,你可以选择文件夹和文件类型
3、environment:环境依赖,你可以直接设定容器,但我更喜欢把环境设置在Dockerfile上,这样你可以随时添加所需要的支持,如ML.NETCLI环境或者是些包等,以下是我的Dockerfile
FROMmcr.microsoft.com/dotnet/sdk:6.0RUNaptinstallwget4、compute:就是对应创建的算力
azconfigure--defaultsgroup=CUDAWSGroupworkspace=CUDAWSazmljobcreate--fileAzureTrain.yml5、experiment_name:你可以给训练起个名字,这个我觉得蛮好用的,可以针对不同的项目进行归类如果执行顺利,你就可以直接通过AzureML开启你的.NET机器学习/深度学习训练了,下图是通过点击job看到的每次训练的内容
你也可以点击某次训练了解更多
这个例子并不是完美的算法,但也足矣说明问题了,当然你可以通过程序设定看看调整算法来提升精确度。
如果你对某次模型训练比较满意,你就可以选择把该次训练产生的模型注册,并部署到endpoint,可以选择在本地用yaml完成,但有些小伙伴喜欢在Azure门户上用些手动化操作也可以
1、模型注册
选择Models,并点击Register,选择Fromajoboutput
选择你所需要的训练
你就可以从outputs文件夹中选取对应的模型,作为部署
当然你也可以不在Azure上部署,可以在Jobs把模型下载下来给不同平台使用
2、在Endpoints中生成服务
或者你需要在Azure上直接部署服务,这个时候你只需要点击Endpoints和对应服务关联就可以了。或者我更喜欢用AzureFunctions来完成该步骤,这个日后再和大家说说了。
Azure上可以支持托管部署,和Kubernetes部署,这就看你需要什么方式。
你可以看到在AzureML上,通过.NET把机器学习的整个流程都完成了。这也让各位.NET的开发人员和团队更有信心地采用.NET做机器学习/深度学习的项目。现在.NET机器学习不仅仅只是框架,也可以通过云端进行管理,是完整的解决方案。希望有更多小伙伴来做更多有趣的机器学习应用。
微软技术生态官方平台。予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。