.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.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.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 看到的每次訓練的內容
你也可以點擊某次訓練了解更多
這個例子并不是完美的算法,但也足矣說明問題了,當然你可以通過程序設定看看調整算法來提升精確度
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