CA周記 - 在 Azure ML 上用 .NET 跑機器學習

128a6e35deab545e3b3575dcc5dd8506.png

.NET 是一個跨平臺,全場景應用的開源技術。你有在用 .NET 做機器學習/深度學習的應用嗎?如果從框架角度,ML.NET / Tensorflow.NET /?不斷在進步的 TorchSharp 通過幾年的發展已經開始穩定,但如果在一些大型項目上,特別現在與云端環境的對接上都是非常重要的,畢竟云端可以幫助機器學習每一步的流程進行優化,從數據管理,到訓練,再到測試,以及部署都是非常重要的。

Azure ML 是非常優秀的機器學習/深度學習平臺,涵蓋整個機器學習/深度學習的所有流程。那這個時候有人會問 Azure ML 能跑傳統的機器學習/深度學習項目都是基于 Python,但能否可以跑 .NET 的機器學習呢?是否可以讓 .NET 的機器學習項目和云端結合在一起。今天我就來給大家展示一下,我是如何使用 .NET 結合 Azure ML 跑圖像分類的。

0

準備工作

從 Azure Portal 上構建一個 Azure 機器學習服務環境,因為你需要用 GPU,所以區域記得選擇 “West US2”

229a9df76383386badcb2b8ca4e3d5ab.png

創建成功后,你可以進入相關資源組,并記錄下剛才創建的 Resource Group 和 Azure ML Service Name

668f70ccd4fa20ed78ab8a05be463859.png

你可以通過點擊 Studio Web URL 進入 Azure Machine Learning Studio

31b6bcb3fef92c61ce79f584862e8e2b.png

1

從數據采集與整理開始

這個與編程語言無關的內容,但是也是非常重要的內容,數據是最重要的部分。通過 Azure ML 你可以對數據進行管理,這就包括數據存儲,版本管理,以及數據特征提取等工作。我們可以從 Azure ML 門戶的數據選項上,進行不同數據的管理。

1.選擇左菜單欄的 Assets ,選擇 Data,選擇 Data assets 進行添加

53326e41b200152bb3fc3b67b7fac1c9.png

2. 創建數據,給名字和對應的格式,這里的數據你可以通過該鏈接?https://github.com/kinfey/HandsOnLab/tree/main/MLNetLab/tfnetcode/TF_DEEP_WIN_GPU_LearnDemo/image/flower_photos?進行下載

fb3decc513b31b00cf03344a9c56c77b.png

3. 從本地上傳數據

e16a1cde9bc24cabc7f96f846d291882.png

4.上傳成功后,你可以看到相關信息

d2e4fa7360a57d709a853270636909f4.png

記錄下 Named asset URI 的名字,這里是 azureml:flower_data:1

2

訓練

每個人會把數據訓練看成非常重要的一環。在 .NET 中你可以選用?ML.NET?或者?TensorFlow.NET?/ TorchSharp 進行訓練,從很多文檔或者你只看到了 Python 的方式。我這里分享一下用 .NET 的方式。

首先你需要在 Azure ML 上構建你的算力,點擊菜單 “Compute”,再選擇“Compute clusters”。通過創建,選擇 GPU 選擇使用 K80 (如果你需要其他算力,可以自動申請)

3ec275c5c96d6aa9be618e6da0f7b41a.png

450ea9bd9a9734a970b13b42fe69ffd6.png

構建完成后,我這里需要把代碼進行調整,代碼我這里使用了?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.gzwget -q --no-check-certificate https://storage.googleapis.com/tensorflow/libtensorflow/${FILENAME}tar -C /usr/local -xzf ${FILENAME}ldconfig /usr/local/libcd codedotnet restoredotnet builddotnet run --dataPath ${{inputs.data_dir}} --outputPath outputs 
code:.
inputs:data_dir:type:uri_folderpath: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 看到的每次訓練的內容

124562f7d8a15f7285f7107854e1f1bf.png

你也可以點擊某次訓練了解更多

4ecfbd50fa57842bdf2bc2902a993c54.png

這個例子并不是完美的算法,但也足矣說明問題了,當然你可以通過程序設定看看調整算法來提升精確度

3

模型測試

你可以在程序中添加測試的樣例去看結果,這個會在以后的內容中和大家再說說

4

模型部署

如果你對某次模型訓練比較滿意,你就可以選擇把該次訓練產生的模型注冊,并部署到 endpoint,可以選擇在本地用 yaml 完成,但有些小伙伴喜歡在 Azure 門戶上用一些手動化操作也可以

1.模型注冊

選擇 Models , 并點擊 Register ,選擇 From a job input

bcd55cf6bfe9836aaee2af403ff1752b.png

選擇你所需要的訓練

2de5beae45c60d049bb09e2ebd5bca48.png

你就可以從 outputs 文件夾中選取對應的模型,作為部署

5d8d571c79c781b298955638226d3232.png

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

f5774544e06ce1f30fbe489687757d05.png

當然你也可以不在 Azure 上部署,可以在 Jobs 把模型下載下來給不同平臺使用

2eb0c214f7ce2ed79329cd6a4d341c24.png

2. 在 Endpoints 中生成服務

或者你需要在 Azure 上直接部署服務,這個時候你只需要點擊 Endpoints 和對應服務關聯就可以了。或者我更喜歡用 Azure Functions 來完成該步驟,這個日后再和大家說說了

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

00472274271e215863b7fcc6334a03ca.png

5

總結

你可以看到在 Azure ML 上,通過 .NET 把機器學習的整個流程都完成了。這也讓各位 .NET 的開發人員和團隊更有信心地采用 .NET 做機器學習/深度學習的項目。現在 .NET 機器學習不僅僅只是框架,也可以通過云端進行管理,是完整的解決方案。各位小伙伴請放膽使用。也希望有更多小伙伴來做更多有趣的機器學習應用。

最后和大家劇透一下 ,全球的 .NET Conf 2022 下周就開始了,我在 .NET Conf 2022 上,我會和大家談談全場景的 .NET 深度學習開發,具體時間北京時間 11 月 10 日 北京時間 13:30 - 14:00 ,大家一定不要錯過!(雖然是英文,但希望更位小伙伴也能上線大家)。下周約定大家不見不散

9529b6fbab1e29c67d93afe4b750b759.png

還有我們 12 月 3 日 和 12 月 4 日 的 .NET Conf 2022 中國也會開始了,有更多小伙伴們熟悉的 .NET 大神 。大家也一定不要錯過。

a30f7b0b6bb856c101c995ef61ad6c17.jpeg

相關資源

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周記往期回顧:

5bd21d8b748db1118a4e6512c8feb93b.jpeg

更多原創文章與資源共享

請關注Kinfey Techtalk

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS10 優化APP首次安裝網絡權限提示方案

我剛經歷了一場末日&#xff08;停電&#xff09;&#xff0c;特別是在你想寫文檔的時候。。。 言歸正傳&#xff0c;今天的問題是解決iOS10系統下首次按鈕APP彈出的網絡權限提示所帶來了問題以及優化。 起因 查了相關文章知道由于大陸工信部出臺的新規指出&#xff0c;應用在未…

su命令

從一個用戶切換到另一個用戶&#xff1a;su - ceshi(ceshi是用戶名) 查看當前用戶&#xff1a;whoami 在不切換用戶的情況執行另一個用戶的命令&#xff1a;例&#xff1a;su - -c "touch /tmp/111.txt" admin 若用戶沒有加目錄需要添加家目錄&#xff0c;并更改所有…

C語言基礎知識【數據類型】

C 數據類型1.在 C 語言中&#xff0c;數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間&#xff0c;以及如何解釋存儲的位模式。2.C 中的類型可分為以下幾種&#xff1a;序號 類型與描述1 基本類型&#xff1a;它們是算…

PS批量替換內容

在制作圖片物料的時候&#xff0c;有時會碰到需要制作大量內容格式一致&#xff0c;但部分文字或圖片不同的圖片&#xff0c;這里我們使用PS的變量功能 物料準備&#xff1a;準備好需要替換的圖片和文字&#xff0c;使用excel制作出需要替換的內容&#xff0c;第一行name和pic…

在 .NET 中執行 JavaScript 代碼

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;Jint 簡介如果您想在您的 .NET 程序中使用 Javascript&#xff0c;那么我推薦您使用 Jint。Jint 是適用于 .NET 的 開源 Javascript 解…

【本周面試題】第5周 - 開發工具相關

待整理轉載于:https://www.cnblogs.com/padding1015/p/10095424.html

JS 返回上一步(退回上一步上一個網頁)

鏈接式&#xff1a; <a href"javascript:history.go(-1)">返回上一步</a> <a href"<%Request.ServerVariables("HTTP_REFERER")%>">返回上一步</a> 按鈕式&#xff1a; <INPUT name"pclog" type&quo…

jmeter多用戶登錄跨線程組操作傳值

項目需求&#xff1a; 需要登錄兩個用戶A、B&#xff0c;用戶A操作完后會通知B&#xff0c;然后B再操作&#xff0c;B操作完結束或者再通知A。 實現思路&#xff1a; 1. 設置兩個線程組Ⅰ、Ⅱ&#xff0c;組Ⅰ添加cookie管理器&#xff0c;里面添加用戶A的操作&#xff1b;組Ⅱ…

手動修改美化7zip圖標 - 附替換文件

手動修改7zip圖標理論知識制作ico圖標文件替換資源重建圖標緩存效果圖替換文件7-Zip的自帶圖標是公認的丑&#xff0c;所以網上有很多7-Zip的圖標美化工具&#xff0c;用的最多的就是 7-Zip Theme Manager&#xff0c;自帶很多主題&#xff0c;但是最近我再使用7zTM修改圖標是卻…

.NET性能優化-復用StringBuilder

在之前的文章中&#xff0c;我們介紹了 dotnet 在字符串拼接時可以使用的一些性能優化技巧。比如&#xff1a;為StringBuilder設置 Buffer 初始大小使用ValueStringBuilder等等 不過這些都多多少少有一些局限性&#xff0c;比如StringBuilder還是會存在new StringBuilder()這樣…

如何使用vue組件搭建網頁并打包發布

vue組件化項目搭建及編譯打包發布引言開發環境開發環境介紹開發環境安裝使用模板創建項目編譯及打包發布引言 最近開始學習Vue&#xff0c;Vue 是一個前端框架&#xff0c;特點是數據綁定和組件化。網上很多教程&#xff0c;數據綁定和組件學習起來也都不困難&#xff0c;但是…

MyBatis 分頁插件 PageHelper

插件官網 簡介&#xff1a; 支持常見的 12 種數據庫。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等&#xff1b; 支持常見的RowBounds(PageRowBounds)&#xff0c;PageHelper.startPage 方法調用&#xff0c;Mapper 接口參數調用&#xff1b; 獲取maven配置 示例&…

Facebook揭秘其應用測試平臺,并開源核心技術

本周&#xff0c;Facebook讓一群記者參觀了它位于俄勒岡州普賴恩維爾市的數據中心&#xff0c;在這個過程中也展示了他們的一個移動應用測試實驗室&#xff0c;用來測試Facebook app、 Messenger 和Instagram。 目前 這個實驗室總共含有60個機架&#xff0c;每個機架上放置32臺…

責任鏈模式 職責鏈模式 Chain of Responsibility Pattern 行為型 設計模式(十七)

責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;職責鏈模式意圖 使多個對象都有機會處理請求&#xff0c;從而避免請求的發送者和接受者之間的耦合關系將這些對象連接成一條鏈&#xff0c;并沿著這條鏈傳遞請求&#xff0c;直到有一個對象處理它為止。責任…

YOLOv7 在 ML.NET 中使用 ONNX 檢測對象

本文介紹如何在 ML.NET 中使用 YOLOv7 的 ONNX 模型來檢測圖像中的對象。什么是 YOLOYOLO&#xff08;You Only Look Once&#xff09;是一種先進的實時目標檢測系統。它是一個在COCO數據集上預訓練的物體檢測架構和模型系列&#xff0c;其版本也是在不斷優化更新。2022年7月&a…

Vue中render: h = h(App)的含義

原文地址&#xff1a;Explanation for render: h > h(App) please 翻譯如下&#xff1a; render: h > h(App) 是下面內容的縮寫&#xff1a; render: function (createElement) {return createElement(App); }進一步縮寫為(ES6 語法)&#xff1a; render (createElem…

NppFTP小插件的使用

大家在Linux系統中配置運行環境時&#xff0c;一定會遇到相關配置文件的修改&#xff0c;雖說在Linux系統中可以使用vi,vim的命令進行文本編輯&#xff0c;但是操作起來還是沒有在Windows系統中用的爽&#xff0c;特別是操作大文本量的文件時。Notepad里提供了一個小插件&#…

『實戰』使用Excel催化劑二維碼功能批量生成帶不同圖案二維碼。

熟悉Excel催化劑的老讀者都知道&#xff0c;每逢圖書大促&#xff0c;筆者都會向出版社申請優惠碼優惠券來惠及廣大粉絲。當然公眾號上幫出版社推薦圖書&#xff0c;會有傭金回報&#xff0c;這也是筆者唯一能接受的推廣方式。公眾號自創立以來&#xff0c;沒有接過軟文&#x…

springboot ElasticSearch 簡單的全文檢索高亮

前陣子和張三豐聊天提到了es。這次正好有機會學習并使用 首先引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 配置文件 spring.data.…

JavaScriptSerializer類 對象序列化為JSON,JSON反序列化為對象

JavaScriptSerializer 類由異步通信層內部使用&#xff0c;用于序列化和反序列化在瀏覽器和 Web 服務器之間傳遞的數據。說白了就是能夠直接將一個C#對象傳送到前臺頁面成為javascript對象。要添加System.Web.Extensions.dll的引用。該類位于System.Web.Script.Serialization命…