將流程部署為受控線上端點以進行即時推斷
建置流程並對其進行正確測試之後,您可能會想要將其部署為端點,以便叫用端點進行即時推斷。
在本文中,您將了解如何將流程部署為受控線上端點以進行即時推斷。 您將要採取的步驟如下:
重要
本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本會在沒有服務等級協定的情況下提供,不建議用於實際執行工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
必要條件
對受控線上端點有基本的了解。 受控線上端點會以可調整、完全受控的方式,使用 Azure 中強大的 CPU 和 GPU 機器,讓您省去設定和管理基礎的部署基礎結構的額外負荷。 如需受控線上端點的詳細資訊,請參閱進行即時推斷所需的線上端點和部署。
Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 為了能夠在提示流程中部署端點,必須為您的使用者帳號指派 AzureML 資料科學家或具有更多 Azure Machine Learning 工作區權限的角色。
對受控識別有基本了解。 深入了解受控識別。
注意
受控線上端點僅支援受控虛擬網路。 如果您的工作區位於自訂 vnet 中,則必須嘗試其他部署選項,例如部署至使用 CLI/SDK 的 Kubernetes 線上端點,或部署到其他平台,例如 Docker。
建置流程並準備好進行部署
如果已完成入門教學課程,您已經透過提交批次執行及評估結果來正確測試流程。
如果您沒有完成本教學課程,則需要建置一個流程。 建議的最佳做法是先透過批次執行和評估來正確測試流程,再進行部署。
我們將使用範例流程 Web 分類作為範例,示範如何部署流程。 此範例流程是標準流程。 部署聊天流程也是類似這樣。 評估流程不支援部署。
定義部署所使用的環境
在 UI 中將提示流程部署到受控線上端點時,部署預設會使用根據流程 requirements.txt
中指定的最新提示流程映像和相依性所建立的環境。 您可以指定 requirements.txt
中所需的額外套件。 您可以在流程資料夾的根資料夾中找到 requirements.txt
。
注意
如果您在 Azure devops 中使用私人摘要,您必須先建置具有私人摘要的映像,然後選取要在 UI 中部署的自訂環境。
建立線上部署
現在您已建置並正確測試流程,就可以建立線上端點進行即時推斷。
提示流程支援從流程或批次執行部署端點。 建議的最佳做法是先測試流程再進行部署。
在流程製作頁面或執行詳細資料頁面中,選取 [部署]。
流程製作頁面:
執行詳細資料頁面:
您設定端點的精靈會出現並包含下列步驟。
基本設定
此步驟可讓您設定部署的基本設定。
屬性 | 說明 |
---|---|
端點 | 您可以選取是要部署新的端點或更新現有的端點。 如果您選取 [新增],則必須指定端點名稱。 |
部署名稱 | - 在相同的端點內,部署名稱應該是唯一的。 - 如果您選取現有的端點,並輸入現有的部署名稱,則會以新的組態覆寫該部署。 |
虛擬機器 | 要用於部署的 VM 大小。 如需支援的大小清單,請參閱受控線上端點 SKU 清單。 |
執行個體計數 | 要用於部署的執行個體數目。 指定您預期的工作負載上的值。 為了達到高可用性,建議您將值至少設定為 3。 我們會額外保留 20% 來執行升級。 如需詳細資訊,請參閱受控線上端點配額 |
推斷資料收集 | 如果您啟用此功能,將會在 Azure Machine Learning 資料資產中自動收集流程輸入和輸出,可於稍後的監視中使用。 若要深入了解,請參閱如何監視生成式 AI 應用程式。 |
完成基本設定之後,即可直接選取 [檢閱+建立] 以完成建立,也可以選取 [下一步] 來設定 [進階設定]。
進階設定 - 端點
您可以指定端點的下列設定。
驗證類型
端點的驗證方法。 金鑰型驗證提供未過期的主要和次要金鑰。 Azure Machine Learning 權杖型驗證會提供定期自動重新整理的權杖。 如需驗證的詳細資訊,請參閱向線上端點進行驗證。
身分識別類型
端點必須存取 Azure 資源,例如 Azure Container Registry 或工作區連線以進行推斷。 您可以允許端點權限透過授與其受控識別的權限來存取 Azure 資源。
系統會在建立端點之後,自動建立系統指派的身分識別,而使用者指派的身分識別則由使用者建立。 深入了解受控識別。
系統指派
您會發現有一個選項為是否要強制存取連線祕密 (預覽)。 如果流程使用連線,端點必須存取連線才能執行推斷。 此選項預設為啟用,如果您擁有連線祕密讀取器權限,端點將獲授與 Azure Machine Learning 工作區連線祕密讀取器角色,以自動存取連線。 如果您停用此選項,您必須自行將此角色授與系統指派的身分識別,或向系統管理員尋求協助。深入了解如何將權限授與端點身分識別。
使用者指派的
建立部署作業時,Azure 會嘗試從工作區 Azure Container Registry (ACR) 提取使用者容器映像,並將使用者模型和程式碼成品從工作區儲存體帳戶掛接至使用者容器中。
如果您使用使用者指派的身分識別建立相關聯的端點,則必須在部署建立之前授與使用者指派的身分識別下列角色,否則部署建立將會失敗。
範圍 | 角色 | 需要的原因 |
---|---|---|
Azure Machine Learning 工作區 | Azure 機器學習工作區連接秘密讀者角色或具有「Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action」的自訂角色 | 取得工作區連線 |
工作區容器登錄 | ACR 提取 | 提取容器映像 |
工作區預設儲存體 | 儲存體 Blob 資料讀者 | 從儲存體載入模型 |
(選擇性) Azure Machine Learning 工作區 | 工作區計量寫入器 | 部署端點之後,如果您想要監視端點的相關計量,例如 CPU/GPU/磁碟/記憶體使用率,您必須將此許可權授與身分識別。 |
請參閱將權限授與端點中有關如何將權限授與端點身分識別的詳細指引。
重要
如果您的流程使用 Microsoft Entra ID 型驗證連線,則無論您使用系統指派的身分識別或使用者指派的身分識別,一律必須為受控識別授與對應資源的適當角色,以便對該資源進行 API 呼叫。 例如,如果您的 Azure OpenAI 連線使用 Microsoft Entra ID 型驗證,您必須授與對應 Azure OpenAI 資源的端點受控識別認知服務 OpenAI 使用者或認知服務 OpenAI 參與者角色。
進階設定 - 部署
在此步驟中,除了標籤之外,您也可以指定部署所使用的環境。
使用目前流程定義的環境
根據預設,部署會使用根據 flow.dag.yaml
中指定的基礎映像及 requirements.txt
中所指定的相依性所建立的環境。
您可以選取流程的
Raw file mode
來指定flow.dag.yaml
中的基礎映像。 如果沒有指定映像,預設基礎映像是最新的提示流程基礎映像。您可以在流程資料夾的根資料夾中找到
requirements.txt
,並在其中新增相依性。
使用自訂環境
您也可以建立自訂的環境,並將其用於部署。
注意
自訂環境必須滿足下列需求:
- Docker 映像必須根據提示流程基礎映像來建立
mcr.microsoft.com/azureml/promptflow/promptflow-runtime-stable:<newest_version>
。 您可以在這裡找到最新版本。 - 環境定義必須包含
inference_config
。
以下是自訂環境定義的範例。
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: pf-customized-test
build:
path: ./image_build
dockerfile_path: Dockerfile
description: promptflow customized runtime
inference_config:
liveness_route:
port: 8080
path: /health
readiness_route:
port: 8080
path: /health
scoring_route:
port: 8080
path: /score
開啟 Application Insights 診斷以啟用追蹤功能 (預覽)
如果您啟用此功能,推斷時間的追蹤資料和系統計量 (例如權杖計數、流程延遲、流程要求等) 將會收集到工作區預設 Application Insights 中。 若要深入了解,請參閱提示流程服務追蹤資料和計量。
如果您想要指定與工作區連結的 Application Insights 不同的 Application Insights,您可以透過 CLI 進行設定。
進階設定 - 輸出和連線
在此步驟中,您可以檢視所有流程輸出,並指定將在部署端點的回應中包含哪些輸出。 預設會選取所有的流程輸出。
您也可以指定端點執行推斷時所使用的連線。 根據預設,會沿用流程所用的連線。
設定並檢閱上述所有步驟之後,即可選取 [檢閱+建立] 以完成建立。
將權限授與端點
重要
只有特定 Azure 資源的擁有者才能授與權限 (新增角色指派)。 您可能需要向 IT 管理員尋求協助。 建議在部署建立之前,將角色授與使用者指派的身分識別。 需要 15分鐘以上的時間所授與的權限才能生效。
您可以遵循下列步驟,在 Azure 入口網站 UI 中授與所有權限。
移至 Azure 入口網站中的 Azure Machine Learning 工作區概觀頁面。
選取 [Azure Machine Learning 工作區連線祕密讀取器],移至 [下一步]。
注意
Azure Machine Learning 工作區連線祕密讀取器是內建角色,具有取得工作區連線的權限。
如果您想要使用自訂角色,請確定自訂角色具有 "Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action" 的權限。 深入了解如何建立自訂角色。
選取 [受控識別],然後選取成員。
若為 [系統指派的身分識別],選取 [系統指派的受控識別] 底下的 [機器學習線上端點],然後依端點名稱搜尋。
若為 [使用者指派的身分識別],選取 [使用者指派的受控識別],然後依身分識別名稱搜尋。
若為使用者指派的身分識別,您也必須將權限授與工作區容器登錄和儲存體帳戶。 您可以在 Azure 入口網站的工作區概觀頁面中找到容器登錄和儲存體帳戶。
移至工作區容器登錄概觀頁面,選取 [存取控制],然後選取 [新增角色指派],然後指派 [ACR 提取 |提取容器映像] 給端點身分識別。
移至工作區預設儲存體概觀頁面,選取 [存取控制],然後選取 [新增角色指派],然後指派 [儲存體 Blob 資料讀取器] 給端點身分識別。
(選擇性) 若為使用者指派的身分識別,如果您想要監視端點的相關計量,例如 CPU/GPU/磁碟/記憶體使用率,您也必須將工作區的計量寫入器角色授與身分識別。
檢查端點的狀態
完成部署精靈之後,將會有通知。 成功建立端點和部署後,即可在端點通知詳細資訊頁面中選取 [部署詳細資訊]。
您也可以直接移至工作室中的 [端點] 頁面,並檢查您所部署之端點的狀態。
使用樣本資料測試端點
在端點詳細資料頁面中,切換至 [測試] 索引標籤。
您可以輸入值,然後選取 [測試] 按鈕。
測試結果如下所示:
測試從聊天流程部署的端點
如果是從聊天流程部署的端點,即可在沉浸式聊天視窗中進行測試。
chat_input
是在聊天流程開發期間設定的。 您可以在輸入方塊中輸入 chat_input
訊息。 右側的 [輸入] 面板可讓您指定除了 chat_input
外的其他輸入值。 深入了解如何開發聊天流程。
取用端點
在端點詳細資料頁面中,切換至 [取用] 索引標籤。您可以找到 REST 端點和金鑰/權杖來取用端點。 也有範例程式碼可供您取用不同語言的端點。
請注意,您必須根據流程輸入填入資料值。 以本文 Web 分類 中使用的範例流程為例,您必須在範例取用程式碼中指定 data = {"url": "<the_url_to_be_classified>"}
並填入金鑰或權杖。
監視端點
使用 Azure 監視器檢視受控線上端點的常見計量 (選擇性)
您可以檢視線上端點及其部署的各種計量 (要求數、要求延遲、網路位元組、CPU/GPU/磁碟/記憶體使用率等),方法是遵循工作室中端點的 [詳細資料] 頁面的連結。 遵循這些連結,即可前往 Azure 入口網站中端點或部署的確切計量頁面。
注意
如果您為端點指定使用者指派的身分識別,請確定您已將 Azure Machine Learning 工作區的工作區計量寫入器指派給使用者指派的身分識別。 否則,端點將無法記錄計量。
如需如何檢視線上端點計量的詳細資訊,請參閱監視線上端點。
檢視提示流程端點特定計量和追蹤資料 (選擇性)
如果您在 UI 部署精靈中啟用 Application Insights 診斷,則會將追蹤資料和提示流程特定計量收集到工作區連結的 Application Insights。 請參閱啟用部署追蹤的詳細資料。
針對從提示流程部署的端點進行疑難排解
缺少執行「Microsoft.MachineLearningService/workspaces/datastores/read」動作的授權
如果您的流程包含索引查閱工具,在部署流程之後,端點必須存取工作區資料存放區才能讀取 MLIndex yaml 檔案,或是包含區塊和內嵌的 FAISS 資料夾。 因此,您必須手動授與端點身分識別執行此動作的權限。
您可以為端點身分識別授與工作區範圍的 AzureML 資料科學家,或包含「MachineLearningService/workspace/datastore/reader」動作的自訂角色。
MissingDriverProgram 錯誤
如果您使用自訂環境部署流程並遇到下列錯誤,可能是因為您未在自訂環境定義中指定 inference_config
。
'error':
{
'code': 'BadRequest',
'message': 'The request is invalid.',
'details':
{'code': 'MissingDriverProgram',
'message': 'Could not find driver program in the request.',
'details': [],
'additionalInfo': []
}
}
有 2 種方式可以修正此錯誤。
(建議使用) 您可以在自訂環境詳細資料頁面中找到容器映像 URI,並將其設定為 flow.dag.yaml 檔案中的流程基礎映像。 在 UI 中部署流程時,只要選取 [使用目前流程定義的環境],後端服務就會根據此基礎映像和
requirement.txt
建立自訂環境以進行部署。 深入了解流程定義中指定的環境。您可以在自訂環境定義中新增
inference_config
,以修正此錯誤。 深入了解如何使用自訂環境。以下是自訂環境定義的範例。
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: pf-customized-test
build:
path: ./image_build
dockerfile_path: Dockerfile
description: promptflow customized runtime
inference_config:
liveness_route:
port: 8080
path: /health
readiness_route:
port: 8080
path: /health
scoring_route:
port: 8080
path: /score
模型回覆花費太長的時間
有時候,您可能會注意到部署花費的時間太長而無法回應。 發生這種情況有幾個潛在因素。
- 模型不夠強大 (例如,在 text-ada 上使用 gpt)
- 索引查詢未最佳化且花費太長的時間
- 流程有許多要處理的步驟
請考慮上述考量事項將端點最佳化,以改善模型的效能。
無法擷取部署結構描述
部署端點後想要在端點詳細資料頁面的 [測試] 索引標籤中測試它,如果 [測試] 索引標籤顯示無法擷取部署架構 (如下所示),您可以嘗試下列 2 種方法來減輕此問題:
- 請確定您已將正確的權限授與端點身分識別。 深入了解如何將權限授與端點身分識別。
拒絕存取以列出工作區秘密
如果您遇到「拒絕列出工作區祕密的存取」之類的錯誤,請檢查您是否已將正確權限授與端點身分識別。 深入了解如何將權限授與端點身分識別。
清除資源
如果您在完成本教學課程之後不會使用端點,則應該刪除端點。
注意
完整刪除可能需要大約 20 分鐘的時間。