【換模型更簡單】如何用 Serverless 一鍵部署 Stable Diffusion?

Serverless發表於2023-05-18

image.png
作者|寒斜(阿里雲智慧技術專家)

前文回顧

AI 作畫火了,如何用 Serverless 函式計算部署 Stable Diffusion?
【自己更換模型】如何用 Serverless 一鍵部署 Stable Diffusion?

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

前置條件

大家不用通費用的問題,本身函式計算和檔案儲存Nas都是使用的時候才去計費,而且費用比較低廉。

快速開始

首先進入應用中心:
https://account.aliyun.com/login/login.htm?oauth_callback=htt...

透過模版建立應用-> 人工智慧選項卡-> AI數字繪畫stable-diffusion自定義模板->立即建立

填寫表單項

選擇直接部署-> 杭州地域 -> 複製開發者準備好的容器映象
點選建立並部署預設環境。

應用部署

接下來什麼都不需要操作,等待應用部署即可,約花費5-10分鐘, 如果你是技術同學,可以展開看看我們提供的部署日誌,觀察部署過程

配置管理後臺

部署成功後得到兩個域名

其中sd開頭的是主服務,目前因為沒映象還不能訪問,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源站下載下來的檔案,需要把檔案字尾改一下。比如這裡,需要確保檔案的名字是嚴格的 比如sd-v1-5-inpainting.ckpt這種
模型下載完,我們可以開啟sd的服務了

原始碼定製

在這裡也貼上構建映象的原始碼,如果您是一名開發同學,可以構建自己的映象

基於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映象,修改相關的引數。

如何訪問到 sd 的api

需要定製映象,開啟 --api 引數,然後訪問 /docs 檢視可呼叫api

資費部分

本次應用依賴函式計算和Nas檔案儲存,使用前請先領取相應的免費額度或者購買響應的資源包,具體的資費說明,請參考官網說明

更靈活的定製方案

可以嘗試將整個 webui 目錄對映直nas, 這樣修改原始碼比較方便。

其他注意事項

請關注對應的開源協議,防止您商業化可能得風險。

相關文章