我認識很多數據科學家——我自己可能也是其中之一——他們通過 Jupyter Notebook 或某種 Python 開發環境在位於雲端的本地或虛擬 GPU 機器上工作。 作為專家 AI/ML 開發人員工作了 2 年,我就是這樣做的,同時在常規服務器或工作站上準備數據,並在 Azure 中使用 GPU 的虛擬機上運行訓練。
當然,我們都聽說過
但是,我最近發現了一種在我的工作中開始有效使用 Azure ML 的方法! 對細節感興趣?
主要秘密是
這樣做時,您可以通過使用 Azure ML 獲得以下好處:
- 您可以在方便的 IDE 中大部分時間在本地機器上工作,並且 僅將 GPU 用於模型訓練. 同時,訓練資源池可以自動調整到所需的負載,通過將最小節點數設置為0,可以在有訓練任務時“按需”自動啟動虛擬機。
- 您可以 將所有學習成果存儲在一個地方,包括實現的指標和生成的模型——不需要想出某種系統或命令來存儲所有結果。
- 在這種情況下, 幾個人可以在同一個項目上工作 - 他們可以使用同一個計算集群,所有的實驗都會排隊,他們也可以看到彼此的實驗結果。 一種這樣的情況是 在深度學習教學中使用 Azure ML如果不是給每個學生一個帶 GPU 的虛擬機,你可以創建一個集群,供所有人集中使用。 此外,具有模型準確性的一般結果表可以作為一個很好的競爭元素。
- 使用 Azure ML,您可以輕鬆地進行一系列實驗,例如, 超參數優化 - 只需幾行代碼即可完成,無需手動進行一系列實驗。
我希望我說服你嘗試 Azure ML! 以下是如何開始:
- 確保你已經安裝
Visual Studio代碼 , 以及擴展Azure 登錄 и天藍色機器學習 - 克隆存儲庫
https://github.com/CloudAdvocacy/AzureMLStarter - 它包含一些用於在 MNIST 數據集上訓練手寫數字識別模型的演示代碼。 - 在 Visual Studio Code 中打開克隆的存儲庫。
- 繼續閱讀!
Azure 機器學習工作區和 Azure 機器學習門戶
Azure ML 是圍繞概念組織的 工作區域 — 工作區。 數據可以存儲在工作區中,將實驗發送給它進行訓練,訓練結果也存儲在那裡——生成的指標和模型。 您可以通過以下方式查看工作區內的內容
您可以通過 Web 界面創建工作區
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml
與工作區相關的還有一些 計算資源 (計算). 創建用於訓練模型的腳本後,您可以 發送實驗執行 到工作區,並指定 計算目標 - 在這種情況下,腳本將被打包,在所需的計算環境中運行,然後實驗的所有結果將保存在工作區中,以供進一步分析和使用。
MNIST 的學習腳本
考慮經典問題
我們的存儲庫中有一個腳本 train_local.py
,我們使用 SkLearn 庫訓練最簡單的線性回歸模型。 當然,我明白這不是解決問題的最佳方法——我們以它為例,作為最簡單的。
該腳本首先從 OpenML 下載 MNIST 數據,然後使用該類 LogisticRegression
訓練模型,然後打印結果精度:
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size = 0.3, random_state = 42)
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))
print('Overall accuracy:', acc)
您可以在計算機上運行腳本並在幾秒鐘內得到結果。
在 Azure ML 中運行腳本
如果我們通過 Azure ML 運行訓練腳本,我們將有兩個主要優勢:
- 在任意計算資源上運行訓練,這通常比本地計算機更有效率。 同時,Azure ML 本身會負責將我們的腳本與當前目錄中的所有文件打包到一個 docker 容器中,安裝所需的依賴項,並將其發送以供執行。
- 將結果寫入 Azure ML 工作區內的單個註冊表。 要利用此功能,我們需要在腳本中添加幾行代碼來記錄結果精度:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('accuracy', acc)
except:
pass
調用相應版本的腳本 train_universal.py
(比上面寫的要狡猾一點,但不多)。 該腳本既可以在本地運行,也可以在遠程計算資源上運行。
要從 VS Code 在 Azure ML 中運行它,您需要執行以下操作:
-
確保 Azure 擴展已連接到你的訂閱。 從左側菜單中選擇 Azure 圖標。 如果您未連接,將在右下角顯示一條通知(
像這樣 ), 通過單擊您可以通過瀏覽器輸入。 您也可以點擊 Ctrl-Shift-P 調用 VS Code 命令行,然後鍵入 Azure 登錄. -
之後,在 Azure 部分(左側圖標)中,找到該部分 機器學習:
在這裡您應該看到工作區內的不同對象組:計算資源、實驗等。
- 轉到文件列表,右鍵單擊腳本
train_universal.py
並選擇 Azure ML:在 Azure 中作為試驗運行.
- 這之後會在 VS Code 的命令行區域出現一系列對話框:確認您正在使用的訂閱和 Azure ML 工作區,然後選擇 創建新實驗:
-
選擇創建新的計算資源 創建新計算:
- 計算 確定將在其上進行訓練的計算資源。 您可以選擇本地計算機或 AmlCompute 雲集群。 我建議創建一個可擴展的機器集群
STANDARD_DS3_v2
,最小機器數量為 0(最多 1 或更多,具體取決於您的胃口)。 這可以通過 VS Code 界面完成,或者之前通過機器學習門戶 .
- 計算 確定將在其上進行訓練的計算資源。 您可以選擇本地計算機或 AmlCompute 雲集群。 我建議創建一個可擴展的機器集群
-
接下來,您需要選擇一個配置 計算配置,它定義了為訓練創建的容器的參數,特別是所有必要的庫。 在我們的例子中,因為我們使用的是 Scikit Learn,所以我們選擇 學習網,然後按 Enter 鍵確認建議的庫列表。 如果您使用任何其他庫,則必須在此處指定它們。
-
這將打開一個窗口,其中包含描述實驗的 JSON 文件。 在其中,您可以更正一些參數 - 例如,實驗名稱。 之後點擊鏈接 提交實驗 就在這個文件裡面:
- 通過 VS Code 成功提交實驗後,在通知區域的右側,您將看到一個鏈接
Azure 機器學習門戶 ,您可以在其中跟踪實驗的狀態和結果。
隨後,您始終可以在該部分中找到它 實驗
- 如果之後您對代碼進行了一些更正或更改了參數,則重新啟動實驗會更快、更容易。 通過右鍵單擊文件,您將看到一個新的菜單項 重複上次運行 - 只需選擇它,實驗就會立即開始:
您始終可以在 Azure ML 門戶上找到所有啟動的指標結果,無需將它們寫下來。
現在你知道使用 Azure ML 運行實驗既簡單又無痛,並且你可以從中獲得很多好處。
但是你也可以看到缺點。 例如,運行腳本花費的時間明顯更長。 當然,將腳本打包到容器中部署到服務器上是需要時間的。 如果同時集群被削減到 0 個節點的大小,啟動虛擬機將花費更多的時間,當我們在像 MNIST 這樣的簡單任務上進行實驗時,這一切都是非常明顯的,這些任務在幾秒鐘內就解決了. 然而,在現實生活中,當訓練持續數小時,甚至數天或數週時,這額外的時間變得微不足道,特別是在計算集群可以提供更高性能的背景下。
接下來是什麼?
我希望在閱讀本文後,您能夠並且將會在您的工作中使用 Azure ML 來運行腳本、管理計算資源和集中存儲結果。 但是,Azure ML 可以為您帶來更多好處!
在工作區內,您可以存儲數據,從而為您的所有任務創建一個易於訪問的集中存儲庫。 此外,您可以不從 Visual Studio Code 運行實驗,而是使用 API - 如果您需要執行超參數優化並且需要使用不同參數多次運行腳本,這將特別有用。 此外,Azure ML 中內置了特殊技術
有用的資源
要了解有關 Azure ML 的更多信息,您可能會發現以下 Microsoft Learn 課程很有幫助:
來源: www.habr.com