使用Knative在ACK叢集中部署Stable Diffusion時,Knative支援根據單個Pod處理請求的吞吐率精準地控制單個Pod請求並發處理數,保證服務穩定性,還能在業務沒有流量時自動將執行個體縮容至零,節省GPU資源的使用成本。
前提條件
已建立包含GPU節點的ACK叢集,且叢集版本為1.24及以上。具體操作,請參見建立Kubernetes託管版叢集。
推薦選擇機型為ecs.gn5-c4g1.xlarge、ecs.gn5i-c8g1.2xlarge或ecs.gn5-c8g1.2xlarge。
已在叢集中部署Knative,請參見部署Knative。
實現流程
您應當自覺遵守第三方模型Stable Diffusion的使用者協議、使用規範和相關法律法規,阿里雲不對Stable Diffusion模型的合法性、安全性、準確性進行任何保證,且不對由此引發的任何損害承擔責任。
隨著產生型AI技術能力的提升,大家越來越關注通過AI模型提升研發效率。Stable Diffusion作為AIGC領域的知名專案,可以協助您快速、準確地產生所需情境及圖片。但目前使用Stable Diffusion會面臨如下問題:
單個Pod處理請求的吞吐率有限,如果多個請求轉寄到同一個Pod,會導致服務端過載異常,因此需要精準地控制單個Pod請求並發處理數。
由於GPU資源很珍貴,期望做到按需使用資源,並在業務低穀及時釋放GPU資源。
基於以上兩個問題,阿里雲Container Service提供Knative解決方案,可以做到基於並發請求數精準處理,實現自動彈性擴縮容,打造生產可用的Stable Diffusion服務。具體實現流程如下所示。
步驟一:部署Stable Diffusion服務
您需確保Stable Diffusion服務被正確部署在GPU節點上,否則服務將無法使用。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
部署Stable Diffusion服務。
ACK Knative提供了熱門 App模板。您可以通過應用模板快速部署,也可以通過YAML來部署。
應用模板
單擊熱門 App頁簽,在Stable Diffusion服務的卡片上完成一鍵部署。
部署後,您可以單擊服務管理,在服務列表查看部署進度。
如圖所示,表明服務已部署成功。
YAML
單擊服務管理頁簽,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立,建立一個名為knative-sd-demo的服務。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: knative-sd-demo annotations: serving.knative.dev.alibabacloud/affinity: "cookie" serving.knative.dev.alibabacloud/cookie-name: "sd" serving.knative.dev.alibabacloud/cookie-timeout: "1800" spec: template: metadata: annotations: autoscaling.knative.dev/class: kpa.autoscaling.knative.dev autoscaling.knative.dev/maxScale: '10' autoscaling.knative.dev/targetUtilizationPercentage: "100" k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge,ecs.gn5i-c8g1.2xlarge,ecs.gn5-c8g1.2xlarge spec: containerConcurrency: 1 containers: - args: - --listen - --skip-torch-cuda-test - --api command: - python3 - launch.py image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion@sha256:62b3228f4b02d9e89e221abe6f1731498a894b042925ab8d4326a571b3e992bc imagePullPolicy: IfNotPresent ports: - containerPort: 7860 name: http1 protocol: TCP name: stable-diffusion readinessProbe: tcpSocket: port: 7860 initialDelaySeconds: 5 periodSeconds: 1 failureThreshold: 3
如圖所示,表明knative-sd-demo服務已部署成功。
步驟二:訪問服務
在服務管理頁簽,擷取服務的訪問網關和預設網域名稱。
將knative-sd-demo服務的網關地址與需要訪問的網域名稱進行Host綁定,在Hosts檔案中添加綁定資訊。綁定樣本如下。
47.xx.xxx.xx knative-sd-demo.default.example.com # 替換為實際的網關IP和網域名稱。
完成Host綁定後,在服務管理頁簽,單擊knative-sd-demo服務的預設網域名稱,即可訪問Stable Diffusion。
如圖所示,可通過網域名稱直接對Stable Diffusion進行訪問。
步驟三:基於請求實現自動彈性擴縮容
使用Hey壓測工具,執行壓測。
說明Hey壓測工具的詳細介紹,請參見Hey。
hey -n 50 -c 5 -t 180 -m POST -H "Content-Type: application/json" -d '{"prompt": "pretty dog"}' http://knative-sd-demo.default.example.com/sdapi/v1/txt2img
發送50個請求,並發數為5,請求逾時時間為180秒。
預期輸出:
Summary: Total: 252.1749 secs Slowest: 62.4155 secs Fastest: 9.9399 secs Average: 23.9748 secs Requests/sec: 0.1983 Response time histogram: 9.940 [1] |■■ 15.187 [17] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 20.435 [9] |■■■■■■■■■■■■■■■■■■■■■ 25.683 [11] |■■■■■■■■■■■■■■■■■■■■■■■■■■ 30.930 [1] |■■ 36.178 [1] |■■ 41.425 [3] |■■■■■■■ 46.673 [1] |■■ 51.920 [2] |■■■■■ 57.168 [1] |■■ 62.415 [3] |■■■■■■■ Latency distribution: 10% in 10.4695 secs 25% in 14.8245 secs 50% in 20.0772 secs 75% in 30.5207 secs 90% in 50.7006 secs 95% in 61.5010 secs 0% in 0.0000 secs Details (average, fastest, slowest): DNS+dialup: 0.0424 secs, 9.9399 secs, 62.4155 secs DNS-lookup: 0.0385 secs, 0.0000 secs, 0.3855 secs req write: 0.0000 secs, 0.0000 secs, 0.0004 secs resp wait: 23.8850 secs, 9.9089 secs, 62.3562 secs resp read: 0.0471 secs, 0.0166 secs, 0.1834 secs Status code distribution: [200] 50 responses
可以看到持續發送了50個請求,請求成功率為100%。
執行如下命令,可即時觀察Pod擴縮容情況。
watch -n 1 'kubectl get po'
由於部署Stable Diffusion服務時配置了單Pod的最大並發數是1 (
containerConcurrency: 1
),因此壓測期間自動擴容了5個Pod。
步驟四:查看Stable Diffusion服務監控資料
Knative提供開箱即用的可觀測能力,在Knative頁面,單擊監控大盤頁簽,即可查看Stable Diffusion服務的監控資料情況。如何開啟Knative監控大盤,請參見查看Knative服務監控大盤。
在Overview (average over the selected time range)地區,可查看Stable Diffusion服務的請求量(Request Volume)、請求成功率(Success Rate)、4xx(用戶端錯誤)、5xx(伺服器端錯誤)和Pod擴縮容趨勢的監控資料。
在Response Time地區,查看Knative的響應延遲資料,包括P50、P90、P95和P99。
相關文檔
如果您需要在Knative中部署AI模型推理服務,可參見在Knative中部署AI模型推理服務的最佳實務擷取配置建議。