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

AI鏡像構建及拉取加速方案

傳統容器運行需要將全量鏡像數據下載后再解包,然而容器啟動可能僅使用其中部分的內容,導致容器啟動耗時長。通過容器鏡像服務企業版的按需加載功能,允許僅下載和解壓容器啟動所必需的部分,而不是整個鏡像,從而大幅提高應用部署速度和提升彈性體驗。本文以Stable Diffusion應用為例,介紹如何基于ACR企業版實現AI鏡像構建及拉取加速功能。

前提條件

使用限制

金融云與政務云地域不支持按需加載功能。

Stable Diffusion介紹

Stable Diffusion WebUI是Github上一個熱門項目,可以通過文本生成圖像。Stable Diffusion分為文字理解和圖片生成兩個部分。文字理解部分使用CLIP模型對文本進行Encoding,圖片生成采用Diffusion模型。

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

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

步驟一:在源代碼平臺中創建Dockerfile文件

使用ACR企業版實例構建鏡像時,您需要綁定一個源代碼托管平臺。ACR支持的代碼托管平臺包括阿里云Codeup、Gitee、GitHub、GitLab。

根據前提條件綁定源代碼平臺后,您需在對應平臺創建Dockerfile,供后續拉取Stable Diffusion應用鏡像使用。示例代碼如下。

FROM yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:model-only-v1.5 as model

FROM docker.io/nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1 libglib2.0-0 wget git curl vim python3.10 python3-venv && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && \
cd stable-diffusion-webui && git checkout v1.6.0

COPY --from=model /data/v1-5-pruned-emaonly.safetensors /stable-diffusion-webui/models/Stable-diffusion/
COPY --from=model /root/.cache/huggingface /root/.cache/huggingface

WORKDIR /stable-diffusion-webui/

RUN ./webui.sh -f can_run_as_root --exit --skip-torch-cuda-test

ENV VIRTUAL_ENV=/stable-diffusion-webui/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

CMD ["python3", "launch.py", "--listen --skip-torch-cuda-test --no-half"]

步驟二:使用ACR企業版加速構建Stable Diffusion應用

本小節將創建一個帶有鏡像加速能力的ACR企業版實例倉庫。開啟鏡像加速后,推送到該鏡像倉庫中的鏡像都會被自動制作對應的加速轉換鏡像。

  1. 登錄容器鏡像服務控制臺。

  2. 在頂部菜單欄,選擇所需地域。

  3. 單擊已創建的企業版實例,然后在左側導航欄,單擊倉庫管理 > 鏡像倉庫。

  4. 單擊創建鏡像倉庫,根據頁面提示配置相關配置項,然后單擊創建鏡像倉庫

    下文僅介紹主要配置項。詳細信息,請參見步驟三:創建鏡像倉庫。

    配置項

    說明及示例值

    控制臺界面

    命名空間

    目標命名空間。

    image.png

    倉庫名稱

    目標倉庫。

    鏡像加速

    開啟后,推送到該鏡像倉庫中的鏡像都會被自動制作對應的加速轉換鏡像。

    本實踐開啟。

    摘要

    自定義摘要內容。

    代碼源

    已完成ACR實例綁定且已創建Dockerfile的目標代碼源。

    image.png

    構建設置

    開啟代碼變更時自動構建鏡像和海外源智能加速。

    • 代碼變更時自動構建鏡像:當分支有代碼提交后會自動觸發構建規則。

    • 海外源智能加速:構建時會在海外機房構建,構建成功后推送到指定地域。如果您項目的Dockerfile文件需要從國外站點下載文件,但是跨境網絡不穩定,您可以使用海外源智能加速。

  5. 進入鏡像倉庫詳情頁面,在左側導航欄,單擊構建,在構建規則設置區域單擊添加規則,在配置向導中按照頁面提示配置相關信息,然后單擊確定

    下文僅介紹主要配置項。詳細信息,請參見步驟四:構建鏡像。

    配置項

    說明及示例值

    控制臺界面

    類型

    設置源代碼倉庫的類型,可以是Branch或Tag。

    image.png

    Branch/Tag

    選擇或者填寫Branch/Tag,支持正則規則。當正則規則為release-(?<imageTag>\w*)時,將識別release-v1源代碼變更并自動構建版本為v1的鏡像(不支持立即構建),更多信息,請參見正則表達式命名捕獲組。

    說明

    設置正則規則后僅支持系統自動構建,不支持手動立即構建。

    構建上下文目錄

    設置Dockerfile文件所在的目錄。指的是相對目錄,以Branch/Tag的根目錄為父目錄,例如您的Branch為master,您的Dockerfile文件放在master下,則您的Dockerfile目錄為/。

    Dockerfile文件名

    設置Dockerfile文件名,默認為Dockerfile。

    鏡像版本

    設置鏡像Tag,例如1.0.0。支持命名捕獲,例如使用Branch/Tag中捕獲的內容。

    image.png

    架構配置

    選擇構建架構和構建參數。本實踐保持默認選項。

    image.png

  6. 構建頁面的構建規則設置區域,單擊目標規則操作列的立即構建

    image.png

    構建任務下發并創建成功后,您可以在下方構建日志區域查看狀態。狀態顯示成功時,表明對應鏡像構建成功。

    開啟構建功能加速優化的情況下,本次構建耗時約30分鐘左右。

  7. 鏡像構建成功后,在左側導航欄,單擊鏡像版本,查看鏡像的加速版本(類型為加速鏡像)和常規版本(類型為容器鏡像)信息。

    image.png

    本倉庫為鏡像加速倉庫,倉庫下的鏡像都會被自動制作對應的加速轉換鏡像。以上圖為例,ACR已為您創建兩個加速鏡像和一個常規容器鏡像。

  8. 在常規版本(類型為容器鏡像)區域,單擊版本,然后復制倉庫地址,供后續在ACK集群中啟用Stable Diffusion應用使用。

    image.png

步驟三:在ACK集群中加速Stable Diffusion應用啟動

1、安裝鏡像加速組件

為啟動加速容器,需要為集群Worker節點安裝鏡像加速組件。

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇運維管理 > 組件管理。

  3. 在組件管理頁面,搜索并定位aliyun-acr-acceleration-suite組件,按照頁面提示完成組件安裝。

2、配置鏡像節點池

測試本鏡像加速功能時,您需要新建一個節點池。新建節點池時,您需要為節點添加鏡像加速標簽alibabacloud.com/image-accelerate-enabled: true,以便在節點初始化時開啟鏡像加速能力。

說明

標簽alibabacloud.com/image-accelerate-enabled: true對存量節點不生效。推薦您創建單獨的節點池以便統一管理具備鏡像加速能力的節點。

  1. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇節點管理 > 節點池

  2. 在頁面右上角,單擊創建節點池。在新建節點池時,創建1個CPU節點(期望節點數為1),規格為16 Core 32 GB及以上,并在高級配置區域為節點添加鏡像加速標簽,設置節點標簽alibabacloud.com/image-accelerate-enabled: true。

    具體操作,請參見創建節點池。image.png

  3. 執行以下命令,檢查集群中帶有鏡像加速標簽的節點。

    kubectl get nodes -l alibabacloud.com/image-accelerate-enabled=true

    預期輸出:

    NAME                       STATUS   ROLES    AGE     VERSION
    cn-hangzhou.172.XX.XX.115   Ready    <none>   2m33s   v1.24.6-aliyun.1

3、配置鏡像倉庫專有網絡

您需要前往容器鏡像服務控制臺配置ACK集群的專有網絡信息,確保在ACK集群中拉取鏡像時網絡通暢。

  1. 登錄容器鏡像服務控制臺。

  2. 在頂部菜單欄,選擇所需地域。

  3. 單擊已創建的企業版實例,然后在左側導航欄,單擊倉庫管理 > 訪問控制。

  4. 單擊添加專有網絡,選擇ACK集群的專有網絡和鏡像節點的交換機,然后單擊確定。

    添加后,等待專有網絡列表的狀態列變更為已生效,表明添加成功。

    說明

    您可以登錄容器服務管理控制臺,在集群列表頁面,單擊目標集群名稱,按照如下步驟獲取相應地址。

    • 獲取ACK集群專有網絡:在左側導航欄,選擇集群信息,然后單擊集群資源頁簽,查看集群虛擬專有網絡VPC地址。

    • 獲取鏡像節點的交換機:在左側導航欄,選擇節點管理 > 節點池,單擊目標節點池名稱,然后單擊基本信息頁簽,在節點配置區域,獲取節點虛擬交換機地址。

4、在ACK集群Pro版中部署業務Pod

您可以通過YAML文件拉取ACR實例中的加速鏡像,部署在ACK集群中,觀察加速情況。

  1. 執行以下命令,創建Stable Diffusion應用所屬的命名空間。

    kubectl create ns accelerate-ai-demo
  2. 執行以下命令,為Stable Diffusion應用的命名空間增加鏡像加速標簽。

    kubectl label namespaces accelerate-ai-demo k8s.aliyun.com/image-accelerate-mode=on-demand
  3. 執行以下命令,在accelerate-ai-demo命名空間中創建acr-credential-test,用于拉取鏡像密碼。

    請將以下代碼中的<yourInstanceName>-<registry-vpc.cn-hangzhou.cr.aliyuncs.com>替換為ACR鏡像倉庫地址,<yourUserName>替換為阿里云賬號名稱,<yourPassword>替換為ACR實例的訪問密碼。

    kubectl -n accelerate-ai-demo create secret docker-registry acr-credential-test --docker-server=<yourInstanceName>-<registry-vpc.cn-hangzhou.cr.aliyuncs.com> --docker-username=<yourUserName> --docker-password=<yourPassword>
  4. 使用以下示例代碼創建并保存stable-diffusion-ack-gpu-accelerate.yaml文件,用于部署名為tea的Deployment以及名為tea-svc的Service,以創建Stable Diffusion應用。

    展開查看完整示例代碼

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: stable-diffusion
      name: stable-diffusion
      namespace: accelerate-ai-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: stable-diffusion
      template:
        metadata:
          labels:
            app: stable-diffusion
        spec:
          containers:
          - args:
            - --listen
            - --skip-torch-cuda-test 
            - --no-half
            command:
            - python3
            - launch.py
            image: <Stable Diffusion業務鏡像名稱> # ACR實例倉庫中獲取的Stable Diffusion業務鏡像的倉庫地址。
            imagePullPolicy: Always
            name: stable-diffusion
            ports:
            - containerPort: 7860
              protocol: TCP
            readinessProbe:
              tcpSocket:
                port: 7860
            resources:
              requests:
                cpu: "8"
                memory: 16Gi
                ephemeral-storage: 50Gi
          imagePullSecrets:
            - name: acr-credential-test
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
      name: stable-diffusion
      namespace: accelerate-ai-demo
    spec:
      externalTrafficPolicy: Local
      ports:
      - port: 7860
        protocol: TCP
        targetPort: 7860
      selector:
        app: stable-diffusion
      type: LoadBalancer
  5. 執行以下命令,部署Stable Diffusion應用。

    kubectl apply -f stable-diffusion-ack-gpu-accelerate.yaml
  6. 執行以下命令,查看Stable Diffusion應用Pod容器狀態。

    kubectl -n accelerate-ai-demo get pod

    預期輸出:

    NAME                                READY   STATUS    RESTARTS   AGE
    stable-diffusion-75759ff59f-hw5zm   1/1     Running   0          73s
  7. 執行以下命令,查看Stable Diffusion應用Pod詳情。

    kubectl -n accelerate-ai-demo describe pod <pod-name>

    預期輸出:

    ...
    Events:
      Type    Reason          Age   From               Message
      ----    ------          ----  ----               -------
      Normal  Scheduled       23s   default-scheduler  Successfully assigned accelerate-ai-demo/stable-diffusion-75ff55794f-5mj8p to cn-hangzhou.172.16.7.99
      Normal  AllocIPSucceed  19s   terway-daemon      Alloc IP 172.16.7.115/24
      Normal  Pulling         19s   kubelet            Pulling image "XXX"
      Normal  Pulled          17s   kubelet            Successfully pulled image "XXX" in 1.61s (1.61s including waiting)
      Normal  Created         17s   kubelet            Created container stable-diffusion
      Normal  Started         16s   kubelet            Started container stable-diffusion

    預期輸出表明,約7s后,Stable Diffusion服務完全可用(具體時間以您的實際操作環境為準)。

    在未開啟鏡像加速的情況下,使用ACK集群拉取此鏡像約耗時4分鐘(具體時間以實際操作環境為準)。對比可得,開啟鏡像加速能力后,ACK集群中拉取業務鏡像時間大大縮短,有效減少了Stable Diffusion服務的啟動時間。

步驟五:結果驗證

  1. 執行以下命令,查看Stable Diffusion應用Pod的Service詳情,記錄External IP供下一步訪問應用使用。

    kubectl -n accelerate-ai-demo get svc 

    預期輸出:

    NAME               TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)          AGE
    stable-diffusion   LoadBalancer   172.XX.XX.163   121.XX.XX.64   7860:32621/TCP   116s

    記錄EXTERNAL-IP值。

  2. 執行以下curl命令,測試Stable Diffusion服務的響應。

    請將<EXTERNAL-IP>替換為上一步獲取到的EXTERNAL-IP值。

    curl http://<EXTERNAL-IP>:7860/ 

    您也可以直接使用http://<EXTERNAL-IP>:7860/在瀏覽器中訪問。在左上角,選擇checkpoint,然后在Prompt區域輸入內容,單擊Generate獲取文生圖結果。

    首次使用可能會有卡頓情況,請耐心等待或刷新頁面。

    image.png