如何克服恐懼並開始使用 Azure 機器學習

我認識很多數據科學家——我自己可能也是其中之一——他們通過 Jupyter Notebook 或某種 Python 開發環境在位於雲端的本地或虛擬 GPU 機器上工作。 作為專家 AI/ML 開發人員工作了 2 年,我就是這樣做的,同時在常規服務器或工作站上準備數據,並在 Azure 中使用 GPU 的虛擬機上運行訓練。

當然,我們都聽說過 Azure機器學習 — 一個專門的機器學習雲平台。 然而,在第一眼看到之後 介紹性文章, Azure ML 似乎會給你帶來比它解決的問題更多的問題。 例如,在上面提到的教程中,Azure ML 的訓練是從 Jupyter Notebook 啟動的,而訓練腳本本身建議在其中一個單元格中創建和編輯為文本文件——同時不使用自動完成、語法突出顯示,以及其他正常開發環境的優點。 為此,我們已經有很長一段時間沒有在工作中認真使用 Azure ML 了。

但是,我最近發現了一種在我的工作中開始有效使用 Azure ML 的方法! 對細節感興趣?

如何克服恐懼並開始使用 Azure 機器學習

主要秘密是 Azure ML 的 Visual Studio Code 擴展. 它允許您直接在 VS Code 中開發訓練腳本,充分利用環境 - 您甚至可以在本地運行腳本,然後只需單擊幾下即可將其發送到 Azure ML 集群中進行訓練。 方便,不是嗎?

這樣做時,您可以通過使用 Azure ML 獲得以下好處:

  • 您可以在方便的 IDE 中大部分時間在本地機器上工作,並且 僅將 GPU 用於模型訓練. 同時,訓練資源池可以自動調整到所需的負載,通過將最小節點數設置為0,可以在有訓練任務時“按需”自動啟動虛擬機。
  • 您可以 將所有學習成果存儲在一個地方,包括實現的指標和生成的模型——不需要想出某種系統或命令來存儲所有結果。
  • 在這種情況下, 幾個人可以在同一個項目上工作 - 他們可以使用同一個計算集群,所有的實驗都會排隊,他們也可以看到彼此的實驗結果。 一種這樣的情況是 在深度學習教學中使用 Azure ML如果不是給每個學生一個帶 GPU 的虛擬機,你可以創建一個集群,供所有人集中使用。 此外,具有模型準確性的一般結果表可以作為一個很好的競爭元素。
  • 使用 Azure ML,您可以輕鬆地進行一系列實驗,例如, 超參數優化 - 只需幾行代碼即可完成,無需手動進行一系列實驗。

我希望我說服你嘗試 Azure ML! 以下是如何開始:

Azure 機器學習工作區和 Azure 機器學習門戶

Azure ML 是圍繞概念組織的 工作區域 — 工作區。 數據可以存儲在工作區中,將實驗發送給它進行訓練,訓練結果也存儲在那裡——生成的指標和模型。 您可以通過以下方式查看工作區內的內容 Azure 機器學習門戶 - 從那裡您可以執行許多操作,從加載數據到監控實驗和部署模型。

您可以通過 Web 界面創建工作區 Azure 門戶 (見。 分步說明),或使用 Azure CLI 命令行 (路線):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

與工作區相關的還有一些 計算資源 (計算). 創建用於訓練模型的腳本後,您可以 發送實驗執行 到工作區,並指定 計算目標 - 在這種情況下,腳本將被打包,在所需的計算環境中運行,然後實驗的所有結果將保存在工作區中,以供進一步分析和使用。

MNIST 的學習腳本

考慮經典問題 手寫數字識別 使用 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 中運行它,您需要執行以下操作:

  1. 確保 Azure 擴展已連接到你的訂閱。 從左側菜單中選擇 Azure 圖標。 如果您未連接,將在右下角顯示一條通知(像這樣), 通過單擊您可以通過瀏覽器輸入。 您也可以點擊 Ctrl-Shift-P 調用 VS Code 命令行,然後鍵入 Azure 登錄.

  2. 之後,在 Azure 部分(左側圖標)中,找到該部分 機器學習:

如何克服恐懼並開始使用 Azure 機器學習
在這裡您應該看到工作區內的不同對象組:計算資源、實驗等。

  1. 轉到文件列表,右鍵單擊腳本 train_universal.py 並選擇 Azure ML:在 Azure 中作為試驗運行.

如何克服恐懼並開始使用 Azure 機器學習

  1. 這之後會在 VS Code 的命令行區域出現一系列對話框:確認您正在使用的訂閱和 Azure ML 工作區,然後選擇 創建新實驗:

如何克服恐懼並開始使用 Azure 機器學習
如何克服恐懼並開始使用 Azure 機器學習
如何克服恐懼並開始使用 Azure 機器學習

  1. 選擇創建新的計算資源 創建新計算:

    • 計算 確定將在其上進行訓練的計算資源。 您可以選擇本地計算機或 AmlCompute 雲集群。 我建議創建一個可擴展的機器集群 STANDARD_DS3_v2,最小機器數量為 0(最多 1 或更多,具體取決於您的胃口)。 這可以通過 VS Code 界面完成,或者之前通過 機器學習門戶.

    如何克服恐懼並開始使用 Azure 機器學習

  2. 接下來,您需要選擇一個配置 計算配置,它定義了為訓練創建的容器的參數,特別是所有必要的庫。 在我們的例子中,因為我們使用的是 Scikit Learn,所以我們選擇 學習網,然後按 Enter 鍵確認建議的庫列表。 如果您使用任何其他庫,則必須在此處指定它們。

    如何克服恐懼並開始使用 Azure 機器學習
    如何克服恐懼並開始使用 Azure 機器學習

  3. 這將打開一個窗口,其中包含描述實驗的 JSON 文件。 在其中,您可以更正一些參數 - 例如,實驗名稱。 之後點擊鏈接 提交實驗 就在這個文件裡面:

如何克服恐懼並開始使用 Azure 機器學習

  1. 通過 VS Code 成功提交實驗後,在通知區域的右側,您將看到一個鏈接 Azure 機器學習門戶,您可以在其中跟踪實驗的狀態和結果。

如何克服恐懼並開始使用 Azure 機器學習
隨後,您始終可以在該部分中找到它 實驗 Azure 機器學習門戶,或在部分 Azure機器學習 在實驗列表中:

如何克服恐懼並開始使用 Azure 機器學習

  1. 如果之後您對代碼進行了一些更正或更改了參數,則重新啟動實驗會更快、更容易。 通過右鍵單擊文件,您將看到一個新的菜單項 重複上次運行 - 只需選擇它,實驗就會立即開始:

如何克服恐懼並開始使用 Azure 機器學習
您始終可以在 Azure ML 門戶上找到所有啟動的指標結果,無需將它們寫下來。

現在你知道使用 Azure ML 運行實驗既簡單又無痛,並且你可以從中獲得很多好處。

但是你也可以看到缺點。 例如,運行腳本花費的時間明顯更長。 當然,將腳本打包到容器中部署到服務器上是需要時間的。 如果同時集群被削減到 0 個節點的大小,啟動虛擬機將花費更多的時間,當我們在像 MNIST 這樣的簡單任務上進行實驗時,這一切都是非常明顯的,這些任務在幾秒鐘內就解決了. 然而,在現實生活中,當訓練持續數小時,甚至數天或數週時,這額外的時間變得微不足道,特別是在計算集群可以提供更高性能的背景下。

接下來是什麼?

我希望在閱讀本文後,您能夠並且將會在您的工作中使用 Azure ML 來運行腳本、管理計算資源和集中存儲結果。 但是,Azure ML 可以為您帶來更多好處!

在工作區內,您可以存儲數據,從而為您的所有任務創建一個易於訪問的集中存儲庫。 此外,您可以不從 Visual Studio Code 運行實驗,而是使用 API - 如果您需要執行超參數優化並且需要使用不同參數多次運行腳本,這將特別有用。 此外,Azure ML 中內置了特殊技術 超級驅動器,它允許您對超參數進行更棘手的搜索和優化。 我將在下一篇文章中討論這些可能性。

有用的資源

要了解有關 Azure ML 的更多信息,您可能會發現以下 Microsoft Learn 課程很有幫助:

來源: www.habr.com

添加評論