本文說明如何解決將代理部署至 Agent Runtime 時可能遇到的錯誤。涵蓋多種常見問題,包括序列化失敗、權限錯誤和 VPC-SC 邊界違規。
注意:如要搜尋及篩選代理錯誤記錄,請使用 Logs Explorer,將 RESOURCE TYPE 設為「Vertex AI 推論引擎」,然後選取對應的 RESOURCE CONTAINER 值 (即專案編號) 和 REASONING ENGINE ID 值。
預建範本錯誤
如果在部署期間遇到 LangchainAgent 範本問題,可能是本節所述的問題之一。
內部伺服器錯誤
問題:
您會收到類似下方的錯誤訊息:
InternalServerError: 500 Revision YYY is not ready and cannot serve traffic.
很抱歉,這項錯誤涵蓋了容器在執行階段發生的所有問題,可能原因有很多。
可能原因:
LangchainAgent的髒狀態。如果部署代理前,在LangchainAgent上呼叫.set_up(),就可能發生這種情況。- 套件版本不一致。如果開發環境中安裝的套件,與 Agent Runtime 遠端環境中安裝的套件不同,就可能發生這種情況。
建議解決方案:
LangchainAgent的髒狀態。部署代理前,請先例項化LangchainAgent的新例項,或從程式碼中移除agent.set_up()。- 套件規格不一致。請參閱序列化錯誤的疑難排解一節。
序列化錯誤
一般來說,部署代理程式時,請務必確保「本機」和「遠端」環境保持同步。部署代理程式時,請務必指定 requirements=。
如果遇到序列化問題 (與「pickle」或「pickling」相關的錯誤與「序列化」錯誤同義),可能是本節所述的問題之一所致。
Pydantic 版本
問題:
您會收到類似下方的錯誤訊息:
PicklingError: Can't pickle <cyfunction str_validator at 0x7ca030133d30>: it's
not the same object as pydantic.validators.str_validator
可能原因:
如果 pydantic 套件版本早於 2.6.4,就可能發生這種情況。如要查看您使用的版本,請在終端機中執行下列指令:
pip show pydantic建議解決方案:
在終端機中執行下列指令,更新套件:
pip install pydantic --upgrade在終端機中執行下列指令,確認您使用的是 2.6.4 以上版本:
pip show pydantic如果您使用的是筆記本執行個體 (例如 Jupyter、Colab 或 Workbench),可能需要重新啟動執行階段,才能使用更新後的套件。
Cloudpickle 版本
問題:
您會收到類似下方的錯誤訊息:
AttributeError: Can't get attribute '_class_setstate' on <module 'cloudpickle.cloudpickle'
from '/usr/local/lib/python3.10/site-packages/cloudpickle/cloudpickle.py'>
可能原因:
如果開發環境和部署環境中的 cloudpickle 套件版本不同,就可能發生這種情況。如要查看開發時使用的版本,請在終端機中執行下列指令:
pip show cloudpickle建議解決方案:
在兩個環境 (例如本機開發環境和遠端部署的代理) 中部署相同版本的 cloudpickle,方法是在部署代理時指定 requirements=。
內部伺服器錯誤
問題:
您會收到類似下方的錯誤訊息:
InternalServerError: 500 Revision YYY is not ready and cannot serve traffic.
可能原因:
部署代理時,如果 sys_version= 與開發環境不同,就可能發生這種情況。
建議解決方案:
部署代理後,建議您從輸入引數中移除 sys_version=。如果問題仍未解決,請提交錯誤報告。
Cloud Storage bucket 錯誤
如果 Cloud Storage 暫存 bucket 發生問題,導致無法在部署時收集及上傳代理程式,可能是下列原因造成:
權限錯誤
建議解決方案:
如要使用現有 bucket,請確認通過驗證、可使用 Agent Platform 的主體 (您自己或服務帳戶) 具備 bucket 的 Storage Admin 存取權,並將權限授予服務帳戶。
或者,您也可以在部署代理程式時指定新的 bucket,SDK 會建立具有必要權限的 bucket。
如果問題仍未解決,請提交錯誤報告。
未建立 Cloud Storage bucket 子目錄
問題:
您會收到類似下方的錯誤訊息:
NotFound: 404 Can not copy from \"gs://[LOCATION]-*/agent_engine/agent_engine.pkl\" to \"gs://*/code.pkl\", check if the source object and target bucket exist.
(系統嘗試複製到不存在的資料夾時,就會發生 404 錯誤)。
可能原因:
這可能是因為 google-cloud-aiplatform 1.49.0 以前版本的字串內插有問題。這個問題已在後續版本中修正。如要查看您使用的 google-cloud-aiplatform 版本,請在終端機中執行下列指令:
pip show google-cloud-aiplatform建議解決方案:
在終端機中執行下列指令,更新套件:
pip install google-cloud-aiplatform --upgrade在終端機執行下列指令,確認您使用的是 google-cloud-aiplatform 1.49.0 以上版本:
pip show google-cloud-aiplatform如果您使用的是筆記本執行個體 (例如 Jupyter、Colab 或 Workbench),可能需要重新啟動執行階段,才能使用更新後的套件。
VPC-SC 違規錯誤
如果 VPC-SC 發生問題,可能是下列原因造成:
權限錯誤
問題:
您會收到類似下方的錯誤訊息:
Reasoning Engine instance REASONING_ENGINE_ID failed to start and cannot serve traffic.
或:
Request is prohibited by organization's policy.
可能原因:
這可能是因為 VPC-SC perimeter 缺少必要的輸入規則。
建議解決方案:
如果您在 VPC-SC 環境中使用 Agent Platform,必須在 perimeter 建立輸入規則,允許從 推論引擎 服務代理 (service-PROJECT_NUMBER@gcp-sa-aiplatform-re.s3ns-system.iam.gserviceaccount.com) 輸入至 storage.googleapis.com 服務和 artifactregistry.googleapis.com 服務。
自訂服務帳戶錯誤
如果服務帳戶發生問題,可能的原因如下:
以服務帳戶身分操作
問題:
您會收到類似下方的錯誤訊息:
You do not have permission to act as service_account.
可能原因:
您可能沒有部署用自訂服務帳戶的 iam.serviceAccounts.actAs 權限。請注意,在有多個自訂服務帳戶的多代理系統中,一位代理作者或部署者可以充當部分服務帳戶。如果使用的服務帳戶有誤,就會發生這項錯誤
此外,如果自訂服務帳戶與部署代理程式的專案不同,且服務帳戶專案強制執行 iam.disableCrossProjectServiceAccountUsage 組織政策,也可能發生這項錯誤。
如需這個情境的必要設定完整清單,請參閱「跨專案自訂服務帳戶」。
建議解決方案:
請確認您使用的是預期的服務帳戶。檢查您是否具備這個服務帳戶的服務帳戶使用者 (roles/iam.serviceAccountUser) 角色。如果沒有,請要求管理員授予您這個服務帳戶的角色。
如果您處於跨專案情境,請檢查服務帳戶專案是否已強制執行 iam.disableCrossProjectServiceAccountUsage 組織政策。如果是,請要求管理員停用政策。
無法使用中繼資料伺服器
問題:
您會收到類似下方的錯誤訊息:
ServiceUnavailable: 503 Getting metadata from plugin failed with error
或
Compute Engine Metadata server unavailable due to : Could not fetch URI /computeMetadata/v1/instance/service-accounts/default/token
可能原因:
如果自訂服務帳戶和代理位於不同專案,且 AI 平台推論引擎服務代理沒有自訂服務帳戶的 iam.serviceAccounts.getAccessToken 權限,就可能發生這種情況。
如需這個情境的必要設定完整清單,請參閱「跨專案自訂服務帳戶」。
建議解決方案:
請管理員將自訂服務帳戶的服務帳戶權杖建立者 (roles/iam.serviceAccountTokenCreator) 角色,授予代理專案的 AI 平台推論引擎服務代理。
AI 平台推論引擎服務代理應位於您用來部署代理的專案中。角色授權的 IAM 繫結應位於自訂服務帳戶所在的專案中。
資源用盡或頻率限制錯誤 (錯誤 429)
問題:
部署作業失敗,狀態為 Error 429 或 RESOURCE_EXHAUSTED。
可能原因:
專案已超過 API 頻率限制或並行要求配額。
建議解決方案:
- 在部署指令碼中,導入指數輪詢和重試策略。
- 請前往「Agent Platform API」的 Cloud de Confiance 「配額」頁面,確認目前用量是否超出限制。
- 降低並行部署作業的頻率。
區域暫時無法處理要求
問題:
部署作業失敗,狀態為 429、RESOURCE_EXHAUSTED,並顯示訊息,指出該區域的記憶體或 CPU 總量暫時達到上限。
可能原因:
某個區域中的代理部署作業會使用 Agent Runtime 代為管理的服務容量集區,該區域的所有客戶都會共用這個集區。集區用盡後,該區域的新部署作業會失敗,直到容量釋出為止。
這項限制不屬於專案配額。這項限制不會顯示在Cloud de Confiance 「Quotas」(配額) 頁面,也無法透過要求提高配額來提高。
建議解決方案:
- 部署至其他支援的地區。這是解除部署作業封鎖的最快方法。
- 請稍後再試一次。區域容量不足是暫時性問題,通常會自行解決。
- 請為代理要求較少的記憶體或 CPU。較小的部署作業可能適合剩餘容量。
- 如果某個區域的部署作業持續失敗,請與支援團隊聯絡。雖然我們無法提高上限,但您的回報有助於我們將資源分配到需要的地方。
不適用的解決方案:
- 刪除現有代理並不會釋出容量,因為容量並非僅由您的專案使用。
- 由於這項限制並非專案配額,因此申請提高配額不會有任何效果。
執行個體數量上限超過區域限制
問題:
部署作業失敗,狀態為 429、RESOURCE_EXHAUSTED,並顯示訊息,指出 spec.deployment_spec.max_instances 超過該區域 resource_limits 中所要求 CPU 或記憶體支援的執行個體數量上限。
可能原因:
部署代理時,Agent Runtime 會將 spec.deployment_spec.max_instances 乘以 spec.deployment_spec.resource_limits 中每個執行個體的 cpu 和 memory,並檢查這個代理的分配量上限是否符合基礎服務專案的區域限制。如未指定 max_instances,Agent Runtime 會套用預設值 (例如 200),在限制較低的區域,這個值乘以設定的每個執行個體 cpu 或 memory 後,可能會超過支援的執行個體數量上限。
建議解決方案:
- 將
spec.deployment_spec.max_instances設為錯誤訊息中顯示的最大值 (或更小)。 - 降低
spec.deployment_spec.resource_limits中每個執行個體的cpu或memory值。 - 將代理部署至其他支援的地區,並提高限制。
不適用的解決方案:
- 在專案的「 Cloud de Confiance 配額」頁面要求提高配額不會有任何效果,因為這項限制是在 Google 代管的服務專案上強制執行,而非您的專案。
- 刪除專案中的其他代理,或在不變更
max_instances或resource_limits的情況下重試,都無法解決這項錯誤,因為檢查作業會根據靜態限制評估單一部署作業的尖峰分配量。
Secret Manager 存取錯誤
問題:
部署作業失敗,狀態為 400、INVALID_ARGUMENT (REASONING_ENGINE_SECRET_ACCESS_DENIED),並顯示類似下列的訊息:
The Reasoning Engine could not access `projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/VERSION_ID` referenced by `spec.deployment_spec.secret_env` (reason: FAILURE_REASON).
可能原因:
NOT_FOUND:secret_env中指定的密鑰 ID 或版本 ID,不存在於部署代理程式所在專案的 Secret Manager 中,或含有錯字。DESTROYED或DISABLED:Secret Manager 中參照的密鑰版本處於已刪除或停用狀態。PERMISSION_DENIED:代理使用的服務帳戶沒有參照 Secret 的 Secret Manager Secret 存取者角色 (roles/secretmanager.secretAccessor)。
建議解決方案:
NOT_FOUND、DESTROYED或DISABLED:- 在部署代理的專案中,前往 Secret Manager 頁面,確認
secret_env參照的每個SECRET_ID和VERSION_ID都存在,且處於「已啟用」狀態。 - 如果參照的版本已停用或刪除,請啟用有效版本,或更新
secret_env以參照已啟用的版本。
- 在部署代理的專案中,前往 Secret Manager 頁面,確認
PERMISSION_DENIED:將 Secret (或包含 Secret 的專案) 的 Secret Manager Secret 存取者角色 (roles/secretmanager.secretAccessor) 授予擷取 Secret 的服務帳戶:- 預設服務帳戶:將角色授予 AI 平台 Reasoning Engine 服務代理 (
service-PROJECT_NUMBER@gcp-sa-aiplatform-re.s3ns-system.iam.gserviceaccount.com)。 - 自訂服務帳戶:將角色授予代理上設定的自訂服務帳戶。
- 預設服務帳戶:將角色授予 AI 平台 Reasoning Engine 服務代理 (
容器映像檔建構作業逾時
問題:
部署作業失敗,狀態為 504、DEADLINE_EXCEEDED (REASONING_ENGINE_BUILD_TIMEOUT),並顯示訊息,指出代理程式的容器映像檔未及時完成建構。
可能原因:
從來源檔案部署時,Agent Runtime 會建構容器映像檔,安裝程式碼和依附元件。如果建構作業在允許的時間內仍未完成,部署作業就會失敗。建構作業通常會因為安裝依附元件而耗費過多時間,例如:
requirements中有許多套件,包括代理程式未使用的套件。- 建構環境沒有預先建構的 wheel,因此在建構期間會從來源編譯。
- 未固定或鬆散固定的版本,會減慢依附元件解析速度。
建議解決方案:
- 請查看錯誤中繼資料
logs_url欄位連結的建構記錄,瞭解建構作業停止時正在執行的步驟。 - 移除不必要的依附元件,並固定所有必要套件的版本。
- 優先使用發布預建 wheel 的套件和版本,這樣建構期間就不會編譯任何內容。
- 重試部署作業。有時建構作業的執行時間會比平常長,原因與程式碼無關。
容器未及時啟動
問題:
部署作業失敗,狀態為 504、DEADLINE_EXCEEDED (REASONING_ENGINE_CONTAINER_START_TIMEOUT),並顯示訊息,指出代理程式的容器未及時開始提供服務。
可能原因:
建構映像檔後,Agent Runtime 會啟動代理的容器,並等待容器準備就緒,可以處理要求。如果容器在允許的時間內仍未啟動,部署作業就會失敗。常見原因包括:
- 匯入時作業緩慢,例如匯入代理模組時載入大型模型或檔案。
- 代理程式
set_up()方法中的工作速度緩慢或遭到封鎖,例如網路呼叫等待無法連線的服務。
建議解決方案:
- 請查看錯誤中繼資料
logs_url欄位中連結的容器記錄,瞭解啟動作業停滯的位置。 - 請將耗費資源的初始化作業移出模組匯入時間,並盡可能減少
set_up()快速路徑中的步驟數量。延後處理第一個要求不需要的工作。 - 請確認代理程式在啟動期間呼叫的任何服務,都能從代理程式連線,並為這些呼叫設定逾時,以免無限期封鎖啟動。
- 如果容器記錄顯示代理程式正常啟動,請重試部署作業。有時啟動時間可能比平常長,原因與程式碼無關。
支援資源
如果問題仍未解決,請參閱支援指南尋求協助。