將模型部署為無伺服器 API
本文內容
在本文中,您將了解如何使用隨用隨付權杖型計費,將模型目錄中的模型部署為無伺服器 API。
重要
處於預覽狀態的模型會在模型目錄中的模型卡片上標示為 預覽 。
模型目錄中的某些模型 可以部署為隨用隨付計費方案的無伺服器 API。 這種部署可讓您以 API 的形式取用模型,而不必在您的訂用帳戶上裝載模型,同時讓組織保持所需的企業安全性和合規性。 此部署選項不需要您的訂用帳戶提供配額。
本文使用 Meta Llama 模型部署進行說明。 不過,您可以使用相同的步驟部署任何一個模型目錄中可用於無伺服器 API 部署的模型 (英文)。
必要條件
具有有效付款方式的 Azure 訂用帳戶。 免費版或試用版 Azure 訂用帳戶將無法運作。 如果您沒有 Azure 訂用帳戶,請建立付費 Azure 帳戶 以開始。
Azure AI Studio 中樞 。
Azure AI Studio 專案 。
Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure AI Studio 作業的存取權限。 若要執行本文中的步驟,您的使用者帳戶必須獲指派資源群組上的 Azure AI 開發人員角色 。 如存取權限的需詳細資訊,請參閱 Azure AI Studio 中的角色型存取控制 。
您必須安裝下列軟體,才能使用 Azure AI Studio:
Azure CLI 和 適用於 Azure Machine Learning 的 ML 延伸模組 。
az extension add -n ml
如果您已安裝延伸模組,請確定您已安裝最新版本。
az extension update -n ml
安裝延伸模組後,請加以設定:
az account set --subscription <subscription>
az configure --defaults workspace=<project-name> group=<resource-group> location=<location>
安裝適用於 Python 的 Azure Machine Learning SDK 。
pip install -U azure-ai-ml
安裝之後,匯入必要的命名空間,並建立連線至專案的用戶端:
from azure.ai.ml import MLClient
from azure.identity import InteractiveBrowserCredential
from azure.ai.ml.entities import MarketplaceSubscription, ServerlessEndpoint
client = MLClient(
credential=InteractiveBrowserCredential(tenant_id="<tenant-id>"),
subscription_id="<subscription-id>",
resource_group_name="<resource-group>",
workspace_name="<project-name>",
)
如 Azure CLI (機器翻譯) 所述,安裝 Azure CLI。
根據您的設定,設定下列環境變數:
RESOURCE_GROUP="serverless-models-dev"
LOCATION="eastus2"
在模型目錄中尋找您的模型和模型識別碼
登入 Azure AI Studio 。
針對透過 Azure Marketplace 提供的模型,請確定您的帳戶具有資源群組的 Azure AI 開發人員 角色權限,或您符合訂閱模型供應項目的必要權限 。
非 Microsoft 提供者所提供的模型 (例如 Llama 和 Mistral 模型) 會透過 Azure Marketplace 計費。 針對這類模型,您必須將專案訂閱特定的模型供應項目。 Microsoft 所提供的模型 (例如 Phi-3 模型) 沒有這項需求,因為計費方式不同。 如需模型目錄中無伺服器部署模型計費的詳細資訊,請參閱無伺服器 API 的計費 。
從左側資訊看板選取 [模型目錄] ,並尋找您要部署模型的模型卡片。 在本文中,您會選取 Meta-Llama-3-8B-Instruct 模型。
如果您要使用 Azure CLI、Python 或 ARM 部署模型,請複製模型識別碼 。
重要
複製模型識別碼 時,請勿包含版本。 無伺服器 API 端點一律會部署模型最新可用的版本。 例如,針對模型識別碼 azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct/versions/3
,複製 azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
。
下一節涵蓋將專案訂閱模型供應項目的步驟。 如果您要部署 Microsoft 模型,您可以略過本節,並移至將模型部署至無伺服器 API 端點 。
訂閱專案的模型供應項目
無伺服器 API 端點可以部署 Microsoft 和非 Microsoft 所提供的模型。 若是 Microsoft 模型 (例如 Phi-3 模型),您不需要建立 Azure Marketplace 訂用帳戶,而且您可以直接將模型部署至無伺服器 API 端點 以取用其預測。 若是非 Microsoft 模型,您必須先建立訂用帳戶。 如果這是您第一次在專案中部署模型,您必須從 Azure Marketplace 訂閱專案以取得特定模型供應項目。 每個專案都有自己模型特定 Azure Marketplace 供應項目的訂用帳戶,可讓您控制及監視支出。
建立模型的市集訂用帳戶。 當您建立訂用帳戶時,您必須接受與模型供應項目相關聯的條款及條件。
在模型的 [詳細資料] 頁面上,選取 [部署] 。 [部署選項] 視窗隨即開啟,提供您在無伺服器 API 部署和使用受控計算進行部署之間進行選擇。
注意
對於只能透過無伺服器 API 部署進行部署的模型,您在模型的詳細資料頁面選取 [部署] 之後,就會立即開啟無伺服器 API 部署精靈。
選取 [具有 Azure AI 內容安全的無伺服器 API (預覽)] ,開啟無伺服器 API 部署精靈。
選取您要在其中部署模型的專案。 若要使用無伺服器 API 模型部署供應項目,您的專案必須屬於特定模型其中一個支援無伺服器部署的區域 。
如果您看到提示您已經有此專案的 Azure Marketplace 訂用帳戶 ,則不需要建立訂用帳戶,因為您已經有訂用帳戶了。 您可以繼續將模型部署到無伺服器 API 端點 。
在部署精靈上,選取 [Azure Marketplace 條款] 的連結,以深入了解使用規定。 您也可以選取 [價格及使用規定] 索引標籤以了解所選模型的價格。
選取 [訂閱並部署] 。
subscription.yml
name: meta-llama3-8b-qwerty
model_id: azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
使用上一個檔案來建立訂用帳戶:
az ml marketplace-subscription create -f subscription.yml
model_id="azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct"
subscription_name="Meta-Llama-3-8B-Instruct"
marketplace_subscription = MarketplaceSubscription(
model_id=model_id,
name=subscription_name,
)
marketplace_subscription = client.marketplace_subscriptions.begin_create_or_update(
marketplace_subscription
).result()
使用下列 bicep 組態建立模型訂用帳戶:
model-subscription.bicep
param projectName string = 'my-project'
param modelId string = 'azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct'
var modelName = substring(modelId, (lastIndexOf(modelId, '/') + 1))
var subscriptionName = '${modelName}-subscription'
resource projectName_subscription 'Microsoft.MachineLearningServices/workspaces/marketplaceSubscriptions@2024-04-01-preview' = if (!startsWith(
modelId,
'azureml://registries/azureml/'
)) {
name: '${projectName}/${subscriptionName}'
properties: {
modelId: modelId
}
}
接著建立資源,如下所示:
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.bicep
使用下列範本來建立模型訂用帳戶:
model-subscription.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"project_name": {
"defaultValue": "my-project",
"type": "String"
},
"subscription_name": {
"defaultValue": "Meta-Llama-3-8B-Instruct",
"type": "String"
},
"model_id": {
"defaultValue": "azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.MachineLearningServices/workspaces/marketplaceSubscriptions",
"apiVersion": "2024-04-01",
"name": "[concat(parameters('project_name'), '/', parameters('subscription_name'))]",
"properties": {
"modelId": "[parameters('model_id')]"
}
}
]
}
使用 Azure 入口網站或 Azure CLI 建立部署。
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.json
當您為專案訂閱特定 Azure Marketplace 供應項目之後,就不需要再次訂閱相同工作區中的相同供應項目的後續部署。
您可以隨時檢視專案目前訂閱的模型供應項目:
前往 Azure 入口網站 。
瀏覽至專案所屬的資源群組。
在 [類型] 篩選中,選取 [SaaS] 。
您會看到目前訂閱的所有供應項目。
選取任何資源以查看詳細資料。
az ml marketplace-subscription list
marketplace_sub_list = client.marketplace_subscriptions.list()
for sub in marketplace_sub_list:
print(sub.as_dict())
您可以使用資源管理工具來查詢資源。 下列程式碼使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.SaaS']"
您可以使用資源管理工具來查詢資源。 下列程式碼使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.SaaS']"
將模型部署至無伺服器 API 端點
建立非 Microsoft 模型的訂用帳戶之後,您可以將相關聯的模型部署到無伺服器 API 端點。 針對 Microsoft 模型 (例如 Phi-3 模型),您不需要建立訂用帳戶。
無伺服器 API 端點可讓您以 API 的形式取用模型,而不必在您的訂用帳戶上裝載模型,同時讓組織保持所需的企業安全性和合規性。 此部署選項不需要您的訂用帳戶提供配額。
在本節中,您會建立名稱為 meta-llama3-8b-qwerty 的端點。
建立無伺服器端點
若要部署不需要訂閱模型供應項目的 Microsoft 模型:
選取 [部署] ,然後選取 [使用 Azure AI 內容安全的無伺服器 API (預覽)] 以開啟部署精靈。
選取您要在其中部署模型的專案。 請注意,並非所有區域都受到支援。
或者,對於需要模型訂用帳戶的非 Microsoft 模型,如果您剛將專案訂閱上一節中的模型供應項目,請繼續選取 [部署] 。 或者,選取 [繼續部署] (如果您的部署精靈有 [您已有此專案的 Azure Marketplace 訂用帳戶] 備註)。
為部署指定名稱。 此名稱會成為部署 API URL 的一部分。 此 URL 在每個 Azure 區域中都必須是唯一的。
提示
[內容篩選器 (預覽)] 選項預設為啟用。 保留服務的預設設定以偵測有害的內容,例如仇恨、自我傷害、性與暴力內容。 如需內容篩選的詳細資訊(預覽),請參閱 Azure AI Studio 中的內容篩選。
選取部署 。 待部署準備就緒後,系統會將您重新導向至 [部署] 頁面。
endpoint.yml
name: meta-llama3-8b-qwerty
model_id: azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
使用 endpoint.yml 檔案來建立端點:
az ml serverless-endpoint create -f endpoint.yml
endpoint_name="meta-llama3-8b-qwerty"
serverless_endpoint = ServerlessEndpoint(
name=endpoint_name,
model_id=model_id
)
created_endpoint = client.serverless_endpoints.begin_create_or_update(
serverless_endpoint
).result()
使用下列範本來建立端點:
serverless-endpoint.bicep
param projectName string = 'my-project'
param endpointName string = 'myserverless-text-1234ss'
param location string = resourceGroup().location
param modelId string = 'azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct'
var modelName = substring(modelId, (lastIndexOf(modelId, '/') + 1))
var subscriptionName = '${modelName}-subscription'
resource projectName_endpoint 'Microsoft.MachineLearningServices/workspaces/serverlessEndpoints@2024-04-01-preview' = {
name: '${projectName}/${endpointName}'
location: location
sku: {
name: 'Consumption'
}
properties: {
modelSettings: {
modelId: modelId
}
}
dependsOn: [
projectName_subscription
]
}
output endpointUri string = projectName_endpoint.properties.inferenceEndpoint.uri
建立部署,如下所示:
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.bicep
使用下列範本來建立端點:
template.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"project_name": {
"defaultValue": "my-project",
"type": "String"
},
"endpoint_name": {
"defaultValue": "meta-llama3-8b-qwerty",
"type": "String"
},
"location": {
"defaultValue": "eastus2",
"type": "String"
},
"model_id": {
"defaultValue": "azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.MachineLearningServices/workspaces/serverlessEndpoints",
"apiVersion": "2024-04-01",
"name": "[concat(parameters('project_name'), '/', parameters('endpoint_name'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Consumption"
},
"properties": {
"modelSettings": {
"modelId": "[parameters('model_id')]"
}
}
}
]
}
然後建立部署:
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file template.json
Azure 部署範本可能需要幾分鐘的時間才能完成。 完成後,您會看到包含結果的訊息:
"provisioningState": "Succeeded",
您隨時可以查看部署至專案的端點:
移至您的專案。
選取 [部署] 區段
隨即顯示無伺服器 API 端點。
az ml serverless-endpoint list
endpoint_name="meta-llama3-8b-qwerty"
serverless_endpoint = ServerlessEndpoint(
name=endpoint_name,
model_id=model_id
)
created_endpoint = client.serverless_endpoints.begin_create_or_update(
serverless_endpoint
).result()
您可以使用資源管理工具來查詢資源。 下列程式碼使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.MachineLearningServices/workspaces/serverlessEndpoints']"
您可以使用資源管理工具來查詢資源。 下列程式碼使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.MachineLearningServices/workspaces/serverlessEndpoints']"
建立的端點會使用金鑰驗證進行授權。 使用下列步驟來取得與指定端點相關聯的金鑰。
您可以回到 [部署] 頁面、選取部署,然後記下端點的目標 URL 和金鑰 。 使用它們來呼叫部署並產生預測。
注意
使用 Azure 入口網站 時,預設不會在資源群組上顯示無伺服器 API 端點。 使用 [顯示隱藏類型] 選項,在資源群組上顯示它們。
az ml serverless-endpoint get-credentials -n meta-llama3-8b-qwerty
endpoint_keys = client.serverless_endpoints.get_keys(endpoint_name)
print(endpoint_keys.primary_key)
print(endpoint_keys.secondary_key)
此時,您的端點已可供使用。
如果您需要從不同的專案或中樞取用此部署,或計劃使用提示流程來建置智慧型應用程式,則必須建立無伺服器 API 部署的連線。 若要了解如何在新專案或中樞上設定現有的無伺服器 API 端點,請參閱從不同的專案或從提示流程取用已部署的無伺服器 API 端點 。
提示
如果您在部署所在的相同專案或中樞中使用提示流程,還是需要建立連線。
使用無伺服器 API 端點
部署在 Azure Machine Learning 中的模型和無伺服器 API 端點中的 Azure AI Studio 都支援 Azure AI 模型推斷 API ,其會公開基礎模型的一組常見功能,且開發人員可以使用此 API,以統一且一致的方式取用各種模型集合的預測。
深入了解此 API 的功能 ,以及如何在建置應用程式時加以使用 。
網路隔離
部署為無伺服器 API 之模型的端點會遵循具有部署所在專案的 AI Studio 中樞公用網路存取 (PNA) 旗標設定。 若要保護您的 MaaS 端點,請停用 AI Studio 中樞上的 PNA 旗標。 您可以使用中樞的私人端點,保護從用戶端到端點的輸入通訊。
若要設定 Azure AI Studio 中樞的 PNA 旗標:
前往 Azure 入口網站 。
搜尋中樞所屬的資源群組,然後從此資源群組所列的資源中選取 Azure AI 中樞 。
在左側功能表的中樞 [概觀] 頁面,選取 [設定] >[網路] 。
在 [公用存取] 索引標籤下方,您可以設定公用網路存取旗標的設定。
儲存您的變更。 您的變更最多可能需要五分鐘才能散佈。
刪除端點和訂用帳戶
您可以刪除模型訂用帳戶和端點。 刪除模型訂用帳戶會使任何相關聯的端點變成狀況不良 且無法使用。
若要刪除無伺服器 API 端點:
前往 Azure AI Studio 。
前往 [元件] >[部署] 。
開啟您要刪除的部署。
選取 [刪除] 。
若要刪除相關聯的模型訂用帳戶:
移至 Azure 入口網站
瀏覽至專案所屬的資源群組。
在 [類型] 篩選中,選取 [SaaS] 。
選取您要刪除的訂用帳戶。
選取 [刪除] 。
若要刪除無伺服器 API 端點:
az ml serverless-endpoint delete \
--name "meta-llama3-8b-qwerty"
若要刪除相關聯的模型訂用帳戶:
az ml marketplace-subscription delete \
--name "Meta-Llama-3-8B-Instruct"
若要刪除無伺服器 API 端點:
client.serverless_endpoints.begin_delete(endpoint_name).wait()
若要刪除相關聯的模型訂用帳戶:
client.marketplace_subscriptions.begin_delete(subscription_name).wait()
您可以使用資源管理工具來管理資源。 下列程式碼使用 Azure CLI:
az resource delete --name <resource-name>
您可以使用資源管理工具來管理資源。 下列程式碼使用 Azure CLI:
az resource delete --name <resource-name>
部署為無伺服器 API 端點的模型成本和配額考量
配額會根據每個部署管理。 每個部署的速率限制為每分鐘 200,000 個權杖,每分鐘 1,000 個 API 要求。 不過,我們目前限制每個專案的每個模型為一個部署。 如果目前的速率限制無法滿足您的情節,請連絡 Microsoft Azure 支援。
Microsoft 模型的成本
您可以在部署 Microsoft 模型 (例如 Phi-3 模型) 做為無伺服器 API 端點時,於部署精靈的 [價格及使用規定] 索引標籤上找到價格資訊。
非 Microsoft 模型的成本
部署為無伺服器 API 端點的非 Microsoft 模型是透過 Azure Marketplace 提供,並與 Azure AI Studio 整合以供使用。 您可以在部署或微調這些模型時,找到 Azure Marketplace 價格。
每次專案訂閱來自 Azure Marketplace 的指定供應項目時,都會建立新的資源,以便追蹤與其使用量相關聯的成本。 會使用相同的資源來追蹤與推斷和微調相關聯的成本;不過,可以使用多個計量獨立追蹤每個情節。
如需如何追蹤成本的詳細資訊,請參閱監視透過 Azure Marketplace 提供的模型成本 (部分機器翻譯)。
訂閱模型供應項目的必要權限
Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure AI Studio 作業的存取權限。 若要執行本文中的步驟,您的使用者帳戶必須獲指派 Azure 訂用帳戶的擁有者 、參與者 或 Azure AI 開發人員 角色。 或者,可以為您的帳戶指派具有下列權限的自訂角色:
如存取權限的需詳細資訊,請參閱 Azure AI Studio 中的角色型存取控制 。
相關內容