日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

彈性Job服務

更新時間: 2024-11-28 14:52:05

EAS彈性Job服務支持訓練和推理場景。在訓練場景中,支持一個實例(Job)內循環執行任務,根據隊列長度自動擴縮容。在推理場景中,能感知每個請求的執行進度,做到更公平的任務調度。本文為您介紹如何使用彈性Job服務。

使用場景

訓練場景

彈性Job服務用于訓練場景:

  • 功能實現:前后端分離架構,支持部署常駐的前端服務與彈性Job服務。

  • 架構優勢:前端服務通常資源需求低,價格低廉,常駐前端服務可避免頻繁創建前端服務,減少等待時間。后端彈性Job服務支持在一個實例(Job)內循環執行訓練任務,避免實例(Job)被反復拉起和釋放,提升吞吐效率。同時,后端彈性Job服務會在隊列長度過長或過短時自動進行擴縮容,保證資源高效利用。

推理場景

彈性Job服務在模型推理場景中,能感知每個請求的執行進度實現更公平的任務調度

對于響應時間較長的推理服務,建議使用EAS異步推理服務,但異步服務存在以下問題:

  • 隊列服務推送請求時不能保證優先推送給空閑的實例,導致資源利用不足。

  • 服務實例縮容時不能保證當前實例退出時內部請求已處理完畢,可能導致請求中斷重新調度。

針對這些問題,彈性Job服務進行了優化:

  • 優化訂閱邏輯,優先推送請求到空閑實例。實例退出前阻塞等待當前請求處理完畢。

  • 提高擴縮容效率,不同于定期上報機制,隊列服務內置監控服務,快速觸發擴容,將擴縮容的響應時間從分鐘級降低到10秒左右。

基本架構

整體框架由隊列服務、HPA控制器和彈性Job服務三部分組成,如下圖所示。image.png

實現邏輯如下:

  • 隊列服務解耦請求和任務的下發與執行,使一個彈性Job服務可以處理多個不同請求或任務。

  • HPA控制器監聽隊列服務中待執行的訓練任務和請求的數量,實現彈性Job服務實例的彈性伸縮。彈性Job服務自動擴縮容的默認配置如下,更多參數說明,請參見水平自動擴縮容功能。

    {
        "behavior":{
            "onZero":{
                "scaleDownGracePeriodSeconds":60    # 縮容到0的生效時間(秒)。
            },
            "scaleDown":{
                "stabilizationWindowSeconds":1    # 縮容的生效時間(秒)。
            }
        },
        "max":10,    # 實例(Job)的最大個數。
        "min":1,     # 實例(Job)的最小個數。
        "strategies":{
            "avg_waiting_length":2    # 每個實例(Job)的平均負載閾值。
        }
    }

服務部署

部署推理服務

類似于創建異步推理服務,參照以下示例內容準備服務配置文件:

{ 
  "containers": [
    {
      "image": "registry-vpc.cn-shanghai.aliyuncs.com/eas/eas-container-deploy-test:202010091755",
      "command": "/data/eas/ENV/bin/python /data/eas/app.py",
      "port": 8000,
    }
  ],
  "metadata": {
    "name": "scalablejob",
    "type": "ScalableJob",
    "rpc.worker_threads": 4,
    "instance": 1,
  }
}

其中,type配置為ScalableJob,推理服務就會以彈性Job服務的形式部署。其他參數配置詳情,請參見服務模型所有相關參數說明。關于如何部署推理服務,請參見部署寫真相機在線推理服務

服務部署成功后,會自動創建隊列服務和彈性Job服務,同時默認啟用Autoscaler(水平自動擴縮容)的功能。

部署訓練服務

支持集成部署獨立部署兩種方式。具體的實現邏輯和配置詳情說明如下,具體部署方法,請參見部署彈性伸縮的Kohya訓練服務。

  • 實現邏輯

    image.png

    • 集成部署:EAS除了創建隊列服務和彈性Job服務外,還會創建一個前端服務。前端服務主要負責接收用戶請求,并將用戶請求轉發到隊列服務中。您可以將前端服務理解成彈性Job服務的客戶端。在此模式下,彈性Job服務會被綁定到唯一的前端服務上,此時彈性Job服務只能執行當前前端服務下發的訓練任務。

    • 獨立部署:獨立部署適用于多用戶場景,在此模式下彈性Job服務作為公共的后端服務,可以和多個前端服務綁定,每個用戶都可以在自己的前端服務下發訓練任務,后端Job服務會創建對應的Job實例來執行訓練任務,并且每個Job實例可以依次執行不同的訓練任務,實現多個用戶共享訓練資源。不用多次創建訓練任務,有效降低使用成本。

  • 配置說明

    在部署彈性Job服務時,您需要提供一個自定義鏡像環境(kohya場景可直接使用EAS預置的kohya_ss鏡像)。該鏡像需包含執行訓練任務的所有依賴,只是作為訓練任務的執行環境,因此不需要配置啟動命令和端口號。如果您需要在訓練任務開始前執行一些初始化任務,可以配置初始化命令,EAS會在實例(Job)內部單獨創建一個進程來執行初始化任務。如何準備自定義鏡像,請參見服務部署:自定義鏡像。EAS的預置鏡像地址為:eas-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai-eas/kohya_ss:2.2。

    集成部署

    參照下方示例準備服務配置文件,以EAS提供的預置鏡像(kohya_ss)為例:

    {
        "containers": [
            {
                "image": "eas-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai-eas/kohya_ss:2.2"
            }
        ],
        "metadata": {
            "cpu": 4,
            "enable_webservice": true,
            "gpu": 1,
            "instance": 1,
            "memory": 15000,
            "name": "kohya_job",
            "type": "ScalableJobService"
        },
        "front_end": {
            "image": "eas-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai-eas/kohya_ss:2.2",
            "port": 8001,
            "script": "python -u kohya_gui.py --listen 0.0.0.0 --server_port 8001 --data-dir /workspace --headless --just-ui --job-service"
        }
    }

    其中關鍵配置說明如下,其他參數配置說明,請參見服務模型所有相關參數說明

    • type配置為ScalableJobService。

    • 前端服務使用的資源組默認和彈性Job服務相同,系統默認分配的資源為2核CPU和8 GB內存。

      • 參考以下示例自定義配置資源組或資源:

        {
            "front_end": {
              "resource": "",   # 修改前端服務使用專屬資源組。
              "cpu": 4,
              "memory": 8000
            }
        }
      • 參考以下示例自定義配置部署的機型:

        {
            "front_end": {
                "instance_type": "ecs.c6.large"
            }
        }

    獨立部署

    參照下方示例準備服務配置文件,以EAS提供的預置鏡像(kohya_ss)為例:

    {
      "containers": [
        {
          "image": "eas-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai-eas/kohya_ss:2.2"
        }
      ],
      "metadata": {
        "cpu": 4,
        "enable_webservice": true,
        "gpu": 1,
        "instance": 1,
        "memory": 15000,
        "name": "kohya_job",
        "type": "ScalableJob"
      }
    }

    其中,type需要配置為ScalableJob,其他參數配置說明,請參見服務模型所有相關參數說明

    在此模式下,需要用戶手動部署前端服務,并在前端服務內部實現請求的代理,將接收到的請求轉發到彈性Job服務的隊列內部,完成前端服務和后端Job服務的綁定,詳情請參見向隊列服務發送數據

服務調用

為了區分訓練場景和推理場景,在調用彈性Job服務時,需設置taskTypecommandquery來標識。其中:

  • command:用來標識訓練服務。

  • query:用來標識推理服務。

調用服務時需顯式地指定taskType,示例如下:

  • HTTP調用: 如果是推理服務,Wanted_TaskType替換為query。

    curl http://166233998075****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/scalablejob?taskType={Wanted_TaskType} -H 'Authorization: xxx' -D 'xxx'
  • SDK調用時需要指定tags,通過該參數來配置taskType。下面示例中,如果是推理服務,將 wanted_task_type替換為query。

    # 創建輸入隊列,用于發送任務或請求。
    queue_client = QueueClient('166233998075****.cn-shanghai.pai-eas.aliyuncs.com', 'scalabejob')
    queue_client.set_token('xxx')
    queue_client.init()
    
    tags = {"taskType": "wanted_task_type"}
    # 向輸入隊列發送任務或請求。
    index, request_id = inputQueue.put(cmd, tags)

獲取結果:

配置日志收集

EAS彈性Job服務提供了enable_write_log_to_queue配置,通過該配置可以將實時日志寫入隊列。

{
  "scalable_job": {
    "enable_write_log_to_queue": true
  }
}
  • 訓練場景:默認開啟,實時日志回寫到輸出隊列,您可通過EAS隊列服務SDK實時獲取訓練日志。詳情請參見自定義前端服務鏡像調用彈性Job服務。

  • 推理場景:默認關閉,日志只能通過stdout輸出。

相關文檔

關于EAS彈性Job服務更詳細的使用場景介紹,請參見:

上一篇: 隊列服務訂閱推送 下一篇: 部署彈性伸縮的Kohya訓練服務
阿里云首頁 人工智能平臺 PAI 相關技術圈