建立 Azure Machine Learning 計算執行個體

適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)

了解如何在 Azure Machine Learning 工作區中建立計算執行個體

請在雲端中使用計算執行個體來作為已完整設定和完全受控的開發環境。 如果是開發或測試,您也可以使用執行個體作為定型計算目標。 計算執行個體可以平行執行多個作業,並具有作業佇列。 在開發環境中,無法與您工作區中的其他使用者共用計算執行個體。

在本文中,您將了解如何建立計算執行個體。 如需管理啟動、停止、重新啟動、刪除計算執行個體的步驟,請參閱管理 Azure Machine Learning 計算執行個體

您也可以使用設定指令碼,以您自己的自訂環境建立計算執行個體。

計算執行個體可在虛擬網路環境中安全地執行作業,而無須企業開啟 SSH 連接埠。 作業會在容器化環境中執行,並在 Docker 容器中封裝模型的相依性。

注意

本文在某些範例中使用 CLI v2。 如果您仍在使用 CLI v1,請參閱建立 Azure Machine Learning 計算叢集 CLI v1

必要條件

  • Azure Machine Learning 工作區。 如需詳細資訊,請參閱建立 Azure Machine Learning 工作區。 在儲存體帳戶中,必須啟用 [允許儲存體帳戶金鑰存取] 選項,才能成功建立計算執行個體。

選擇您用於其他必要條件的環境的索引標籤。

  • 若要使用 Python SDK,請使用工作區設定開發環境。 設定環境之後,連結至您的 Python 指令碼中的工作區:

    適用於Python SDK azure-ai-ml v2 (目前)

    執行此程式碼以連線至您的 Azure ML 工作區。

    在下方的程式碼中替換為您的訂閱識別碼、資源群組名稱和工作區名稱。 若要尋找這些值:

    1. 登入 Azure Machine Learning Studio
    2. 開啟您要使用的工作區。
    3. 在右上方的 Azure Machine Learning 工作室工具列中,選取您的工作區名稱。
    4. 將工作區、資源群組和訂閱識別碼的值複製到程式碼。
    5. 如果您使用 Studio 中的筆記本,則須複製值、關閉區域並貼上,然後返回複製下一個值。
    # Enter details of your AML workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AML_WORKSPACE_NAME>"
    # get a handle to the workspace
    from azure.ai.ml import MLClient
    from azure.identity import DefaultAzureCredential
    
    ml_client = MLClient(
        DefaultAzureCredential(), subscription_id, resource_group, workspace
    )

    ml_client 是工作區的處理常式,用來管理其他資源和作業。

建立​​

估計時間:約 5 分鐘。

建立計算執行個體是工作區的一次性程序。 您可以將計算重複使用於開發工作站,或作為訓練用的計算目標。 您可以將多個計算執行個體附加至工作區。

適用於計算執行個體建立的專用核心每個區域、VM 系列配額與總計區域配額會統一,並與 Azure Machine Learning 定型計算叢集配額共用。 停止計算執行個體並不會釋放配額,以確保您能夠重新啟動計算執行個體。 建立計算執行個體之後,就無法變更其虛擬機器大小。

建立計算執行個體的最快方式是遵循建立開始使用所需的資源

或使用下列範例,建立具有更多選項的計算執行個體:

適用於Python SDK azure-ai-ml v2 (目前)

# Compute Instances need to have a unique name across the region.
# Here we create a unique name with current datetime
from azure.ai.ml.entities import ComputeInstance, AmlCompute
import datetime

ci_basic_name = "basic-ci" + datetime.datetime.now().strftime("%Y%m%d%H%M")
ci_basic = ComputeInstance(name=ci_basic_name, size="STANDARD_DS3_v2")
ml_client.begin_create_or_update(ci_basic).result()

如需此範例中所使用的類別、方法和參數的詳細資訊,請參閱下列參考文件:

您也可以使用 Azure Resource Manager 範本來建立計算執行個體。

設定閒置關機

若要避免已開啟但處於非使用中的計算執行個體產生費用,您可以設定計算執行個體因為閒置而關機的時間。

如果符合下列條件,計算執行個體就會被視為非作用中:

  • 無作用中的 Jupyter 核心工作階段 (這表示並未透過 Jupyter、JupyterLab 或 Interactive Notebooks 使用筆記本)
  • 沒有作用中的 Jupyter 終端機工作階段
  • 沒有作用中 Azure Machine Learning 執行或實驗
  • 無 SSH 連線
  • 沒有 VS Code 連線,您必須關閉 VS Code 連線,計算執行個體才會被視為非作用中。 如果 VS Code 偵測到已 3 小時沒有活動,工作階段就會自動終止。
  • 計算上沒有執行任何自訂應用程式

如果有任何自訂應用程式正在執行,計算執行個體就不會被視為閒置。 非作用時間也有一些基本限制,計算執行個體處於非作用狀態的時間最短必須為 15 分鐘,最長為三天。

此外,如果計算執行個體已經閒置一段時間,而且閒置關機設定更新為比目前閒置持續時間短的時間,則閒置時間時鐘會重設為 0。 例如,如果運算執行個體已經閒置 20 分鐘,而關機設定更新為 15 分鐘,則閒置時間時鐘會重設為 0。

重要

如果計算執行個體也設定了 [受控識別],除非受控識別有 Azure Machine Learning 工作區的 [參與者] 存取權,否則計算執行個體不會因為閒置而關機。 如需指派權限的詳細資訊,請參閱管理 Azure Machine Learning 工作區的存取權

此設定可以在計算執行個體建立期間設定,或透過下列介面為現有的計算執行個體進行設定:

適用於Python SDK azure-ai-ml v2 (目前)

建立新的計算執行個體時,請新增 idle_time_before_shutdown_minutes 參數。

# Note that idle_time_before_shutdown has been deprecated.
ComputeInstance(name=ci_basic_name, size="STANDARD_DS3_v2", idle_time_before_shutdown_minutes="30")

您無法使用 Python SDK 變更現有計算執行個體的閒置時間。

您也可以使用下列項目來變更閒置時間:

  • REST API

    端點:

    POST https://management.azure.com/subscriptions/{SUB_ID}/resourceGroups/{RG_NAME}/providers/Microsoft.MachineLearningServices/workspaces/{WS_NAME}/computes/{CI_NAME}/updateIdleShutdownSetting?api-version=2021-07-01
    

    本文:

    {
        "idleTimeBeforeShutdown": "PT30M" // this must be a string in ISO 8601 format
    }
    
  • ARM 範本:只能在建立新的計算執行個體期間進行設定

    // Note that this is just a snippet for the idle shutdown property in an ARM template
    {
        "idleTimeBeforeShutdown":"PT30M" // this must be a string in ISO 8601 format
    }
    

排程自動啟動和停止

定義自動關機和自動啟動的多個排程。 例如,建立在星期一至星期四上午 9 點開始,並在下午 6 點停止的排程,然後建立在星期五上午 9 點開始,並在下午 4 點停止的第二個排程。 您可以針對每個計算執行個體建立總共四個排程。

也可以針對代表其他人建立計算執行個體定義排程。 您可以建立排程來建立處於停止狀態的計算執行個體。 當您代表其他使用者建立計算執行個體時,能停止計算執行個體會很有用。

在預定關機的時間前,使用者會看到通知,警示計算執行個體即將關機。 此時,使用者可以選擇關閉即將發生的關機事件。 例如,如果他們還在使用計算執行個體中。

建立排程

適用於Python SDK azure-ai-ml v2 (目前)

from azure.ai.ml.entities import ComputeInstance, ComputeSchedules, ComputeStartStopSchedule, RecurrenceTrigger, RecurrencePattern
from azure.ai.ml.constants import TimeZone
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

ci_minimal_name = "ci-name"
ci_start_time = "2023-06-21T11:47:00" #specify your start time in the format yyyy-mm-ddThh:mm:ss

rec_trigger = RecurrenceTrigger(start_time=ci_start_time, time_zone=TimeZone.INDIA_STANDARD_TIME, frequency="week", interval=1, schedule=RecurrencePattern(week_days=["Friday"], hours=15, minutes=[30]))
myschedule = ComputeStartStopSchedule(trigger=rec_trigger, action="start")
com_sch = ComputeSchedules(compute_start_stop=[myschedule])

my_compute = ComputeInstance(name=ci_minimal_name, schedules=com_sch)
ml_client.compute.begin_create_or_update(my_compute)

使用 Resource Manager 範本建立排程

您可以使用 Resource Manager 範本以排程計算執行個體的自動啟動與停止。

在 Resource Manager 範本中新增:

"schedules": "[parameters('schedules')]"

然後使用 cron 或 LogicApps 運算式來定義在您參數檔中啟動或停止執行個體的排程:

  "schedules": {
    "value": {
      "computeStartStop": [
        {
          "triggerType": "Cron",
          "cron": {
            "timeZone": "UTC",
            "expression": "0 18 * * *"
          },
          "action": "Stop",
          "status": "Enabled"
        },
        {
          "triggerType": "Cron",
          "cron": {
            "timeZone": "UTC",
            "expression": "0 8 * * *"
          },
          "action": "Start",
          "status": "Enabled"
        },
        {
          "triggerType": "Recurrence",
          "recurrence": {
            "frequency": "Day",
            "interval": 1,
            "timeZone": "UTC",
            "schedule": {
              "hours": [17],
              "minutes": [0]
            }
          },
          "action": "Stop",
          "status": "Enabled"
        }
      ]
    }
  }
  • 動作的值可以是 StartStop

  • 針對 Recurrence 的觸發程式類型,請使用與邏輯應用程式相同的語法,並搭配此週期性結構描述

  • 針對 cron 的觸發程式類型,請使用標準 cron 語法:

    // Crontab expression format: 
    // 
    // * * * * * 
    // - - - - - 
    // | | | | | 
    // | | | | +----- day of week (0 - 6) (Sunday=0) 
    // | | | +------- month (1 - 12) 
    // | | +--------- day of month (1 - 31) 
    // | +----------- hour (0 - 23) 
    // +------------- min (0 - 59) 
    // 
    // Star (*) in the value field above means all legal values as in 
    // braces for that column. The value column can have a * or a list 
    // of elements separated by commas. An element is either a number in 
    // the ranges shown above or two numbers in the range separated by a 
    // hyphen (meaning an inclusive range). 
    

Azure 原則支援預設為排程

使用 Azure 原則來強制執行訂用帳戶中每個計算執行個體的關機排程,或如果沒有任何專案,則預設為排程。 以下是預設關機排程 (在 PST 晚上 10 點) 的範例原則。

{
    "mode": "All",
    "policyRule": {
     "if": {
      "allOf": [
       {
        "field": "Microsoft.MachineLearningServices/workspaces/computes/computeType",
        "equals": "ComputeInstance"
       },
       {
        "field": "Microsoft.MachineLearningServices/workspaces/computes/schedules",
        "exists": "false"
       }
      ]
     },
     "then": {
      "effect": "append",
      "details": [
       {
        "field": "Microsoft.MachineLearningServices/workspaces/computes/schedules",
        "value": {
         "computeStartStop": [
          {
           "triggerType": "Cron",
           "cron": {
            "startTime": "2021-03-10T21:21:07",
            "timeZone": "Pacific Standard Time",
            "expression": "0 22 * * *"
           },
           "action": "Stop",
           "status": "Enabled"
          }
         ]
        }
       }
      ]
     }
    }
}

代表其他人建立

身為管理員,您可以代表資料科學家建立計算執行個體,並將使用以下方式將執行個體指派給他們:

指派受控識別

您可以為計算執行個體指派系統或使用者指派的受控識別,並驗證儲存體等其他 Azure 資源。 使用受控識別進行驗證,有助改善工作區安全性和管理。 例如,您可以讓使用者只有在登入計算執行個體後,才能存取定型資料。 或使用一個共同的使用者指派受控識別,來允許存取特定的儲存體帳戶。

重要

如果計算執行個體也設定為 [閒置關機],除非受控識別有 Azure Machine Learning 工作區的 [參與者] 存取權,否則計算執行個體不會因為閒置而關機。 如需指派權限的詳細資訊,請參閱管理 Azure Machine Learning 工作區的存取權

使用 SDK V2 建立具備系統指派受控識別的計算執行個體:

from azure.ai.ml import MLClient
from azure.identity import ManagedIdentityCredential
client_id = os.environ.get("DEFAULT_IDENTITY_CLIENT_ID", None)
credential = ManagedIdentityCredential(client_id=client_id)
ml_client = MLClient(credential, sub_id, rg_name, ws_name)
data = ml_client.data.get(name=data_name, version="1")

您也可以使用 SDK V1:

from azureml.core.authentication import MsiAuthentication
from azureml.core import Workspace
client_id = os.environ.get("DEFAULT_IDENTITY_CLIENT_ID", None)
auth = MsiAuthentication(identity_config={"client_id": client_id})
workspace = Workspace.get("chrjia-eastus", auth=auth, subscription_id="381b38e9-9840-4719-a5a0-61d9585e1e91", resource_group="chrjia-rg", location="East US")

建立受控識別之後,請在資料存放區的儲存體帳戶上至少授與受控識別儲存體 Blob 資料讀取者角色,請參閱存取儲存體服務。 之後,您處理計算執行個體時,系統會自動使用受控識別驗證資料存放區。

注意

所建立系統受控識別的名稱會以 Microsoft Entra ID 中的 /workspace-name/computes/compute-instance-name 格式表示。

您也可以手動使用受控識別來驗證其他的 Azure 資源。 下列範例示範如何使用受控識別,取得 Azure Resource Manager 存取權杖:

import requests

def get_access_token_msi(resource):
    client_id = os.environ.get("DEFAULT_IDENTITY_CLIENT_ID", None)
    resp = requests.get(f"{os.environ['MSI_ENDPOINT']}?resource={resource}&clientid={client_id}&api-version=2017-09-01", headers={'Secret': os.environ["MSI_SECRET"]})
    resp.raise_for_status()
    return resp.json()["access_token"]

arm_access_token = get_access_token_msi("https://management.azure.com")

若要搭配受控識別使用 Azure CLI 驗證,請在登入時指定身分識別用戶端識別碼作為使用者名稱:

az login --identity --username $DEFAULT_IDENTITY_CLIENT_ID

注意

嘗試使用受控識別時,您無法使用 azcopyazcopy login --identity 無效。

啟用 SSH 存取

SSH 存取預設為停用狀態。 建立之後,無法啟用或停用 SSH 存取。 若您規劃以互動方式使用 VS Code 遠端執行偵錯,請務必啟用存取。

選取 [下一步: 進階設定] 之後:

  1. 開啟 [啟用 SSH 存取]
  2. 在 [SSH 公開金鑰來源] 中,從下拉式清單選取其中一個選項:
    • 若您產生新的金鑰組
      1. 在 [金鑰組名稱] 中輸入金鑰的名稱。
      2. 選取 建立
      3. 選取 [下載私密金鑰並建立計算]。 金鑰通常會下載至 [下載] 資料夾。
    • 若您選取 [使用儲存於 Azure 的現有公開金鑰],請搜尋並選取 [已儲存金鑰] 中的金鑰。
    • 若您選取 [使用現有的公開金鑰],請以單行格式或多行 PEM 格式提供 RSA 公開金鑰 (開頭為 "ssh-rsa")。 您可以使用 Linux 和 OS X 上的 ssh-keygen,或是 Windows 上的 PuTTYGen 來產生 SSH 金鑰。

稍後設定 SSH 金鑰

儘管建立後無法啟用或停用 SSH,但您可以選擇稍後在啟用 SSH 的計算執行個體上設定 SSH 金鑰。 這可讓您在建立後設定 SSH 金鑰。 若要這樣做,請選取以在計算執行個體上啟用 SSH,然後選取 [稍後設定 SSH 金鑰] 作為 SSH 公開金鑰來源。 建立計算執行個體之後,您可以瀏覽計算執行個體的 [詳細資料] 頁面,然後選取以編輯 SSH 金鑰。 您可以從該處新增 SSH 金鑰。

其中一個常見使用案例的範例是代表其他使用者建立計算執行個體 (請參閱代表建立) 代表其他使用者佈建計算執行個體時,您可以選取 [稍後設定 SSH 金鑰],為新的計算執行個體擁有者啟用 SSH。 這可讓計算執行個體的新擁有者在遵循先前的步驟建立並指派給他們之後,為新擁有的計算執行個體設定其 SSH 金鑰。

使用 SSH 連線

建立已啟用 SSH 存取的計算之後,請使用下列步驟進行存取。

  1. 在您的工作區資源中尋找計算:

    1. 在左側,選取 [計算]
    2. 使用頂端的索引標籤來選取 [計算執行個體] 或 [計算叢集],以尋找您的電腦。
  2. 在資源清單中選取計算名稱。

  3. 尋找連接字串:

    • 針對計算執行個體,選取 [詳細資訊] 區段頂端的 [連線]

      Screenshot that shows connect tool at the top of the Details page.

    • 針對計算叢集,選取頂端的 [節點],然後在資料表中為您的節點選取 [連接字串]Screenshot that shows connection string for a node in a compute cluster.

  4. 複製連接字串。

  5. 針對 Windows,開啟 PowerShell 或命令提示字元:

    1. 移至金鑰儲存所在的目錄或資料夾

    2. 將 -i 旗標新增至連接字串,以找出私密金鑰並指向其儲存位置:

      ssh -i <keyname.pem> azureuser@... (rest of connection string)

  6. 針對 Linux 使用者,請遵循在 Azure 中建立和使用 Linux vm 的 SSH 金鑰組中的步驟

  7. 若為 SCP,請使用:

    scp -i key.pem -P {port} {fileToCopyFromLocal } azureuser@yourComputeInstancePublicIP:~/{destination}

  • REST API

您為其建立計算執行個體的資料科學家需要下列 Azure 角色型存取控制 (AZURE RBAC) 許可權:

  • Microsoft.MachineLearningServices/workspaces/computes/start/action
  • Microsoft.MachineLearningServices/workspaces/computes/stop/action
  • Microsoft.MachineLearningServices/workspaces/computes/restart/action
  • Microsoft.MachineLearningServices/workspaces/computes/applicationaccess/action
  • Microsoft.MachineLearningServices/workspaces/computes/updateSchedules/action

資料科學家可以啟動、停止和重新啟動計算執行個體。 他們可將計算執行個體用於:

  • Jupyter
  • JupyterLab
  • RStudio
  • Posit Workbench (先前稱為 RStudio Workbench)
  • 整合式筆記本

新增自訂應用程式,例如 RStudio 或 Posit Workbench

您可以在建立計算執行個體時設定其他應用程式,例如 RStudio 或 Posit Workbench (先前稱為 RStudio Workbench)。 請在工作室中遵循下列步驟,以在您的計算執行個體上設定自訂應用程式

  1. 填寫表單以建立新的計算執行個體
  2. 選取 [應用程式]
  3. 選取 [新增應用程式]

Screenshot showing Custom Service Setup.

設定 Posit Workbench (先前稱為 RStudio Workbench)

RStudio 是 R 開發人員最愛用來處理 ML 和資料科學專案的 IDE。 您可以輕鬆地設定 Posit Workbench,其可讓您存取 RStudio 和其他開發工具、在計算執行個體上執行、使用您自己的 Posit 授權,以及存取 Posit Workbench 所提供的豐富功能集

  1. 請遵循上述步驟,在建立計算執行個體時新增應用程式
  2. 在 [應用程式] 下拉式清單中選取 [Posit Workbench (自備授權)],然後在 [授權金鑰] 欄位中輸入 Posit Workbench 授權金鑰。 您可以從 Posit 取得您的 Posit Workbench 授權或試用版授權。
  3. 選取 [建立] 將 Posit Workbench 應用程式新增至計算執行個體。

Screenshot shows Posit Workbench settings.

重要

如果使用私人連結工作區,請確定您可以存取 Docker 映像、pkg-containers.githubusercontent.com 和 ghcr.io。 此外,請使用範圍 8704-8993 中已發佈的連接埠。 如果是 Posit Workbench (前稱為 RStudio Workbench),請提供 https://www.wyday.com 的網路存取權,以確保授權可供存取。

注意

  • 尚未提供從 Posit Workbench 存取工作區檔案存放區的支援。
  • 存取 Posit Workbench 的多個執行個體時,如果您看到「400 不正確的要求」。 要求標頭或 Cookie 太大] 錯誤,則請使用新的瀏覽器,或以 incognito 模式從瀏覽器進行存取。

設定 RStudio (開放原始碼)

若要使用 RStudio,請設定自訂應用程式,如下所示:

  1. 請遵循先前的步驟,在建立計算執行個體時新增應用程式

  2. 在 [應用程式] 下拉式清單上選取 [自訂應用程式]

  3. 設定您想要使用的 [應用程式名稱]

  4. 設定應用程式以在目標連接埠8787上執行 - 下面所列 RStudio 開放原始碼的 Docker 映像必須在此目標連接埠上執行。

  5. 設定要在已發佈的連接埠8787上存取的應用程式 - 您可以視需要將應用程式設定為要在不同的已發佈連接埠上存取。

  6. Docker 映像指向 ghcr.io/azure/rocker-rstudio-ml-verse:latest

  7. 選取 [建立] 以將 RStudio 設定為計算執行個體上的自訂應用程式。

Screenshot shows form to set up RStudio as a custom application

重要

如果使用私人連結工作區,請確定您可以存取 Docker 映像、pkg-containers.githubusercontent.com 和 ghcr.io。 此外,請使用範圍 8704-8993 中已發佈的連接埠。 如果是 Posit Workbench (前稱為 RStudio Workbench),請提供 https://www.wyday.com 的網路存取權,以確保授權可供存取。

設定其他自訂應用程式

藉由在 Docker 映像上提供應用程式,在計算執行個體上設定其他自訂應用程式。

  1. 請遵循先前的步驟,在建立計算執行個體時新增應用程式
  2. 在 [應用程式] 下拉式清單上選取 [自訂應用程式]
  3. 設定 [應用程式名稱]、您想要在其上執行應用程式的 [目標連接埠]、您想要在其上存取應用程式的 [已發佈連接埠],以及包含您應用程式的 [Docker 映像]。 如果自訂映像儲存在 Azure Container Registry 中,請為應用程式的使用者指派 [參與者] 角色。 如需關於指派角色的詳細資訊,請參閱管理 Azure Machine Learning 工作區存取權
  4. (選擇性) 新增您想要用於應用程式的 [環境變數]
  5. 使用 [繫結掛接] 新增預設儲存體帳戶中檔案的存取權:
    • 針對 [主機路徑] 指定 /home/azureuser/cloudfiles
    • 針對 [容器路徑] 指定 /home/azureuser/cloudfiles
    • 選取 [新增] 以新增此掛接。 由於檔案已掛接,因此可取得您在其他計算執行個體和應用程式中進行的變更。
  6. 選取 [建立] 以在計算執行個體上設定自訂應用程式。

Screenshot show custom application settings.

重要

如果使用私人連結工作區,請確定您可以存取 Docker 映像、pkg-containers.githubusercontent.com 和 ghcr.io。 此外,請使用範圍 8704-8993 中已發佈的連接埠。 如果是 Posit Workbench (前稱為 RStudio Workbench),請提供 https://www.wyday.com 的網路存取權,以確保授權可供存取。

在工作室中存取自訂應用程式

在工作室中存取您所設定的自訂應用程式:

  1. 在左側,選取 [計算]
  2. 在 [計算執行個體] 索引標籤上,於 [應用程式] 資料行底下查看您的應用程式。

Screenshot shows studio access for your custom applications.

注意

設定自訂應用程式之後,您可能需要幾分鐘的時間才能透過連結進行存取。 所花費的時間量將取決於用於自訂應用程式的映像大小。 如果您在嘗試存取應用程式時看到 502 錯誤訊息,則請等候一些時間來設定應用程式,然後再試一次。 如果自訂映像是從 Azure Container Registry 提取,您需要工作區的 [參與者] 角色。 如需關於指派角色的詳細資訊,請參閱管理 Azure Machine Learning 工作區存取權

下一步