![]() |
|---|
| 雲端中的數據科學:Azure ML SDK - Sketchnote by @nitya |
目錄:
數據科學家和人工智能開發者使用 Azure Machine Learning SDK 與 Azure Machine Learning 服務一起構建和運行機器學習工作流。您可以在任何 Python 環境中與該服務交互,包括 Jupyter Notebooks、Visual Studio Code 或您喜愛的 Python IDE。
SDK 的主要功能包括:
- 探索、準備和管理機器學習實驗中使用的數據集的生命周期。
- 管理雲端資源以進行監控、日誌記錄和組織機器學習實驗。
- 在本地或使用雲端資源(包括 GPU 加速的模型訓練)訓練模型。
- 使用自動化機器學習,該功能接受配置參數和訓練數據,並自動迭代算法和超參數設置以找到最佳模型進行預測。
- 部署網絡服務,將訓練好的模型轉換為可在任何應用程序中使用的 RESTful 服務。
了解更多關於 Azure Machine Learning SDK 的信息
在上一課中,我們學習了如何以低代碼/無代碼的方式訓練、部署和使用模型。我們使用了心臟衰竭數據集來生成心臟衰竭預測模型。在本課中,我們將使用 Azure Machine Learning SDK 完成相同的任務。
查看這裡了解心臟衰竭預測項目及數據集介紹。
為了簡化操作,我們將在 Jupyter Notebook 中工作。這意味著您已經擁有一個工作區和一個計算實例。如果您已經擁有工作區,可以直接跳到 2.3 筆記本創建部分。
如果沒有,請按照上一課中 2.1 創建 Azure ML 工作區 的指示創建工作區。
在我們之前創建的 Azure ML 工作區 中,進入計算菜單,您將看到不同的計算資源。
讓我們創建一個計算實例來提供 Jupyter Notebook。
- 點擊 + New 按鈕。
- 為您的計算實例命名。
- 選擇您的選項:CPU 或 GPU、虛擬機大小和核心數量。
- 點擊 Create 按鈕。
恭喜,您已成功創建計算實例!我們將在創建筆記本部分中使用此計算實例。
如果您尚未上傳數據集,請參考上一課中的 2.3 加載數據集 部分。
注意: 接下來的步驟,您可以選擇從頭創建一個新的筆記本,或者上傳我們之前創建的 筆記本 到您的 Azure ML Studio。要上傳,只需點擊 "Notebook" 菜單並上傳筆記本。
筆記本是數據科學過程中非常重要的一部分。它們可以用於進行探索性數據分析(EDA)、調用計算集群訓練模型、調用推理集群部署端點。
要創建筆記本,我們需要一個提供 Jupyter Notebook 實例的計算節點。返回 Azure ML 工作區 並點擊計算實例。在計算實例列表中,您應該看到我們之前創建的計算實例。
- 在 Applications 部分,點擊 Jupyter 選項。
- 勾選 "Yes, I understand" 框並點擊 Continue 按鈕。
- 這將在瀏覽器中打開一個新的標籤頁,顯示您的 Jupyter Notebook 實例。點擊 "New" 按鈕創建筆記本。
現在我們有了一個筆記本,可以開始使用 Azure ML SDK 訓練模型。
首先,如果您有任何疑問,請參考 Azure ML SDK 文檔。它包含了理解我們在本課中將看到的模塊所需的所有信息。
您需要使用以下代碼從配置文件加載 workspace:
from azureml.core import Workspace
ws = Workspace.from_config()這將返回一個表示工作區的 Workspace 類型的對象。接著,您需要使用以下代碼創建一個 experiment:
from azureml.core import Experiment
experiment_name = 'aml-experiment'
experiment = Experiment(ws, experiment_name)要從工作區獲取或創建實驗,您需要使用實驗名稱請求實驗。實驗名稱必須是 3-36 個字符,並以字母或數字開頭,只能包含字母、數字、下劃線和連字符。如果在工作區中找不到實驗,則會創建一個新的實驗。
現在,您需要使用以下代碼創建一個訓練用的計算集群。請注意,此步驟可能需要幾分鐘。
from azureml.core.compute import AmlCompute
aml_name = "heart-f-cluster"
try:
aml_compute = AmlCompute(ws, aml_name)
print('Found existing AML compute context.')
except:
print('Creating new AML compute context.')
aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3)
aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)
aml_compute.wait_for_completion(show_output = True)
cts = ws.compute_targets
compute_target = cts[aml_name]您可以通過數據集名稱從工作區獲取數據集,如下所示:
dataset = ws.datasets['heart-failure-records']
df = dataset.to_pandas_dataframe()
df.describe()要設置 AutoML 配置,請使用 AutoMLConfig 類。
如文檔所述,您可以使用許多參數進行配置。對於本項目,我們將使用以下參數:
experiment_timeout_minutes:實驗允許運行的最大時間(以分鐘為單位),超過此時間後實驗將自動停止並生成結果。max_concurrent_iterations:實驗允許的最大並發訓練迭代次數。primary_metric:用於確定實驗狀態的主要指標。compute_target:運行自動化機器學習實驗的 Azure Machine Learning 計算目標。task:要運行的任務類型。值可以是 'classification'、'regression' 或 'forecasting',具體取決於要解決的自動化機器學習問題類型。training_data:實驗中使用的訓練數據。它應包含訓練特徵和標籤列(可選的樣本權重列)。label_column_name:標籤列的名稱。path:Azure Machine Learning 項目文件夾的完整路徑。enable_early_stopping:是否啟用早期終止,如果短期內分數沒有改善則終止。featurization:指示是否應自動完成特徵化步驟,或者是否使用自定義特徵化。debug_log:用於寫入調試信息的日誌文件。
from azureml.train.automl import AutoMLConfig
project_folder = './aml-project'
automl_settings = {
"experiment_timeout_minutes": 20,
"max_concurrent_iterations": 3,
"primary_metric" : 'AUC_weighted'
}
automl_config = AutoMLConfig(compute_target=compute_target,
task = "classification",
training_data=dataset,
label_column_name="DEATH_EVENT",
path = project_folder,
enable_early_stopping= True,
featurization= 'auto',
debug_log = "automl_errors.log",
**automl_settings
)現在您已設置好配置,可以使用以下代碼訓練模型。此步驟可能需要長達一小時,具體取決於集群大小。
remote_run = experiment.submit(automl_config)您可以運行 RunDetails 小部件來顯示不同的實驗。
from azureml.widgets import RunDetails
RunDetails(remote_run).show()remote_run 是 AutoMLRun 類型的對象。此對象包含 get_output() 方法,該方法返回最佳運行及相應的擬合模型。
best_run, fitted_model = remote_run.get_output()您可以通過打印 fitted_model 查看最佳模型使用的參數,並使用 get_properties() 方法查看最佳模型的屬性。
best_run.get_properties()現在使用 register_model 方法註冊模型。
model_name = best_run.properties['model_name']
script_file_name = 'inference/score.py'
best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')
description = "aml heart failure project sdk"
model = best_run.register_model(model_name = model_name,
model_path = './outputs/',
description = description,
tags = None)保存最佳模型後,我們可以使用 InferenceConfig 類進行部署。InferenceConfig 表示用於部署的自定義環境的配置設置。AciWebservice 類表示部署為 Azure 容器實例上的網絡服務端點的機器學習模型。部署的服務由模型、腳本和相關文件創建。生成的網絡服務是一個負載均衡的 HTTP 端點,具有 REST API。您可以向此 API 發送數據並接收模型返回的預測。
模型使用 deploy 方法進行部署。
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import AciWebservice
inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())
aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
tags = {'type': "automl-heart-failure-prediction"},
description = 'Sample service for AutoML Heart Failure Prediction')
aci_service_name = 'automl-hf-sdk'
aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)
aci_service.wait_for_deployment(True)
print(aci_service.state)此步驟可能需要幾分鐘。
您可以通過創建樣本輸入來使用您的端點:
data = {
"data":
[
{
'age': "60",
'anaemia': "false",
'creatinine_phosphokinase': "500",
'diabetes': "false",
'ejection_fraction': "38",
'high_blood_pressure': "false",
'platelets': "260000",
'serum_creatinine': "1.40",
'serum_sodium': "137",
'sex': "false",
'smoking': "false",
'time': "130",
},
],
}
test_sample = str.encode(json.dumps(data))然後,您可以將此輸入發送到您的模型進行預測:
response = aci_service.run(input_data=test_sample)
response這應該輸出 '{"result": [false]}'。這表示我們傳送到端點的病人輸入生成了預測結果 false,即這個人不太可能會有心臟病發作。
恭喜!你剛剛使用 Azure ML SDK 成功消耗了在 Azure ML 上部署和訓練的模型!
NOTE: 完成專案後,記得刪除所有資源。
透過 SDK 還有許多其他事情可以做,但很遺憾,我們無法在這節課中全部涵蓋。不過好消息是,學會如何快速瀏覽 SDK 文件可以讓你在學習上走得更遠。查看 Azure ML SDK 文件,找到允許你建立管道的 Pipeline 類別。管道是一系列可以作為工作流程執行的步驟集合。
提示: 前往 SDK 文件,在搜尋欄中輸入關鍵字如 "Pipeline"。你應該可以在搜尋結果中找到 azureml.pipeline.core.Pipeline 類別。
在這節課中,你學會了如何使用 Azure ML SDK 在雲端訓練、部署和消耗模型來預測心臟衰竭風險。查看這份 文件 以獲取更多關於 Azure ML SDK 的資訊。試著使用 Azure ML SDK 建立你自己的模型。
免責聲明:
此文件已使用 AI 翻譯服務 Co-op Translator 翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤詮釋概不負責。
