將流程部署為受控線上端點以進行即時推斷

建置流程並對其進行正確測試之後,您可能會想要將其部署為端點,以便叫用端點進行即時推斷。

在本文中,您將了解如何將流程部署為受控線上端點以進行即時推斷。 您將要採取的步驟如下:

重要

本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本會在沒有服務等級協定的情況下提供,不建議用於實際執行工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

必要條件

  • 了解如何在提示流程中建置和測試流程

  • 對受控線上端點有基本的了解。 受控線上端點會以可調整、完全受控的方式,使用 Azure 中強大的 CPU 和 GPU 機器,讓您省去設定和管理基礎的部署基礎結構的額外負荷。 如需受控線上端點的詳細資訊,請參閱進行即時推斷所需的線上端點和部署

  • Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 為了能夠在提示流程中部署端點,必須為您的使用者帳號指派 AzureML 資料科學家或具有更多 Azure Machine Learning 工作區權限的角色。

  • 對受控識別有基本了解。 深入了解受控識別。

建置流程並準備好進行部署

如果已完成入門教學課程,您已經透過提交批次執行及評估結果來正確測試流程。

如果您沒有完成本教學課程,則需要建置一個流程。 建議的最佳做法是先透過批次執行和評估來正確測試流程,再進行部署。

我們將使用範例流程 Web 分類作為範例,示範如何部署流程。 此範例流程是標準流程。 部署聊天流程也是類似這樣。 評估流程不支援部署。

定義部署所使用的環境

在 UI 中將提示流程部署到受控線上端點時,部署預設會使用根據流程 requirements.txt 中指定的最新提示流程映像和相依性所建立的環境。 您可以指定 requirements.txt 中所需的額外套件。 您可以在流程資料夾的根資料夾中找到 requirements.txt

流程需求文字的螢幕快照。

如果您使用客戶環境來建立計算執行個體執行階段,即可在 Azure Machine Learning 工作室的環境詳細資料頁面中找到此映像。 若要深入了解,請參閱使用適用於執行階段的 Docker 內容自訂環境

環境詳細數據頁面中影像名稱的螢幕快照。

然後,您也需要將映像指定至流程資料夾的 flow.dag.yaml 中的 environment

自訂流程頁面上自動運行時間環境的螢幕快照。

注意

如果您在 Azure devops 中使用私人摘要,您必須先建置具有私人摘要的映像,然後選取要在 UI 中部署的自訂環境。

建立線上部署

現在您已建置並正確測試流程,就可以建立線上端點進行即時推斷。

提示流程支援從流程或批次執行部署端點。 建議的最佳做法是先測試流程再進行部署。

在流程製作頁面或執行詳細資料頁面中,選取 [部署]

流程製作頁面

流程撰寫頁面上 Web 分類的螢幕快照。

執行詳細資料頁面

[執行詳細數據] 頁面上的 [Web 分類] 螢幕快照。

您設定端點的精靈會出現並包含下列步驟。

基本設定

端點頁面上部署精靈的螢幕快照。

此步驟可讓您設定部署的基本設定。

屬性 說明
端點 您可以選取是要部署新的端點或更新現有的端點。
如果您選取 [新增],則必須指定端點名稱。
部署名稱 - 在相同的端點內,部署名稱應該是唯一的。
- 如果您選取現有的端點,並輸入現有的部署名稱,則會以新的組態覆寫該部署。
虛擬機器 要用於部署的 VM 大小。 如需支援的大小清單,請參閱受控線上端點 SKU 清單
執行個體計數 要用於部署的執行個體數目。 指定您預期的工作負載上的值。 為了達到高可用性,建議您將值至少設定為 3。 我們會額外保留 20% 來執行升級。 如需詳細資訊,請參閱受控線上端點配額
推斷資料收集 如果您啟用此功能,將會在 Azure Machine Learning 資料資產中自動收集流程輸入和輸出,可於稍後的監視中使用。 若要深入了解,請參閱如何監視生成式 AI 應用程式
Application Insights 診斷 如果您啟用此功能,推斷時間的系統計量 (例如權杖計數、流程延遲、流程要求等) 將會收集到工作區預設 Application Insights 中。 若要深入了解,請參閱提示流程服務計量

完成基本設定之後,即可直接選取 [檢閱+建立] 以完成建立,也可以選取 [下一步] 來設定 [進階設定]

進階設定 - 端點

您可以指定端點的下列設定。

部署精靈端點設定的螢幕快照。

驗證類型

端點的驗證方法。 金鑰型驗證提供未過期的主要和次要金鑰。 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/磁碟/記憶體使用率,您必須將此許可權授與身分識別。

請參閱將權限授與端點中有關如何將權限授與端點身分識別的詳細指引。

進階設定 - 部署

在此步驟中,除了標籤之外,您也可以指定部署所使用的環境。

部署環境的螢幕快照。

使用目前流程定義的環境

根據預設,部署會使用根據 flow.dag.yaml 中指定的基礎映像及 requirements.txt 中所指定的相依性所建立的環境。

  • 您可以選取流程的 Raw file mode 來指定 flow.dag.yaml 中的基礎映像。 如果沒有指定映像,預設基礎映像是最新的提示流程基礎映像。

    在流程的原始 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

進階設定 - 輸出和連線

在此步驟中,您可以檢視所有流程輸出,並指定將在部署端點的回應中包含哪些輸出。 預設會選取所有的流程輸出。

您也可以指定端點執行推斷時所使用的連線。 根據預設,會沿用流程所用的連線。

設定並檢閱上述所有步驟之後,即可選取 [檢閱+建立] 以完成建立。

注意

預期建立端點需要大約 15 分鐘以上的時間,因為其包含數個階段,包括建立端點、登錄模型、建立部署等。

您可以透過提示流程部署起始的通知來了解部署建立進度。 部署通知的螢幕快照。

將權限授與端點

重要

只有特定 Azure 資源的擁有者才能授與權限 (新增角色指派)。 您可能需要向 IT 管理員尋求協助。 建議在部署建立之前,將角色授與使用者指派的身分識別。 需要 15分鐘以上的時間所授與的權限才能生效。

您可以遵循下列步驟,在 Azure 入口網站 UI 中授與所有權限。

  1. 移至 Azure 入口網站中的 Azure Machine Learning 工作區概觀頁面。

  2. 選取 [存取控制],然後選取 [新增角色指派]醒目提示 [新增角色指派] 的訪問控制螢幕快照。

  3. 選取 [Azure Machine Learning 工作區連線祕密讀取器],移至 [下一步]

    注意

    Azure Machine Learning 工作區連線祕密讀取器是內建角色,具有取得工作區連線的權限。

    如果您想要使用自訂角色,請確定自訂角色具有 "Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action" 的權限。 深入了解如何建立自訂角色

  4. 選取 [受控識別],然後選取成員。

    若為 [系統指派的身分識別],選取 [系統指派的受控識別] 底下的 [機器學習線上端點],然後依端點名稱搜尋。

    若為 [使用者指派的身分識別],選取 [使用者指派的受控識別],然後依身分識別名稱搜尋。

  5. 若為使用者指派的身分識別,您也必須將權限授與工作區容器登錄和儲存體帳戶。 您可以在 Azure 入口網站的工作區概觀頁面中找到容器登錄和儲存體帳戶。

    醒目提示記憶體和容器登錄的概觀頁面螢幕快照。

    移至工作區容器登錄概觀頁面,選取 [存取控制],然後選取 [新增角色指派],然後指派 [ACR 提取 |提取容器映像] 給端點身分識別。

    移至工作區預設儲存體概觀頁面,選取 [存取控制],然後選取 [新增角色指派],然後指派 [儲存體 Blob 資料讀取器] 給端點身分識別。

  6. (選擇性) 若為使用者指派的身分識別,如果您想要監視端點的相關計量,例如 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 診斷,或使用程式碼在部署定義中設定 app_insights_enabled=true,則會在工作區預設 Application Insights 中收集下列提示流程端點特定計量。

計量名稱 類型 維度 描述
token_consumption 計數器 - flow
- node
- llm_engine
- token_type:prompt_tokens:LLM API 輸入權杖;completion_tokens:LLM API 回應權杖;total_tokens = prompt_tokens + completion tokens
openai 權杖取用計量
flow_latency 長條圖 flow,response_code,streaming,response_type 要求執行成本,response_type 表示其是否為 full/firstbyte/lastbyte
flow_request 計數器 flow,response_code,exception,streaming 流程要求計數
node_latency 長條圖 flow,node,run_status 節點執行成本
node_request 計數器 flow,node,exception,run_status 節點執行計數
rpc_latency 長條圖 flow,node,api_call rpc 成本
rpc_request 計數器 flow,node,api_call,exception rpc 計數
flow_streaming_response_duration 長條圖 流程 串流回應傳送成本,從傳送第一個位元組到傳送最後一個位元組

您可以在 Azure 入口網站的工作區頁面中找到工作區預設 Application Insights。

工作區預設 Application Insights 的螢幕快照。

開啟 Application Insights,然後從左側導覽列中選取 [使用量和估計成本]。 選取 [自訂計量 (預覽)],然後選取 [使用維度],並儲存變更。

啟用多維度計量的螢幕快照。

選取左側導覽列中的 [計量] 索引標籤。 從 [計量命名空間] 選取 [promptflow 標準計量],即可從 [計量] 下拉式清單中使用不同的彙總方法來探索計量。

提示流程端點計量的螢幕快照。

針對從提示流程部署的端點進行疑難排解

缺少執行動作的授權“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 建立自訂環境以進行部署。 深入了解流程定義中指定的環境。

    自訂環境詳細數據頁面的螢幕快照。

    在流程的原始 yaml 檔案中指定基底映像的螢幕快照。

  • 您可以在自訂環境定義中新增 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 分鐘的時間。

後續步驟