本文以部署HuggingFace上的Stable Diffusion為例,示範如何使用資料緩衝。通過資料緩衝提前拉取Stable Diffusion相關模型資料,然後在建立Stable Diffusion應用執行個體時直接掛載模型資料,可以免去在執行個體中拉模數型資料的等待時間,加速Stable Diffusion應用部署。
背景資訊
Stable Diffusion是一個可以根據文字描述產生和修改映像的模型。Stable Diffusion分為文字理解和圖片產生兩個部分。文字理解部分使用CLIP模型對文本進行Encoding,圖片產生採用Diffusion模型。
阿里雲不對第三方模型的合法性、安全性、準確性進行任何保證,阿里雲不對由此引發的任何損害承擔責任。
您應自覺遵守第三方模型的使用者協議、使用規範和相關法律法規,並就使用第三方模型的合法性、合規性自行承擔相關責任。
前提條件
您使用的VPC已綁定公網NAT Gateway,並配置SNAT條目允許該VPC或下屬交換器的資源可以訪問公網。
如果VPC沒有綁定公網NAT Gateway,您需要在建立資料緩衝和部署應用時綁定EIP,以便可以拉取公網資料。
準備運行環境
部署Stable Diffusion應用需要準備好包含Stable Diffusion運行所需環境的容器鏡像,環境需求包括CUDA、Diffusers庫,以及其他的基礎依賴等。ECI已經準備好了能運行大多數模型的穩定環境的容器鏡像。如果您的應用沒有特殊依賴,可以直接使用。
啟動HTTP服務的鏡像
GPU版:registry.cn-hangzhou.aliyuncs.com/eci_open/ubuntu:cuda11.7.1-cudnn8-ubuntu20.04
CPU版:registry.cn-hangzhou.aliyuncs.com/eci_open/ubuntu:hf-ubuntu20.04
鏡像相關資訊參考如下:
支援WebUI的鏡像
鏡像地址:registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.0
說明該鏡像對於Stable Diffusion模型是通用的,只需將建立好的模型資料緩衝掛載到
/stable-diffusion-webui/models/Stable-diffusion/目錄即可使用不同的模型。
操作步驟
使用啟動HTTP服務的鏡像
建立資料緩衝
訪問HuggingFace,擷取模型ID。
本樣本使用stabilityai/stable-diffusion-2-1模型。在HuggingFace找到目標模型後,在模型詳情頁面頂部可以複製模型ID。
建立資料緩衝。
調用CreateDataCache介面建立資料緩衝所採用的參數樣本如下,表示從HuggingFace拉取指定模型資料,儲存到名為test的Bucket的
/model/stable-diffusion/目錄。資料緩衝名為stable-diffusion,保留時間長度為1天。重要如果您通過SDK建立資料緩衝,DataSource.Options中的各個參數前無需添加參數名的長度,例如
#10#repoSource直接寫成repoSource,#6#repoId直接寫成repoId即可。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "Bucket": "test", "Path": "/model/stable-diffusion/", "Name": "stable-diffusion", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "stabilityai/stable-diffusion-2-1" } }, "RetentionDays": 1 }查詢資料緩衝狀態。
根據返回的資料緩衝ID調用DescribeDataCaches介面查詢資料緩衝資訊,當資料緩衝的狀態(DataCaches.Status)為Available時,表示可以使用該資料緩衝。
部署Stable Diffusion應用
使用資料緩衝建立ECI執行個體,部署Stable Diffusion應用。
調用CreateContainerGroup介面建立ECI執行個體所採用的參數樣本如下,該ECI執行個體使用GPU規格,並掛載了Stable Diffusion v2-1模型資料。執行個體內容器使用GPU版鏡像,容器啟動後會運行
python3 http-server.py,啟動一個HTTP服務。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "ContainerGroupName": "stable-diffusion", "InstanceType": "ecs.gn6i-c16g1.4xlarge", "DataCacheBucket": "test", "Container": [ { "Arg": [ "python3 http-server.py" ], "VolumeMount": [ { "MountPath": "/data/model/", "Name": "model" } ], "Command": [ "/bin/sh", "-c" ], "Gpu": 1, "Name": "stable-diffusion", "Image": "registry.cn-hangzhou.aliyuncs.com/eci_open/ubuntu:cuda11.7.1-cudnn8-ubuntu20.04" } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/stable-diffusion/", "Name": "model" } ] }確認應用部署狀態。
根據返回的執行個體ID調用DescribeContainerGroupStatus查詢執行個體和容器狀態。當執行個體狀態(Status)和容器狀態(ContainerStatuses.State)為Running,表示執行個體已經建立成功,容器正在運行。
對外開放應用。
在ECI執行個體所屬VPC已綁定NAT Gateway的前提下,您需要建立DNAT條目,使得ECI執行個體可以對外提供公網訪問服務。具體操作,請參見建立和管理DNAT條目。
說明如果VPC沒有綁定NAT Gateway,則需要您在建立ECI執行個體時為其綁定一個EIP,此時可以跳過本步驟。
建立DNAT條目採用的配置項樣本如下:
公網IP地址:選擇NAT Gateway綁定的EIP地址。
私網IP地址:選擇部署了Stable Diffusion應用的ECI執行個體。
連接埠設定:使用具體連接埠,公網連接埠配置為80,私網連接埠配置為8888,協議為TCP。
測試模型效果
傳入文本,測試是否可以產生圖片。
在ECI執行個體所屬安全性群組中添加入方向規則,開放應用對外連接埠(本文以80連接埠為例)。
開啟瀏覽器,訪問Stable Diffusion應用,並傳入文本描述。
在配置了DNAT的情況下,請輸入DNAT條目中配置的公網IP地址和公網連接埠,以及文本描述,例如
47.94.XX.XX:80?input=xxx。其中,input=xxx表示要傳入的文本描述,Stable Diffusion應用會基於該文本描述產生圖片,並將圖片儲存到容器的/workspace/pic目錄下。樣本如下:
查看產生的圖片。
在容器內部啟動一個新的HTTP服務,用於查看圖片。
串連容器後執行以下命令:
python3 -m http.server 7777 --directory /workspace/pic/ &在ECI執行個體所屬安全性群組中添加入方向規則,開放用於查看圖片的連接埠(本文以70連接埠為例)。
建立一條新的DNAT條目,以便外部可以訪問新的HTTP服務。
新的DNAT條目採用的連接埠樣本為:公網連接埠配置為70,私網連接埠配置為7777,協議為TCP。
查看產生的圖片。
輸入新的DNAT條目中配置的公網IP地址和公網連接埠,例如
47.94.XX.XX:70。樣本如下:

使用支援WebUI的鏡像
建立資料緩衝
訪問HuggingFace,擷取模型ID。
本樣本使用hanafuusen2001/BeautyProMix模型。在HuggingFace找到目標模型後,在模型詳情頁面頂部可以複製模型ID。
建立資料緩衝。
調用CreateDataCache介面建立資料緩衝所採用的參數樣本如下,表示從HuggingFace拉取指定模型資料,儲存到名為test的Bucket的
/model/BeautyProMix/目錄。資料緩衝名為beautypromix,保留時間長度為1天。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "Bucket": "test", "Path": "/model/BeautyProMix/", "Name": "beautypromix", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "hanafuusen2001/BeautyProMix" } }, "RetentionDays": 1 }查詢資料緩衝狀態。
根據返回的資料緩衝ID調用DescribeDataCaches介面查詢資料緩衝資訊,當資料緩衝的狀態(DataCaches.Status)為Available時,表示可以使用該資料緩衝。
部署Stable Diffusion應用
使用資料緩衝建立ECI執行個體,部署Stable Diffusion應用。
調用CreateContainerGroup介面建立ECI執行個體所採用的參數樣本如下,該ECI執行個體使用GPU規格,並掛載了BeautyProMix模型資料。執行個體內的容器使用GPU版鏡像,容器啟動後會運行
python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half,啟動一個WebUI。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "ContainerGroupName": "stable-diffusion", "InstanceType": "ecs.gn6i-c16g1.4xlarge", "DataCacheBucket": "test", "Container": [ { "Arg": [ "python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half" ], "VolumeMount": [ { "MountPath": "/stable-diffusion-webui/models/Stable-diffusion/", "Name": "model" } ], "Command": [ "/bin/sh", "-c" ], "Gpu": 1, "Name": "stable-diffusion", "Image": "registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.0" } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/BeautyProMix/", "Name": "model" } ] }確認應用部署狀態。
根據返回的執行個體ID調用DescribeContainerGroupStatus查詢執行個體和容器狀態。當執行個體狀態(Status)和容器狀態(ContainerStatuses.State)為Running,表示執行個體已經建立成功,容器正在運行。
對外開放應用。
在ECI執行個體所屬VPC已綁定NAT Gateway的前提下,您需要建立DNAT條目,使得ECI執行個體可以對外提供公網訪問服務。具體操作,請參見建立和管理DNAT條目。
說明如果VPC沒有綁定NAT Gateway,則需要您在建立ECI執行個體時為其綁定一個EIP,此時可以跳過本步驟。
建立DNAT條目採用的配置項樣本如下:
公網IP地址:選擇NAT Gateway綁定的EIP地址。
私網IP地址:選擇部署了Stable Diffusion應用的ECI執行個體。
連接埠設定:使用具體連接埠,公網連接埠配置為80,私網連接埠配置為8888,協議為TCP。
測試模型效果
在ECI執行個體所屬安全性群組中添加入方向規則,開放應用對外連接埠。
開啟瀏覽器,訪問Stable Diffusion應用。
在配置了DNAT的情況下,請輸入DNAT條目中配置的公網IP地址和公網連接埠,例如
47.94.XX.XX:80。說明如果ECI執行個體單獨綁定了EIP,請輸入EIP地址和容器開放的連接埠,例如
47.94.XX.XX:8888。輸入文本描述,測試圖片產生。
樣本如下:
