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

在TDX節點池中使用CPU加速Stable Diffusion XL Turbo的文生圖推理

您可以在ACK集群使用阿里云第八代企業級實例ECS g8i作為Worker節點,并結合IPEX技術來加速文生圖模型的推理速度。您也可以在集群中創建TDX機密虛擬機節點池,并將示例服務遷移至其中,提升推理服務數據的安全性。本文以Stable Diffusion XL Turbo模型為例,介紹如何在合理運用CPU加速策略和模型推理的前提下,基于g8i CPU實例獲得類似于GPU實例的使用體驗,實現穩定、高效、高性價比且安全機密的文生圖服務。

背景信息

阿里云第八代企業級實例g8i

阿里云第八代企業級通用計算實例ECS g8i采用CIPU+飛天技術架構,搭載最新的Intel第五代至強可擴展處理器(代號EMR),性能進一步提升。同時,ECS g8i實例擁有AMX加持的AI能力增強,擁有AI增強和全面安全防護的兩大特色優勢。此外,ECS g8i實例全量支持Intel? TDX技術能力。您無需更改業務應用代碼,即可將工作負載部署到可信執行環境(TEE,Trusted Execution Environment)中,不僅能有效降低技術門檻,還支持以極低的性能損耗為大模型等AI應用提供隱私增強算力。請參見通用型實例規格族g8i

Intel? TDX

Intel? TDX是一項基于CPU硬件的云服務器ECS保護技術,TDX實例的CPU寄存器、內存數據、中斷處理等均受到CPU硬件的機密保護,云廠商和外部攻擊者均無法監控或篡改TDX實例的內部運行狀態(如運行的進程、計算中的敏感數據等)。關于Intel? TDX技術的更多信息,請參見Intel? Trusted Domain Extension(Intel? TDX)

Intel? TDX可以為您的實例和應用提供默認的安全保護,即您可以將現有應用直接遷移至TDX實例上并獲得TDX能力帶來的安全保護,而無需重新開發現有的應用程序。

IPEX

Intel? Extension for PyTorch(IPEX)是由Intel開源并維護的一個PyTorch擴展庫,大幅度提升了使用PyTorch在Intel處理器上運行AI應用,尤其是深度學習應用的性能。Intel正不斷為PyTorch貢獻IPEX的優化性能,為PyTorch社區提供最新的Intel硬件和軟件改進。更多信息,請參見IPEX

重要
  • 阿里云不對第三方模型“Stable Diffusion”和“stabilityai/sdxl-turbo”的合法性、安全性、準確性進行任何保證,阿里云不對由此引發的任何損害承擔責任。

  • 您應自覺遵守第三方模型的用戶協議、使用規范和相關法律法規,并就使用第三方模型的合法性、合規性自行承擔相關責任。

  • 本文的示例服務僅用于教程實踐、功能測試、POC等場景,其結果數據僅為參考值,實際數據可能會因您的操作環境而發生變化。

前提條件

  • 已在華北2(北京)地域創建一個ACK集群Pro版。具體操作,請參見創建Kubernetes托管版集群

  • 準備節點池

    • 普通節點池:已在集群內創建一個使用阿里云第八代企業級實例g8i的節點池,且滿足以下要求:

      • 地域及可用區:在ECS實例支持的地域和可用區內。更多信息,請參見ECS實例規格可購買地域總覽

      • 實例規格:CPU為16 vCPU及以上,推薦使用ecs.g8i.4xlarge、ecs.g8i.8xlarge或ecs.g8i.12xlarge

      • 磁盤空間:節點池內節點可用磁盤空間為200GiB以上(可設置節點系統盤大于200GiB或者增加一塊大于200GiB的數據盤)。

    • TDX機密計算節點池:如您需要將示例應用無縫遷移到TDX機密計算節點池,為推理服務提供數據安全保護,準備工作請參見前提條件

  • 已通過kubectl工具連接集群。具體操作,請參見通過kubectl連接Kubernetes集群

步驟一:準備Stable Diffusion XL Turbo模型

本示例服務使用的Stable Diffusion XL Turbo模型為stabilityai/sdxl-turbo

操作步驟

使用官方stabilityai/sdxl-turbo模型

將以下示例代碼保存為values.yaml文件。您也可以根據集群節點池內的實例規格來調整資源配置。

resources:
   limits:
     cpu: "16"
     memory: 32Gi
   requests:
     cpu: "14"
     memory: 24Gi

自定義stabilityai/sdxl-turbo模型

您可以使用存儲在OSS上的自定義stabilityai/sdxl-turbo模型。請創建具有OSS訪問權限的RAM用戶并獲取其AccessKey,供下文步驟使用。

操作步驟

  1. 將以下示例代碼保存為models-oss-secret.yaml。

    apiVersion: v1
    kind: Secret
    metadata:
      name: models-oss-secret
      namespace: default
    stringData:
      akId: <yourAccessKeyID>  # 替換為RAM用戶的AccessKey ID。
      akSecret: <yourAccessKeySecret>  # 替換為RAM用戶的AccessKey Secret。
  2. 執行以下命令,創建Secret。

    kubectl create -f models-oss-secret.yaml

    預期輸出:

    secret/models-oss-secret created
  3. 將以下內容保存為models-oss-pv.yaml。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: models-oss-pv
      labels:
        alicloud-pvname: models-oss-pv
    spec:
      capacity:
        storage: 50Gi
      accessModes:
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
       driver: ossplugin.csi.alibabacloud.com
       volumeHandle: models-oss-pv
       nodePublishSecretRef:
         name: models-oss-secret
         namespace: default
       volumeAttributes:
         bucket: "<yourBucketName>"  # 替換為待掛載的OSS Bucket的名稱。
         url: "<yourOssEndpoint>"  # 替換為待掛載的OSS的接入域名,推薦使用內網地址。本示例使用oss-cn-beijing-internal.aliyuncs.com。
         otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
         path: "/models"  # 模型存放路徑,該路徑下需要存在stabilityai/sdxl-turbo目錄。

    關于OSS參數配置的更多信息,請參見方式一:使用Secret創建靜態卷PV及PVC

  4. 執行以下命令創建靜態卷PV。

    kubectl create -f models-oss-pv.yaml

    預期輸出:

    persistentvolume/models-oss-pv created
  5. 將以下內容保存為models-oss-pvc.yaml。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: models-oss-pvc
    spec:
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 50Gi
      selector:
        matchLabels:
          alicloud-pvname: models-oss-pv
  6. 執行以下命令創建靜態卷PVC。

    kubectl create -f models-oss-pvc.yaml

    預期輸出:

    persistentvolumeclaim/models-oss-pvc created
  7. 將以下示例代碼保存為values.yaml。

    您可以根據集群節點池內的實例規格調整來資源配置。

    resources:
       limits:
         cpu: "16"
         memory: 32Gi
       requests:
         cpu: "14"
         memory: 24Gi
    
    useCustomModels: true
    volumes:
      models:
        name: data-volume
        persistentVolumeClaim:
          claimName: models-oss-pvc

服務部署配置說明values.yaml

展開查看完整的values.yaml

# 工作負載副本數
replicaCount: 1

# 鏡像
image:
  repository: registry-vpc.cn-beijing.aliyuncs.com/eric-dev/stable-diffusion-ipex
  pullPolicy: IfNotPresent
  tag: "v0.1.5"             # 包含官方stabilityai/sdxl-turbo模型文件
  tagOnlyApi: "v0.1.5-lite"  # 不包含官方stabilityai/sdxl-turbo模型文件,需要自行掛載模型文件,詳見下方useCustomModels的說明

# 使用自定義的私有鏡像時,指定包含鏡像拉取憑證的 secret
imagePullSecrets: []

# 圖片在容器內的保存路徑
outputDirPath: /tmp/sd

# 是否使用自定義的stabilityai/sdxl-turbo模型
useCustomModels: false

volumes:
  # outputDirPath對應的掛載配置
  output:
    name: output-volume
    emptyDir: {}
  # useCustomModels為true時,配置自定義的stabilityai/sdxl-turbo模型掛載配置
  # 模型文件必須放在掛載目錄中的stabilityai/sdxl-turbo子目錄下
  models:
    name: data-volume
    persistentVolumeClaim:
      claimName: models-oss-pvc
#    hostPath:
#      path: /data/models
#      type: DirectoryOrCreate


# 對外暴露的服務配置
service:
  type: ClusterIP
  port: 5000

# 容器資源配置
resources:
   limits:
     cpu: "16"
     memory: 32Gi
   requests:
     cpu: "14"
     memory: 24Gi

# 工作負載更新策略
strategy:
  type: RollingUpdate

# 工作負載調度配置
nodeSelector: {}
tolerations: []
affinity: {}

# 容器安全配置
securityContext:
   capabilities:
     drop:
     - ALL
   runAsNonRoot: true
   runAsUser: 1000

# 是否為工作負載啟用HPA自動伸縮
# https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 3
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 90

步驟二:部署示例服務

  1. 執行以下命令,在集群內部署一個使用IPEX加速的Stable Diffusion XL Turbo模型。

    helm install stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz -f values.yaml

    預期輸出:

    NAME: stable-diffusion-ipex
    LAST DEPLOYED: Mon Jan 22 20:42:35 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
  2. 等待約10分鐘,然后執行以下命令檢查Pod狀態,確保運行正常。

    kubectl get pod |grep stable-diffusion-ipex

    預期輸出:

    stable-diffusion-ipex-65d98cc78-vmj49   1/1     Running            0                1m44s

服務部署完成后,對外提供了一個文生圖API。關于API的說明,請參見API說明

步驟三:測試示例服務

操作步驟

  1. 執行以下命令,將Stable Diffusion XL Turbo模型服務轉發到本地。

    kubectl port-forward svc/stable-diffusion-ipex 5000:5000

    預期輸出:

    Forwarding from 127.0.0.1:5000 -> 5000
    Forwarding from [::1]:5000 -> 5000
  2. 使用提示詞,請求本地服務生成圖片。

    本步驟以生成512x5121024x1024的圖片為例。

    512x512的圖片

    執行以下命令,使用提示詞A panda listening to music with headphones. highly detailed, 8k.請求本地的服務執行任務,生成圖片。

    curl -X POST http://127.0.0.1:5000/api/text2image \
    	-d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1}'

    預期輸出:

    {
      "averageImageGenerationTimeSeconds": 2.0333826541900635,
      "generationTimeSeconds": 2.0333826541900635,
      "id": "9ae43577-170b-45c9-ab80-69c783b41a70",
      "meta": {
        "input": {
          "batch": 1,
          "model": "stabilityai/sdxl-turbo",
          "number": 1,
          "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
          "size": "512x512",
          "step": 4
        }
      },
      "output": [
        {
          "latencySeconds": 2.0333826541900635,
          "url": "http://127.0.0.1:5000/images/9ae43577-170b-45c9-ab80-69c783b41a70/0_0.png"
        }
      ],
      "status": "success"
    }

    您可以在瀏覽器中訪問輸出包含的URL,查看生成的圖片。

    1024x1024的圖片

    執行下面的命令,使用提示詞A panda listening to music with headphones. highly detailed, 8k.請求本地的服務執行任務,生成圖片。

    curl -X POST http://127.0.0.1:5000/api/text2image \
    	-d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1, "size": "1024x1024"}'

    預期輸出:

    {
      "averageImageGenerationTimeSeconds": 8.635204315185547,
      "generationTimeSeconds": 8.635204315185547,
      "id": "ac341ced-430d-4952-b9f9-efa57b4eeb60",
      "meta": {
        "input": {
          "batch": 1,
          "model": "stabilityai/sdxl-turbo",
          "number": 1,
          "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
          "size": "1024x1024",
          "step": 4
        }
      },
      "output": [
        {
          "latencySeconds": 8.635204315185547,
          "url": "http://127.0.0.1:5000/images/ac341ced-430d-4952-b9f9-efa57b4eeb60/0_0.png"
        }
      ],
      "status": "success"
    }

    您可以在瀏覽器中訪問輸出包含的URL,查看生成的圖片。

測試數據

以下為容器服務ACK團隊使用不同ECS g8i實例規格在Stable Diffusion XL Turbo模型中生成512x512、1024x1024圖片的耗時信息。下表結果數據僅為實驗參考,實際數據可能會因您的操作環境而發生變化。

實例規格

Pod Request/Limit

參數

單次平均耗時

(512x512)

單次平均耗時

(1024x1024)

ecs.g8i.4xlarge

(16 vCPU 64 GiB)

14/16

batch: 1

step: 4

2.2s

8.8s

ecs.g8i.8xlarge

(32 vCPU 128 GiB)

24/32

batch: 1

step: 4

1.3s

4.7s

ecs.g8i.12xlarge

(48 vCPU 192 GiB)

32/32

batch: 1

step: 4

1.1s

3.9s

(可選)步驟四:將服務遷移到TDX機密虛擬機節點池

示例服務部署完成后,您可以將該應用無縫遷移到TDX機密計算節點池中,為您的推理服務提供數據安全保護。

前提條件

  • 已在ACK集群內創建一個TDX機密虛擬機節點池,且TDX機密虛擬機節點池需滿足其使用限制。具體操作,請參見創建TDX機密虛擬機計算節點池

    同時,TDX機密虛擬機節點池還需滿足以下條件:

    • 實例規格:CPU為16 vCPU及以上(推薦使用ecs.g8i.4xlarge)。

    • 磁盤空間:節點池內節點可用磁盤空間為200GiB以上(可設置節點系統盤大于200GiB或者增加一塊大于200GiB的數據盤)。

    • 節點標簽:配置節點標簽為nodepool-label=tdx-vm-pool

操作步驟

  1. 將以下內容保存為tdx_values.yaml。

    關于values.yaml的完整說明,請參見服務部署配置說明values.yaml

    說明

    此處以為TDX機密虛擬機節點池配置了標簽nodepool-label=tdx-vm-pool為例。如果您配置了其他標簽,需替換nodeSelectornodepool-label取值。

    nodeSelector:
      nodepool-label: tdx-vm-pool
  2. 執行以下命令,將部署的Stable Diffusion示例模型遷移到TDX機密計算節點池。

    helm upgrade stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz -f tdx_values.yaml 

    預期輸出:

    Release "stable-diffusion-ipex" has been upgraded. Happy Helming!
    NAME: stable-diffusion-ipex
    LAST DEPLOYED: Wed Jan 24 16:38:04 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 2
    TEST SUITE: None
  3. 等待約10分鐘,然后檢查Pod狀態,確保運行正常。

    kubectl get pod |grep stable-diffusion-ipex

    預期輸出:

    stable-diffusion-ipex-7f8c4f88f5-r478t   1/1     Running            0                1m44s
  4. 參見步驟三:測試示例服務,再次測試部署在TDX機密計算節點池中的Stable Diffusion示例模型。

參考資料

API說明

當您使用stabilityai/sdxl-turbo模型部署Stable Diffusion XL Turbo服務后,該服務對外提供了一個文生圖API。API說明如下。

請求語法

POST /api/text2image

請求參數

參數

類型

說明

prompt

string

提示詞。

number

integer

圖片數量。最終生成的圖片數量為number*batch

size

string

圖片大小。默認值:512x512

可選值:

  • 512x512

  • 1024x1024

step

integer

生成圖片時使用的步數配置。默認值:4

batch

integer

生成圖片時使用的批大小配置。默認值:1

請求示例

{
  "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
  "number": 1
}

響應參數

參數名稱

參數類型

參數說明

id

string

任務ID。

averageImageGenerationTimeSeconds

float

每批圖片的平均生成時間。單位:秒。

generationTimeSeconds

float

生成所有圖片的耗時。單位:秒。

meta

object

任務元數據信息。

meta.input

object

任務輸入數據。

meta.input.model

string

使用的模型名稱。

meta.input.batch

integer

生成圖片時使用的批大小配置。

meta.input.step

integer

生成圖片時使用的步數配置。

meta.input.number

integer

圖片數量。最終生成的圖片數量為number*batch

output

array

生成的圖片信息。

當請求參數number的值大于1時,將額外使用所有生成的圖片合成一張名為image_grid.png的圖片,方便您一次性預覽所有圖片。

output[].url

string

圖片訪問地址。只有當工作負載副本數為1時,才能通過該地址在瀏覽器中查看圖片。

output[].latencySeconds

float

生成該批次圖片的耗時。單位:秒。

status

string

任務狀態。

響應示例

{
  "averageImageGenerationTimeSeconds": 2.0333826541900635,
  "generationTimeSeconds": 2.0333826541900635,
  "id": "9ae43577-170b-45c9-ab80-69c783b41a70",
  "meta": {
    "input": {
      "batch": 1,
      "model": "stabilityai/sdxl-turbo",
      "number": 1,
      "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
      "size": "512x512",
      "step": 4
    }
  },
  "output": [
    {
      "latencySeconds": 2.0333826541900635,
      "url": "http://127.0.0.1:5000/images/9ae43577-170b-45c9-ab80-69c783b41a70/0_0.png"
    }
  ],
  "status": "success"
}

性能比對

在ACK集群的TDX機密虛擬機節點池中,通過采用ECS g8i實例并結合AMX + IPEX技術,能夠有效加速文生圖模型的推理速度,并可以開啟TEE實現對模型推理的安全保護。本實踐教程采用阿里云第八代(Intel至強第五代處理器)ecs.g8i.4xlarge機型運行stabilityai/sdxl-turbo模型及相關的微調模型為例,展示如何實現高性價比、模型安全的文生圖推理服務。

從推理速度的絕對性能來看,CPU的推理速度仍然與A10的GPU實例有所差距。采用ecs.g8i.8xlarge的CPU機型、step為30、batch為16時,圖片生成速度為0.14 images/s;采用A10的GPU實例、step為30,batch為16時,圖片生成速度為0.4 images/s。但從最佳圖像生成質量的推理性能來看,采用ecs.g8i.8xlarge的CPU機型、step為4、batch為16時,圖像生成速度為1.2 images/s,仍可實現秒級出圖性能。

因此,通過合理運用CPU加速策略和文生圖模型推理的最佳實踐,ECS g8i等第八代CPU實例可用于替代GPU實例,提供穩定、高效、高性價比且安全機密的文生圖服務。

在追求性價比、模型安全TEE和大規模資源供給的文生圖推理場景下,建議采用ecs.g8i.4xlarge機型運行stabilityai/sdxl-turbo及相關的微調模型,以最優性價比的方式提供高質量的文生圖服務。

  • 使用ecs.g8i.8xlarge實例代替ecs.gn7i-c8g1.2xlarge時,可有效節省約9%的成本,并依然保持1.2 images/s的圖像生成速度。

  • 使用ecs.g8i.4xlarge實例替代ecs.gn7i-c8g1.2xlarge時,圖像生成速度降為0.5 images/s,但可有效節省超過53%的成本。

說明

不同地域的ECS實例價格請以云服務器ECS定價中的實例價格頁簽定價為準。

展開查看不同CPU、GPU機型相關的結果數據

CPU機型

本實踐使用阿里云ecs.g8i.8xlarge機型,展示了不同Benchmark取值下及使用不同應用模型時的性能結果。具體信息參見下表。更多信息,請參見Benchmark Tools:lambda-diffusers

本結果數據僅為參考值,實際數據可能會因您的操作環境而發生變化。

實例規格

AlibabaCloud ecs.g8i.8xlarge 32vCPU,128GiB VM, EMR

AlibabaCloud ecs.g8i.8xlarge 32vCPU,128GiB VM, EMR

step

4

30

模型

sdxl-turbo

stable-diffusion-2-1-base

執行命令

python sd_pipe_sdxl_turbo.py --bf16 --batch 1 --height 512 --width 512 --repeat 5 --step 4 --prompt "A panda listening to music with headphones. highly detailed, 8k"

python sd_pipe_infer.py --model /data/models/stable-diffusion-2-1-base --bf16 --batch 1 --height 512 --width 512 --repeat 5 --step 30 --prompt "A panda listening to music with headphones. highly detailed, 8k"

性能趨勢

image

image

GPU機型

重要

下方數據源于Lambda Diffusers的測試數據,僅供參考。其Benchmark可能會發生變化。實際數據及更多信息請以官方頁面Lambda Diffusers Benchmarking inference為準。

image

image

相關文檔

創建TDX機密虛擬機計算節點池