本文以部署ModelScope社區的人物AIGC基礎模型(ly261666/cv_portrait_model)搭建類似妙鴨相機的應用為例,演示如何使用數據緩存。通過數據緩存提前拉取模型數據,然后在創建應用實例時直接掛載模型數據,可以免去在實例中拉取模型數據的等待時間,加速應用部署。
背景信息
妙鴨相機是一款基于AIGC的應用,用戶在小程序中上傳一些個人照片,就能得到個人專屬的數字分身,然后再挑選喜歡的風格模板,即可得到一組對應的個人寫真。
阿里云達摩院近期推出了開源版“妙鴨相機”,即facechain。facechain的基本原理是典型的SD(Stable Diffusion)+LoRA,流程大致如下:
對已有的幾張個人照片(原圖)進行訓練,得到個人專屬的面部LoRA權重。
基于標準的SD基礎模型生成各種風格的個人照片(結果圖)。
說明facechain會在此基礎上,使用多種人像、皮膚相關的模型進行人像優化,從而生成更優效果的照片。
雖然目前開源版本的facechain下載后即可配置使用,但存在以下問題:
訓練和推理的過程中會直接從模型Hub下載模型,整個應用涉及多個模型,大小約25 GB,導致整體耗時長,并且直接通過公網下載模型對帶寬和網絡穩定性要求很高,一旦無法下載就會失敗。
不支持人臉記憶,只能基于當前最新的訓練結果進行推理,即不能保留歷史訓練出來的LoRA權重。
如果想換個模型或者更新版本等,需要手動修改代碼,維護復雜,配置不靈活。
針對上述問題,ECI推出了優化版本,即eci-facechain。主要優化點如下:
將模型數據放入ECI數據緩存中,應用啟動后無需從模型Hub下載模型。
支持人臉記憶,訓練流程支持給人臉打標簽,推理時支持通過標簽選擇歷史訓練過的人臉進行生成。
新增環境變量配置項(詳見
env.py
文件),無需修改應用代碼即可通過容器的環境變量自定義SD的模型、版本、目錄、以及應用端口等。優化Web頁面,例如支持設置生成照片的像素等。
前提條件
您使用的VPC已綁定公網NAT網關,并配置SNAT條目允許該VPC或下屬交換機的資源可以訪問公網。
如果VPC沒有綁定公網NAT網關,您需要在創建數據緩存和部署應用時綁定EIP,以便可以拉取公網數據。
準備運行環境
硬件要求
需使用GPU規格。vCPU、內存等無具體要求,建議選擇顯存高的規格。ECI支持的GPU規格,請參見規格說明。
軟件環境
ECI已基于eci-facechain制作了一個公共容器鏡像,您可以直接使用該鏡像或者將其作為基礎鏡像進行二次開發。鏡像地址為registry.cn-hangzhou.aliyuncs.com/eci_open/facechain:1.0.2。
操作步驟
創建數據緩存
控制臺
訪問ModelScope,獲取模型ID。
本示例使用人物AIGC基礎模型(ID為ly261666/cv_portrait_model)的v4.0版本。在ModelScope找到目標模型后,在模型詳情頁面頂部可以復制模型ID。
登錄彈性容器實例控制臺。
在頂部菜單欄左上角處選擇地域。
在左側導航欄,單擊數據緩存。
創建人物AIGC基礎模型的數據緩存。
單擊創建數據緩存。
完成數據緩存參數配置。
本文使用的參數示例如下,其中緩存數據源為拉取人物AIGC基礎模型的固定配置,其他參數可自定義配置,更多信息,請參見創建數據緩存。
配置項
示例值
緩存所屬Bucket
test
緩存所屬目錄
/model/cv
緩存名
cv
緩存大小
20 GiB
緩存數據源
類型:URL
參數
repoSource:ModelScope/Mode
repoId:ly261666/cv_portrait_model
revision:v4.0
單擊確定。
查看數據緩存狀態。
在數據緩存頁面刷新查看數據緩存狀態,當狀態為Available時,表示可以使用該數據緩存。
OpenAPI
訪問ModelScope,獲取模型ID。
本示例使用人物AIGC基礎模型(ID為ly261666/cv_portrait_model)的v4.0版本。在ModelScope找到目標模型后,在模型詳情頁面頂部可以復制模型ID。
創建人物AIGC基礎模型的數據緩存。
調用CreateDataCache接口創建數據緩存所采用的參數示例如下,表示從ModelScope拉取指定模型數據,保存到名為test的Bucket的
/model/cv/
目錄。數據緩存名為cv,保留時長為1天。重要如果您通過SDK創建數據緩存,DataSource.Options中的各個參數前無需添加參數名的長度,例如
#10#repoSource
直接寫成repoSource
,#6#repoId
直接寫成repoId
即可。{ "RegionId": "cn-beijing", "VSwitchId": "vsw-2ze23nqzig8inpr******", "SecurityGroupId": "sg-2ze1003ujo0fuv******", "Bucket": "test", "Path": "/model/cv/", "Name": "cv", "DataSource": { "Type": "URL", "Options": { "#6#repoId": "ly261666/cv_portrait_model", "#10#repoSource": "ModelScope/Model", "#8#revision": "v4.0" } }, "RetentionDays": 1 }
查詢數據緩存狀態。
根據返回的數據緩存ID調用DescribeDataCaches接口查詢數據緩存信息,當數據緩存的狀態(DataCaches.Status)為Available時,表示可以使用該數據緩存。
搭建“妙鴨相機”
控制臺
在彈性容器實例控制臺的容器組頁面,單擊創建彈性容器組。
填寫實例相關配置信息,然后單擊配置確認。
本文使用的參數示例如下,實例使用GPU規格,并掛載了人物AIGC基礎模型的數據緩存。實例內容器使用ECI提供的制作好的facechain鏡像,容器啟動后會運行一個Web服務,可通過8888端口訪問。
說明當VPC已綁定公網NAT網關時,創建ECI實例時可以不綁定EIP。在實例創建完成后,您可以配置DNAT條目實現外部訪問ECI實例。
容器默認對外開放8888端口,如果想要修改端口,可通過設置容器環境變量APP_PORT來指定端口。
配置區域
配置項
示例值
容器組配置
指定規格
ecs.gn6i-c4g1.xlarge
名稱
cv
容器配置
容器名稱
cv
鏡像
鏡像:registry.cn-hangzhou.aliyuncs.com/eci_open/facechain
版本:1.0.2
數據緩存
緩存Bucket
test
單擊添加,掛載人物AIGC基礎模型的數據緩存
緩存目錄:/model/cv/
目標容器:cv
容器掛載目錄:/mnt/workspace/.cache/modelscope/ly261666/cv_portrait_model/
彈性公網IP
彈性公網IP
自動創建
帶寬峰值:5 Mbps
確認實例配置信息,閱讀并選中服務協議,單擊確認訂單。
返回容器組頁面,確認應用部署狀態并查看實例的EIP地址。
在容器組頁面可以查看實例狀態,單擊實例ID進入實例詳情頁可以查看容器狀態。當實例狀態和容器狀態均為運行中時,表示應用部署成功。您可以在IP地址列獲取實例的EIP地址。
OpenAPI
使用數據緩存創建ECI實例,部署“妙鴨相機”應用。
調用CreateContainerGroup接口創建ECI實例所采用的參數示例如下,該實例使用GPU規格,并掛載了人物AIGC基礎模型。
說明以下示例中,系統會自動創建并為ECI實例綁定一個EIP。當VPC已綁定公網NAT網關時,創建ECI實例時可以不綁定EIP。在實例創建完成后,您可以配置DNAT條目實現外部訪問ECI實例。
容器默認對外開放8888端口,如果想要修改端口,可通過設置容器環境變量APP_PORT來指定端口。
{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze1003ujo0fuv******", "VSwitchId": "vsw-2ze23nqzig8inpr******", "ContainerGroupName": "cv", "InstanceType": "ecs.gn6i-c4g1.xlarge", "DataCacheBucket": "test", "AutoCreateEip": true, "Container": [ { "Image": "registry.cn-hangzhou.aliyuncs.com/eci_open/facechain:1.0.2", "Name": "cv", "VolumeMount": [ { "MountPath": "/mnt/workspace/.cache/modelscope/ly261666/cv_portrait_model/", "Name": "model-cv" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/cv/", "Name": "model-cv" } ] }
確認應用部署狀態。
根據返回的實例ID調用DescribeContainerGroupStatus查詢實例和容器狀態。當實例狀態(Status)和容器狀態(ContainerStatuses.State)為Running,表示實例已經創建成功,容器正在運行。
查詢實例的EIP地址。
根據返回的實例ID調用DescribeContainerGroups查詢實例詳情,在InternetIp中可以獲取實例的EIP地址。
測試模型效果
在ECI實例所屬安全組中添加入方向規則,開放8888端口。
打開瀏覽器,訪問“妙鴨相機”應用的Web頁面。
本文示例的“妙鴨相機”應用已單獨綁定了EIP,可以直接輸入實例的EIP地址和容器開放的端口進行訪問,例如
47.94.XX.XX:8888
。測試人物AIGC基礎模型是否可以類似妙鴨相機的效果。
在形象定制頁簽下,上傳人臉照片。
按需給人臉增加標簽,然后單擊開始訓練。
等待訓練完成后,單擊形象體驗頁簽。
按需選擇風格模型、服裝風格,配置圖片數量和高度寬度等參數,然后單擊開始生成。
等待并查看生成結果。
說明如果出現Error報錯,可查看容器日志確認報錯原因。如果是OOM,建議調小照片的寬度和高度,或者重新使用更大顯存的GPU規格來部署應用。