使用 Azure CLI 和 Bicep 部署模型

在本文中,您將學習如何在 Foundry Models 端點新增模型部署。 當您在要求中指定部署名稱時,該部署即可在您的 Foundry 資源中用於推斷。

先決條件

要完成這篇文章,你需要以下條件:

  • 一個 Azure 訂閱。

  • 一個鑄造廠的專案。 此專案類型由 Foundry 資源管理。 如果你沒有 Foundry 專案,請參考 為 Microsoft Foundry 建立專案。

  • Azure 角色基礎存取控制(RBAC)權限用於建立和管理部署。 你需要擁有 Cognitive Services Contributor 角色或等同於此角色的 Foundry 資源權限。

  • 合作夥伴和社群提供的 Foundry 模型需要存取 Azure Marketplace。 確保你擁有 訂閱模型產品的權限。 由 Azure 銷售的 Foundry 模型沒有這項要求。

  • 安裝 Azure CLI(版本 2.60 或更新版本)。 az cognitiveservices本文所用的指令是核心 CLI 的一部分,因此不需要額外的擴充。

  • 這個教學中有些指令會使用這個 jq 工具,但你的系統可能沒有安裝這個工具。 安裝說明請參見 下載 jq。

  • 請確認以下資訊:

    • 您的 Azure 訂閱 ID
    • 你的鑄造資源名稱
    • 你部署 Foundry 資源的資源群組
  • 你想部署的型號名稱、提供者、版本和 SKU。 請使用 Foundry 入口網站或 Azure CLI 來查詢這些資訊。 在此範例中,你部署的模型如下:

    • 型號名稱: Phi-4-mini-instruct
    • Provider:Microsoft
    • 版本: 1
    • 部署類型:全球標準

訂閱模型需合作夥伴與社群授權

合作夥伴及社群提供的 Foundry 模型(例如 Cohere 模型)可供部署,這需要使用 Azure Marketplace。 模型提供者定義授權條款,並透過 Azure Marketplace 設定使用模型的價格。

部署第三方模型時,請確保你的帳號具備以下權限:

  • 關於 Azure 訂閱:
    • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
    • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
    • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
    • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
    • Microsoft.SaaS/register/action
  • 關於資源群組——建立並使用 SaaS 資源:
    • Microsoft.SaaS/resources/read
    • Microsoft.SaaS/resources/write

Azure訂閱上的 Owner 和 Contributor 角色包含這些權限。 如果你沒有所需的權限,請你的訂閱管理員指派你貢獻 者 角色,或建立包含上述動作的 自訂角色 。

要驗證您的權限,請前往 Azure 入口網站,開啟您的訂閱,選擇 存取控制(IAM)>Check access,並檢視您所分配的角色。

提示

Microsoft.SaaS/register/action 是在訂用帳戶上對 SaaS 資源提供者進行的一次性註冊。 註冊後,不需要每次部署都重複。

新增模型

要新增模型,首先要確定你想部署的模型。 查詢可用模型如下:

  1. 登入你的 Azure 訂閱。

    az login
    
  2. 如果你有多個訂閱,請選擇你資源所在的訂閱。

    subscriptionId="<subscription-id>"
    az account set --subscription $subscriptionId
    
  3. 請設定以下環境變數,並標示你計畫使用的 Foundry 資源名稱及資源群組。

    accountName="<ai-services-resource-name>"
    resourceGroupName="<resource-group>"
    location="eastus2"
    
  4. 如果你還沒建立 Foundry 資源,就先建立一個。

    az cognitiveservices account create -n $accountName -g $resourceGroupName --custom-domain $accountName --location $location --kind AIServices --sku S0
    

    參考:az cognitiveservices 帳戶

  5. 查看你有哪些型號可用,以及屬於哪個 SKU。 每種部署類型都以 CLI 和 ARM 中的 SKU 程式碼表示,並定義 Azure 基礎架構如何處理請求。 不同型號可能提供不同的部署類型。 以下指令列出所有可用的模型定義:

    az cognitiveservices account list-models \
        -n $accountName \
        -g $resourceGroupName \
    | jq '.[] | { name: .name, format: .format, version: .version, sku: .skus[0].name, capacity: .skus[0].capacity.default }'
    

    輸出包含可用模型及其特性:

    {
      "name": "Phi-4-mini-instruct",
      "format": "Microsoft",
      "version": "1",
      "sku": "GlobalStandard",
      "capacity": 1000
    }
    

    參考:az cognitiveservices account list-models

  6. 確定你想部署的模型。 你需要name、format、version和sku的性質。 該屬性 format 指示提供模型的供應商。 根據部署類型,你可能還需要產能。

  7. 將模型的部署加入到資源中。 以下範例補充 Phi-4-mini-instruct:

    az cognitiveservices account deployment create \
        -n $accountName \
        -g $resourceGroupName \
        --deployment-name Phi-4-mini-instruct \
        --model-name Phi-4-mini-instruct \
        --model-version 1 \
        --model-format Microsoft \
        --sku-capacity 1 \
        --sku-name GlobalStandard
    

    參考:az cognitiveservices account deployment

  8. 確認部署是否成功完成:

    az cognitiveservices account deployment show \
        --deployment-name Phi-4-mini-instruct \
        -n $accountName \
        -g $resourceGroupName \
    | jq '.properties.provisioningState'
    

    輸出應該會顯示 "Succeeded"。 模型在配置完成後即可使用。

    Reference: az cognitiveservices account deployment show

如果需要,你可以多次部署同一個模型,只要你給它不同的部署名稱。 此功能適用於想測試特定模型不同配置(包括內容過濾器)時。

新增模型

  1. 使用範本 ai-services-deployment-template.bicep 來描述模型部署:

    ai-services-deployment-template.bicep

    @description('Name of the Azure AI services account')
    param accountName string
    
    @description('Name of the model to deploy')
    param modelName string
    
    @description('Version of the model to deploy')
    param modelVersion string
    
    @allowed([
      'AI21 Labs'
      'Cohere'
      'Core42'
      'DeepSeek'
      'xAI'
      'Meta'
      'Microsoft'
      'Mistral AI'
      'OpenAI'
    ])
    @description('Model provider')
    param modelPublisherFormat string
    
    @allowed([
        'GlobalStandard'
        'DataZoneStandard'
        'Standard'
        'GlobalProvisioned'
        'Provisioned'
    ])
    @description('Model deployment SKU name')
    param skuName string = 'GlobalStandard'
    
    @description('Content filter policy name')
    param contentFilterPolicyName string = 'Microsoft.DefaultV2'
    
    @description('Model deployment capacity')
    param capacity int = 1
    
    resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2024-04-01-preview' = {
      name: '${accountName}/${modelName}'
      sku: {
        name: skuName
        capacity: capacity
      }
      properties: {
        model: {
          format: modelPublisherFormat
          name: modelName
          version: modelVersion
        }
        raiPolicyName: contentFilterPolicyName == null ? 'Microsoft.Nill' : contentFilterPolicyName
      }
    }
    
  2. 執行部署:

    resourceGroupName="<resource-group-name>"
    accountName="<ai-services-resource-name>"
    modelName="Phi-4-mini-instruct"
    provider="Microsoft"
    version=1
    
    az deployment group create \
        --resource-group $resourceGroupName \
        --template-file ai-services-deployment-template.bicep \
        --parameters accountName=$accountName modelName=$modelName modelVersion=$version modelPublisherFormat=$provider
    
  3. 確認部署是否成功完成:

    az cognitiveservices account deployment show \
        --deployment-name $modelName \
        -n $accountName \
        -g $resourceGroupName \
    | jq '.properties.provisioningState'
    

    輸出應該會顯示 "Succeeded"。

註

本文其餘各節對於 CLI 和 Bicep 這兩種作法都相同。

使用這個模型

您可以針對資源使用 Foundry 模型的端點,來取用已部署的模型。 當你建構請求時,指定參數 model 並插入你建立的模型部署名稱。 你可以透過以下程式碼程式化取得推論端點的 URI:

推論端點

az cognitiveservices account show  -n $accountName -g $resourceGroupName | jq '.properties.endpoints["Azure OpenAI Legacy API - Latest moniker"]'

要使用 OpenAI v1 API 向 Foundry Models 端點提出請求,請在端點 URL 上呼叫 /openai/v1/ 路由, https://<resource-name>.openai.azure.com/openai/v1/ 並在請求欄位中傳遞部署名稱 model 。 路由 /openai/v1/ 採用隱式版本控制,所以你不會傳遞 api-version.

請參閱 Azure OpenAI v1 API 參考資料以了解所有支援的操作。

推論鍵

az cognitiveservices account keys list  -n $accountName -g $resourceGroupName

管理部署

使用 CLI 查看所有可用的部署:

  1. 執行以下指令即可查看所有正在部署的狀態:

    az cognitiveservices account deployment list -n $accountName -g $resourceGroupName
    

    參考:az cognitiveservices 帳戶部署清單

  2. 執行以下指令以查看特定部署的細節:

    az cognitiveservices account deployment show \
        --deployment-name "Phi-4-mini-instruct" \
        -n $accountName \
        -g $resourceGroupName
    

    Reference: az cognitiveservices account deployment show

  3. 執行以下指令刪除特定的部署:

    az cognitiveservices account deployment delete \
        --deployment-name "Phi-4-mini-instruct" \
        -n $accountName \
        -g $resourceGroupName
    

    參考:az cognitiveservices account deployment delete

故障排除

錯誤 成因 解決方法
配額超標 您的訂閱已達到所選 SKU 或區域的部署配額。 請在 Foundry 入口網站查詢你的配額,或透過 Azure 支援 申請增加。
授權失敗 使用的識別沒有必要的 RBAC 角色。 在 Foundry 資源中指定認知 服務貢獻 者角色。
型號未提供 這個模型在你的地區或訂閱中都無法使用。 執行 az cognitiveservices account list-models 查看可用的模型和地區。
無法辨識命令 你的 Azure CLI 已經過時了。 使用az upgrade更新至 2.60 或更新版本。 這些 az cognitiveservices 指令是核心 CLI 的一部分,不需要另外的擴充功能。