本文以部署Stable Diffusion和ControlNet擴展插件實現文字光影效果圖為例,演示如何使用數據緩存。通過數據緩存提前拉取Stable Diffusion和ControlNet模型數據,然后在創建Stable Diffusion應用實例時直接掛載模型數據,可以免去在實例中拉取模型數據的等待時間,加速應用部署。
背景信息
Stable Diffusion是一個可以根據文字描述生成和修改圖像的模型,支持擴展插件來豐富繪圖效果。ControlNet是一個用于控制AI圖像生成的插件。在Stable Diffusion上安裝ControlNet擴展插件后,可以使用ControlNet來控制生成的圖像效果,使得AI生成更貼近需求的圖像。
阿里云不對第三方模型的合法性、安全性、準確性進行任何保證,阿里云不對由此引發的任何損害承擔責任。
您應自覺遵守第三方模型的用戶協議、使用規范和相關法律法規,并就使用第三方模型的合法性、合規性自行承擔相關責任。
操作步驟
創建數據緩存
控制臺
訪問HuggingFace,獲取模型ID。
本文使用以下模型作為示例,在HuggingFace找到目標模型后,在模型詳情頁面頂部可以復制模型ID。
Stable Diffusion模型:hanafuusen2001/BeautyProMix
ControlNet模型:ioclab/ioc-controlnet
登錄彈性容器實例控制臺。
在頂部菜單欄左上角處選擇地域。
重要如果您的業務部署在中國內地地域,可能會因為網絡原因導致無法緩存HuggingFace的模型數據,建議您在中國香港地域創建數據緩存,然后拷貝數據緩存到您需要的地域。
在左側導航欄,單擊數據緩存。
創建數據緩存。
單擊創建數據緩存,分別創建hanafuusen2001/BeautyProMix和ioclab/ioc-controlnet的數據緩存。本文使用的參數示例如下,其中緩存數據源為拉取兩個模型數據的固定配置,其他參數可自定義配置,更多信息,請參見創建數據緩存。
配置項
hanafuusen2001/BeautyProMix
ioclab/ioc-controlnet
緩存所屬Bucket
test
test
緩存所屬目錄
/model/beautypromix/
/model/ioc/
緩存名
beautypromix
ioc
緩存大小
20 GiB
20 GiB
緩存數據源
類型:URL
參數
repoSource:HuggingFace/Model
repoId:hanafuusen2001/BeautyProMix
類型:URL
參數
repoSource:HuggingFace/Model
repoId:ioclab/ioc-controlnet
彈性公網IP
自動創建
帶寬峰值:5 Mbps
自動創建
帶寬峰值:5 Mbps
查看數據緩存狀態。
在數據緩存頁面刷新查看數據緩存狀態,當狀態為Available時,表示可以使用該數據緩存。
拷貝數據緩存。
如果當前數據緩存所在地域和您要部署應用的地域不一致,您可以在數據緩存頁面單擊目標數據緩存的復制,將數據緩存拷貝到需要的地域。
OpenAPI
訪問HuggingFace,獲取模型ID。
本文使用以下模型作為示例,在HuggingFace找到目標模型后,在模型詳情頁面頂部可以復制模型ID。
Stable Diffusion模型:hanafuusen2001/BeautyProMix
ControlNet模型:ioclab/ioc-controlnet
調用CreateDataCache接口創建數據緩存。
重要如果您的業務部署在中國內地地域,可能會因為網絡原因導致無法緩存HuggingFace的模型數據,建議您在中國香港地域創建數據緩存,然后拷貝數據緩存到您需要的地域。
如果您通過SDK創建數據緩存,DataSource.Options中的各個參數前無需添加參數名的長度,例如
#10#repoSource
直接寫成repoSource
,#6#repoId
直接寫成repoId
即可。
創建hanafuusen2001/BeautyProMix的數據緩存。
參數示例如下,表示從HuggingFace拉取指定模型數據,保存到名為test的Bucket的
/model/beautypromix/
目錄。數據緩存名為beautypromix,保留時長為1天。拉取模型數據的過程中,會自動創建并綁定EIP。數據緩存創建完成后,EIP會被自動釋放。{ "RegionId": "cn-hongkong", "Path": "/model/beautypromix/", "Name": "beautypromix", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "hanafuusen2001/BeautyProMix" } }, "RetentionDays": 1, "EipCreateParam": { "Bandwidth": 5 }, "Bucket": "test" }
創建ioclab/ioc-controlnet的數據緩存。
參數示例如下,表示從HuggingFace拉取指定模型數據,保存到名為test的Bucket的
/model/ioc/
目錄。數據緩存名為ioc,保留時長為1天。拉取模型數據的過程中,會自動創建并綁定EIP。數據緩存創建完成后,EIP會被自動釋放。{ "RegionId": "cn-hongkong", "Path": "/model/ioc/", "Name": "ioc", "DataSource": { "Type": "URL", "Options": { "#10#repoSource": "HuggingFace/Model", "#6#repoId": "ioclab/ioc-controlnet" } }, "RetentionDays": 1, "EipCreateParam": { "Bandwidth": 5 }, "Bucket": "test" }
查詢數據緩存狀態。
根據返回的數據緩存ID調用DescribeDataCaches接口查詢數據緩存信息,當數據緩存的狀態(DataCaches.Status)為Available時,表示可以使用該數據緩存。
拷貝數據緩存。
如果當前數據緩存所在地域和您要部署應用的地域不一致,您可以調用CopyDataCache接口將數據緩存拷貝到需要的地域。
部署Stable Diffusion應用和插件
控制臺
在彈性容器實例控制臺的容器組頁面,單擊創建彈性容器組。
填寫實例相關配置信息,然后單擊配置確認。
本文使用的參數示例如下,實例使用GPU規格,并掛載了hanafuusen2001/BeautyProMix和ioclab/ioc-controlnet的數據緩存。實例內容器使用ECI提供的包含Stable Diffusion應用的鏡像,容器啟動后會運行
python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half
啟動WebUI。重要當VPC已綁定公網NAT網關時,創建ECI實例時可以不綁定EIP。在實例創建完成后,您可以配置DNAT條目實現外部訪問ECI實例。
配置區域
配置項
示例值
容器組配置
指定規格
ecs.gn6i-c16g1.4xlarge
名稱
sd-webui
容器配置
容器名稱
sd
鏡像
鏡像:registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion
版本:1.0.1
可執行命令
/bin/sh
參數
-c
python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half
數據緩存
緩存Bucket
test
單擊添加,掛載hanafuusen2001/BeautyProMix的數據緩存
緩存目錄:/model/beautypromix/
目標容器:sd
容器掛載目錄:/stable-diffusion-webui/models/Stable-diffusion/
單擊添加,掛載ioclab/ioc-controlnet的數據緩存
緩存目錄:/model/ioc/
目標容器:sd
容器掛載目錄:/stable-diffusion-webui/extensions/sd-webui-controlnet/models/
開啟Burst
開啟
彈性公網IP
彈性公網IP
自動創建
帶寬峰值:5 Mbps
確認實例配置信息,閱讀并選中服務協議,單擊確認訂單。
返回容器組頁面,確認應用部署狀態并查看實例的EIP地址。
在容器組頁面可以查看實例狀態,單擊實例ID進入實例詳情頁可以查看容器狀態。當實例狀態和容器狀態均為運行中時,表示應用部署成功。您可以在IP地址列獲取實例的EIP地址。
OpenAPI
使用數據緩存創建ECI實例,部署Stable Diffusion應用和插件。
調用CreateContainerGroup接口創建ECI實例所采用的參數示例如下,實例使用GPU規格,并掛載了hanafuusen2001/BeautyProMix和ioclab/ioc-controlnet的數據緩存。實例內容器使用ECI提供的包含Stable Diffusion應用的鏡像,容器啟動后會運行
python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half
啟動WebUI。說明以下示例中,系統會自動創建并為ECI實例綁定一個EIP。當VPC已綁定公網NAT網關時,創建ECI實例時可以不綁定EIP。在實例創建完成后,您可以配置DNAT條目實現外部訪問ECI實例。
{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze7l1o0ql1cbk******", "VSwitchId": "vsw-2ze23nqzig8inpr******", "ContainerGroupName": "sd-web", "InstanceType": "ecs.gn6i-c16g1.4xlarge", "DataCacheBucket": "test", "Container": [ { "Arg": [ "-c", "python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half" ], "Command": [ "/bin/sh" ], "Gpu": 1, "Name": "sd", "Image": "registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.1", "VolumeMount": [ { "Name": "model1", "MountPath": "/stable-diffusion-webui/models/Stable-diffusion/" }, { "MountPath": "/stable-diffusion-webui/extensions/sd-webui-controlnet/models/", "Name": "model2" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/beautypromix/", "Name": "model1" }, { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/ioc/", "Name": "model2" } ], "DataCacheProvisionedIops": 35000, "DataCacheBurstingEnabled": true, "AutoCreateEip": true }
確認應用部署狀態。
根據返回的實例ID調用DescribeContainerGroupStatus查詢實例和容器狀態。當實例狀態(Status)和容器狀態(ContainerStatuses.State)為Running,表示實例已經創建成功,容器正在運行。
查詢實例的EIP地址。
根據返回的實例ID調用DescribeContainerGroups查詢實例詳情,在InternetIp中可以獲取實例的EIP地址。
測試模型和插件效果
在ECI實例所屬安全組中添加入方向規則,開放8888端口。
打開瀏覽器,訪問Stable Diffusion應用的Web頁面。
本文示例的Stable Diffusion應用已單獨綁定了EIP,可以直接輸入實例的EIP地址和容器開放的端口進行訪問,例如
182.92.XX.XX:8888
。查看ControlNet擴展插件安裝情況。
在Extensions頁簽下,可以看到插件已自動安裝,可以直接使用。
測試插件效果。
單擊img2img頁簽。
在頁面上方按需輸入關于結果圖像的文本描述,并上傳用于AI繪圖的參考圖片。
在頁面下方展開ControlNet配置,上傳用于控制圖像效果的圖片并按需配置參數。
說明為實現文字光影效果,此處上傳的是黑底白字圖片。
不同的圖和不同的文字光影搭配效果差異很大,請根據實際出圖結果對參數進行微調。
需要注意的參數如下:
Model:選擇brightness模型。
Control Weight:ControlNet影響的權重。
Starting Control Step:ControlNet介入開始時間,越早開始AI繪圖的自由度越小,文字光影效果越明顯。
Ending Control Step:ControlNet介入結束時間,越早結束圖像和文字融合效果好,但可能文字光影效果不明顯。
單擊Generate生成結果圖。
示例如下: