全部產品
Search
文件中心

Platform For AI:EAS常見問題

更新時間:Oct 15, 2024

本文為您介紹線上預測的相關問題。

服務長時間處於Waiting(等待中)狀態,如何解決?

服務在部署階段後會進入到Waiting(等待中)狀態,等待資源調度和服務執行個體啟動。當所有服務執行個體均啟動成功後,服務會進入到Running(運行中)狀態。如果服務狀態長時間處於等待中時,通常可以通過服務詳情頁面的服務執行個體列表,查看服務執行個體的狀態來定位具體原因。原因一般分為如下兩類:

  • 資源不足:服務執行個體列表中所有執行個體或部分執行個體狀態為Pending。

    大部分原因在於專屬資源群組中空閑資源不足,導致執行個體無法調度。如下圖所示:8da00c3a5f2ebf7f0a110686ae473103

    此時,您可以檢查專屬資源群組中的機器節點是否有足夠多的空閑資源(包括CPU、Memory和GPU)。如果一個執行個體需要3核4 GB的資源,那麼在專屬資源群組中需要至少一個機器節點有3核4 GB的空閑資源。

    重要

    為避免在高負載時出現系統故障,機器節點需要預留1個核給系統組件,能調度的資源需要在總資源中減少一個核。

    專屬資源群組節點列表如下圖所示。如何查看資源群組詳情,請參見管理專屬資源群組image

  • 執行個體健全狀態檢查未完成:服務執行個體狀態為Running,但容器狀態一般為[0/1]或[1/2]。

    正斜線(/)前面的數字表示啟動成功的容器數量,正斜線(/)後面的數字表示總的容器數量。當您使用自訂鏡像來部署服務時,執行個體中會自動注入一個Sidecar容器用於服務的流量控制與監控採集等工作,您無需關心該容器。在控制台您會看到總容器數量為2,即包含了您的自訂容器和引擎的Sidecar容器。此時,需要2個容器狀態都為Ready時,服務執行個體才被視為啟動完成,並開始接收流量。ab1dfe90bbf7d3056c52b2dfbea196ce

服務處於Failed(失敗)狀態,如何解決?

服務會在以下兩種情況處於Failed狀態:

  • 服務部署階段:如果部署時指定的資源(如模型地址等)不存在,服務的目前狀態資訊中將顯示報錯原因,通常您可以根據報錯資訊判斷出部署失敗的原因。

  • 服務啟動階段:在服務完成部署並調度到資源開始啟動時失敗,此時會出現狀態資訊Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.

    該狀態資訊表示服務中某個執行個體啟動失敗,此時您需要在服務詳情頁面的服務執行個體列表中查看失敗狀態,來判斷具體的失敗原因。執行個體失敗有如下幾種情況:

    • 服務執行個體在啟動階段因記憶體用超發生OOM被系統殺掉,這種情況需要調大服務記憶體來重新部署。執行個體狀態如下圖所示:5c694af1e97b7d3c11cea6d6303d1540

    • 服務在啟動階段代碼錯誤發生Crash,該情況下上次狀態為Error(error code),您需要單擊執行個體操作列下的日誌按鈕進一步排查服務日誌,來定位服務啟動失敗的原因。執行個體狀態如下圖所示:93d610794f407ebfc40a862fe47a9069

    • 服務鏡像拉取失敗,這種情況在執行個體列表中您可以看到執行個體狀態為Pending,上次退出原因為ImagePullBackOff。執行個體狀態如下圖所示:22ae9fd7921e974931e7e9f5027169a5

      當您使用自訂鏡像部署服務時,如果自訂鏡像地址拉取失敗,通常會出現ImagePullBackOff的情況。您可做如下幾個方面的檢查:

      • 鏡像地址是否正確。EAS線上服務內部預設與公網不通,預設無法拉取公網鏡像地址。如果使用個人版ACR鏡像,請使用同地區的內網VPC地址來部署。如需使用公網地址來拉取鏡像,請參考下一常見問題:EAS服務內部如何訪問公網?

      • 當您選擇ACR企業版執行個體中的鏡像時,ACR企業版執行個體的專用網路配置需要和EAS的網路直連配置一致,配置方法如下:

      • 請判斷鑒權資訊是否正確。您在控制台上對EAS做過一鍵授權之後,即可對ACR鏡像倉庫中的鏡像進行免密拉取。個人版鏡像倉庫直接填鏡像地址即可,企業版鏡像倉庫需要在服務配置中通過"cloud.docker_registry.instance_id": "cr_xxx"欄位來指定企業版鏡像倉庫的執行個體ID。在使用第三方鏡像倉庫的情況下,您可以使用dockerAuth欄位來指定鏡像倉庫下載的使用者名稱和密碼。

EAS服務內部如何訪問公網?

EAS服務內部預設不通公網,如果您有訪問公網的需求,則需要通過開通到您的VPC的網路直連來實現公網訪問,同時需要確保在開通直連時選擇的VPC自身具有公網訪問的能力。若您的VPC不具備公網訪問能力,則需要為該VPC通過建立NAT Gateway來開通公網訪問能力。EAS開通直連的方法可參考文檔:

服務VPC地址調用和VPC高速直連調用有什麼區別?

  • VPC地址調用:VPC地址調用是內網SLB+網關的模式(公網地址是公網SLB+網關),這是比較經典的請求模式。在這種模式下,請求需要通過SLB的4層轉寄和網關的7層轉寄之後到達服務執行個體。在大流量高並發的情境中,通過轉寄會帶來一定的效能開銷,同時網關也會有頻寬的限制(預設1 Gbps)。

  • VPC高速直連:EAS提供了高速直連的訪問模式,既解決了效能和擴充性的問題,也無須增加額外的成本。開通VPC高速直連後,相當於打通了您的VPC和EAS服務VPC之間的網路通路。您的請求通過EAS提供的服務發現功能對服務進行定址,並在用戶端代碼中通過軟負載的方式發起負載平衡的服務要求。這個過程需要使用EAS提供的SDK來進行訪問,並將endpoint_type設定為DIRECT即可。

    例如在Python SDK使用說明的情境中,您可通過在代碼中增加如下一行代碼,來將調用由網關改為直連:

    client = PredictClient('http://pai-eas-vpc.cn-hangzhou.aliyuncs.com', 'mnist_saved_model_example')
    client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
    client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) # Direct link
    client.init()

服務日誌中出現[WARN] connection is closed: End of file或Write a Invalid stream: End of file,如何解決?

用戶端與服務端之間的串連斷開,服務端在向該串連中回寫請求結果時,發現串連已斷開後所打的warning日誌,串連斷開一般分兩種情況:

  • 服務端逾時中斷連線:在Processor模式下,服務端預設逾時時間為5秒,您可以通過服務的metadata.rpc.keepalive參數來修改。在逾時時間到達後,服務端將關閉該串連,並在服務端的監控中記錄一個408狀態代碼。

  • 用戶端逾時中斷連線:用戶端的逾時時間由您的調用端代碼中設定的逾時時間決定。因逾時未返回HTTP響應,用戶端會主動中斷連線,此時服務端的監控記錄中會記錄一個499狀態代碼。

關於服務要求狀態代碼的詳細說明,請參見:附錄:服務狀態代碼說明

Tensorflow/Pytorch processor部署的服務要求線上調試失敗,如何解決?

出於效能考慮,TensorFlow/PyTorch Processor的Request Body採用非明文的protobuf格式。目前線上調試僅支援明文的文字格式設定輸入,因此該服務暫時無法在控制台上直接進行線上調試。您可以使用EAS配套提供的SDK來進行請求訪問,各語言版本SDK可參考:服務調用SDK

為什麼RAM使用者無法自動建立或刪除EAS服務關聯角色?

只有擁有指定許可權的使用者才能自動建立或刪除AliyunServiceRoleForPaiEas。因此,當RAM使用者無法自動建立或刪除AliyunServiceRoleForPaiEas時,您需要為其添加相應的權限原則,具體操作方法如下:

  1. 通過指令碼配置的方式將如下權限原則建立為自訂策略。具體操作,請參見建立自訂權限原則

    {
      "Statement": [
        {
          "Action": "ram:CreateServiceLinkedRole",
          "Resource": "*",
          "Effect": "Allow",
          "Condition": {
            "StringEquals": {
              "ram:ServiceName": "eas.pai.aliyuncs.com"
            }
          }
        }
      ],
      "Version": "1"
    }
  2. 將上一步建立的自訂策略授權給目標RAM使用者。具體操作,請參見方式一:在RAM使用者頁面為RAM使用者授權

如何刪除預付費專屬資源群組的機器執行個體?

預付費機器未到期前無法直接刪除退訂,如有特殊原因需刪除,請聯絡您的商務經理來處理。

如何使用curl命令調用EAS線上服務?

EAS線上服務部署成功後,使用curl命令通過公網地址或VPC地址調用服務。具體操作步驟如下:

  1. 擷取服務訪問地址和Token。

    1. 模型線上服務(EAS)頁面,單擊目標服務進入服務詳情頁面。

    2. 基本資料地區中,單擊查看調用資訊

    3. 調用資訊對話方塊的公網地址調用VPC地址調用頁簽,分別擷取服務的訪問地址和Token。

  2. 使用curl命令調用服務。

    樣本如下:

    $ curl <service_url> -H 'Authorization: <service_token>' -d '[{"sex":0,"cp":0,"fbs":0,"restecg":0,"exang":0,"slop":0,"thal":0,"age":0,"trestbps":0,"chol":0,"thalach":0,"oldpeak":0,"ca":0}]'

    其中:

    • <service_url>:替換為已擷取的服務訪問地址。

    • <service_token>:替換為已擷取的Token。

    • -d:配置為服務要求資料。