本篇章是阿里雲函數計算部署 Stable Diffusion 系列的第三篇,如果說第一篇是嘗試使用雲服務來解決用戶本地部署 Stable Diffusion 的問題(顯卡成本,部署技術複雜),第二篇是面向技術同學解決雲服務 Stable Diffusion 的實用性問題(自定義模型,擴展),那麼本篇則是以更大衆的方式實現本地電腦的平替,使得人人皆可擁有一套實用的 Stable Diffusion 服務,不管你是普通用戶,或者是技術同學,皆可適用。
前置條件
1. 註冊並登錄阿里雲賬號[1]
2. 開通函數計算[2]
3. 開通文件存儲 NAS 服務[3]
函數計算和文件存儲 NAS 都是使用的時候纔去計費,目前,函數計算和文件存儲 NAS 都有新用戶免費額度,可以去阿里雲官網領取。
快速開始
通過模版創建應用-> 人工智能選項卡-> AI 數字繪畫 Stable-Diffusion 自定義模板->立即創建。
填寫表單項
選擇直接部署-> 杭州地域 -> 複製開發者準備好的容器鏡像點擊創建並部署默認環境。
應用部署
接下來什麼都不需要操作,等待應用部署即可,約花費 5-10 分鐘, 如果你是技術同學,可以展開看看我們提供的部署日誌,觀察部署過程。
配置管理後臺
部署成功後得到兩個域名。
其中 Stable Diffusion 開頭的是主服務,目前因爲沒鏡像還不能訪問,admin 開頭的是我們的管理後臺,接下來我們需要先配置一下管理後臺,然後把我們的模型上傳上去。
管理後臺使用的是可道雲提供的 kod-box,對於你而言一路點點點,就可以。
等初始化好之後,設置自己的登錄賬號和密碼:
之後進行登錄:
登錄後在路徑輸入 /mnt/auto/sd。
如果你熟悉 sd-webui 的目錄的話,你可以看到對應的目錄:
接下來我們打開 /mnt/auto/sd/models/Stable-diffusion/,然後點擊上傳->離線下載。
在這裏我們輸入 sd1.5 的模型地址:https://huggingface.co/runwayml/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.ckpt
當然,你也可以輸入任意自己的地址,除了下載,你也可以把本地的模型直接拖拽上傳。
因爲模型較大,下載時間預計花費 5-15 分鐘,可以休息等待一下(如果提示出錯可以忽略)。
另外需要格外注意,如果是從 huggingface 源站下載下來的文件,需要把文件後綴改一下。
模型下載完,我們可以打開 Stable Diffusion 的服務了。
源碼定製
在這裏也貼上構建鏡像的源碼,如果您是一名開發同學,可以構建自己的鏡像。
基於:https://github.com/AbdBarho/stable-diffusion-webui-docker/tree/master/services/AUTOMATIC1111
這個項目,替換其中的 entrypoint.sh
#!/bin/bash
set -Eeuo pipefail
# TODO: move all mkdir -p ?
mkdir -p /mnt/auto/sd/config/auto/scripts/
# mount scripts individually
find "${ROOT}/scripts/" -maxdepth 1 -type l -delete
cp -vrfTs /mnt/auto/sd/config/auto/scripts/ "${ROOT}/scripts/"
cp -n /docker/config.json /mnt/auto/sd/config/auto/config.json
jq '. * input' /mnt/auto/sd/config/auto/config.json /docker/config.json | sponge /mnt/auto/sd/config/auto/config.json
if [ ! -f /mnt/auto/sd/config/auto/ui-config.json ]; then
echo '{}' >/mnt/auto/sd/config/auto/ui-config.json
fi
declare -A MOUNTS
MOUNTS["/root/.cache"]="/mnt/auto/sd/.cache"
# main
MOUNTS["${ROOT}/models"]="/mnt/auto/sd/models"
MOUNTS["${ROOT}/embeddings"]="/mnt/auto/sd/embeddings"
MOUNTS["${ROOT}/config.json"]="/mnt/auto/sd/config/auto/config.json"
MOUNTS["${ROOT}/ui-config.json"]="/mnt/auto/sd/config/auto/ui-config.json"
MOUNTS["${ROOT}/extensions"]="/mnt/auto/sd/config/auto/extensions"
MOUNTS["${ROOT}/outputs"]="/mnt/auto/sd/config/auto/outputs"
MOUNTS["${ROOT}/extensions-builtin"]="/mnt/auto/sd/extensions-builtin"
MOUNTS["${ROOT}/configs"]="/mnt/auto/sd/configs"
MOUNTS["${ROOT}/localizations"]="/mnt/auto/sd/localizations"
# extra hacks
MOUNTS["${ROOT}/repositories/CodeFormer/weights/facelib"]="/mnt/auto/sd/.cache"
for to_path in "${!MOUNTS[@]}"; do
set -Eeuo pipefail
from_path="${MOUNTS[${to_path}]}"
rm -rf "${to_path}"
if [ ! -f "$from_path" ]; then
mkdir -vp "$from_path"
fi
mkdir -vp "$(dirname "${to_path}")"
ln -sT "${from_path}" "${to_path}"
echo Mounted $(basename "${from_path}")
done
if [ -f "/mnt/auto/sd/config/auto/startup.sh" ]; then
pushd ${ROOT}
. /mnt/auto/sd/config/auto/startup.sh
popd
fi
exec "$@"
定製好自己的鏡像之後替換上面流程中需要填寫的鏡像部分即可,注意對應好地域。
Q&A
下載模型不可用
需要檢查模型的文件命名是否正確。
插件無法在線安裝
容器鏡像部署有安全限制,可以將插件下載到本地,然後通過管理後臺上傳到 extensions 目錄下,如果想支持通過 url ,需要自行定製 docker 鏡像,修改相關的參數。
如何訪問到 Stable Diffusion 的api
需要定製鏡像,開啓 --api 參數,然後訪問 /docs 查看可調用 api。
資費部分
本次應用依賴函數計算和 NAS 文件存儲,使用前請先領取相應的免費額度或者購買相應的資源包,具體的資費說明,請參考官網說明。
更靈活的定製方案
可以嘗試將整個 webui 目錄映射至 NAS, 這樣修改源碼比較方便。
其他注意事項
請關注對應的開源協議,防止您商業化可能的風險。
相關鏈接:
[1] 註冊並登錄阿里雲賬號
https://account.aliyun.com/login/login.htm
[2] 開通函數計算
https://www.aliyun.com/product/fc?spm=5176.devs
[3] 開通文件存儲 Nas 服務
https://www.aliyun.com/product/nas
作者:寒斜
本文爲阿里雲原創內容,未經允許不得轉載。