如何用 Serverless 一鍵部署 Stable Diffusion?

本篇章是阿里雲函數計算部署 Stable Diffusion 系列的第三篇,如果說第一篇是嘗試使用雲服務來解決用戶本地部署 Stable Diffusion 的問題(顯卡成本,部署技術複雜),第二篇是面向技術同學解決雲服務 Stable Diffusion 的實用性問題(自定義模型,擴展),那麼本篇則是以更大衆的方式實現本地電腦的平替,使得人人皆可擁有一套實用的 Stable Diffusion 服務,不管你是普通用戶,或者是技術同學,皆可適用。

前置條件

1. 註冊並登錄阿里雲賬號[1]

2. 開通函數計算[2]

3. 開通文件存儲 NAS 服務[3]

函數計算和文件存儲 NAS 都是使用的時候纔去計費,目前,函數計算和文件存儲 NAS 都有新用戶免費額度,可以去阿里雲官網領取。

快速開始

首先進入應用中心:https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Ffcnext.console.aliyun.com%2Fapplications&lang=zh

通過模版創建應用-> 人工智能選項卡-> 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

作者:寒斜

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章