本文介紹如何使用阿里云AMD CPU云服務器(g8a)和龍蜥容器鏡像,并基于Stable Diffusion模型搭建個人版文生圖服務。
背景信息
Stable Diffusion是文本到圖像的潛在擴散模型,它可以根據文本提示詞生成對應的圖像。Stable Diffusion模型是擴散模型的變種,可以通過逐步對隨機高斯噪聲進行去噪以獲得感興趣的樣本。與傳統生成模型相比,Stable Diffusion可以在不需要復雜訓練過程或大量數據集的情況下生成真實感強、細節豐富的圖像。目前該項目已經應用于多種場景,包括計算機視覺、數字藝術、視頻游戲等領域。
創建ECS實例
前往實例創建頁。
按照界面提示完成參數配置,創建一臺ECS實例。
需要注意的參數如下,其他參數的配置,請參見自定義購買實例。
實例:Stable Diffusion模型的推理過程需要耗費大量的計算資源,運行時占用大量內存,為了保證模型運行的穩定,實例規格至少需要選擇ecs.g8a.16xlarge(256 GiB內存)。
鏡像:Alibaba Cloud Linux 3.2104 LTS 64位。
公網IP:選中分配公網IPv4地址,帶寬計費模式選擇按使用流量,帶寬峰值設置為100 Mbps。以加快模型下載速度。
系統盤:Stable Diffusion的運行需要下載多個模型文件,會占用大量存儲空間,為了保證模型順利運行,建議系統盤設置為100 GiB。
添加安全組規則。
在ECS實例安全組的入方向添加安全組規則并放行22、443、7860端口(用于訪問WebUI服務)。具體操作,請參見添加安全組規則。
創建完成后,在ECS實例頁面,獲取公網IP地址。
說明公網IP地址用于進行AI對話時訪問WebUI服務。
創建Docker運行環境
遠程連接該ECS實例。
具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
安裝Docker。
具體操作,請參見在Alibaba Cloud Linux 3實例中安裝Docker。
創建并運行PyTorch AI容器。
龍蜥社區提供了豐富的基于Anolis OS的容器鏡像,包括針對AMD優化過的PyTorch鏡像,可以直接使用該鏡像直接創建一個PyTorch運行環境。
以下命令首先拉取容器鏡像,隨后使用該鏡像創建一個以分離模式運行的、名為
pytorch-amd
的容器,并將用戶的家目錄映射到容器中,以保留開發內容。sudo docker pull registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1 sudo docker run -d -it --name pytorch-amd --net host -v $HOME:/root registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1
部署Stable Diffusion
手動部署
步驟一:安裝配置模型所需軟件
進入容器環境。
sudo docker exec -it -w /root pytorch-amd /bin/bash
重要后續命令需在容器環境中執行,如意外退出,請使用以上命令重新進入容器環境。如需查看當前環境是否為容器,可以執行
cat /proc/1/cgroup | grep docker
查詢(有回顯信息則為容器環境)。安裝部署Stable Diffusion所需的軟件。
yum install -y git git-lfs wget tmux mesa-libGL gperftools-libs
啟用Git LFS。
下載預訓練模型需要Git LFS的支持。
git lfs install
步驟二:下載源碼與模型
創建一個tmux session。
tmux
說明下載預訓練模型耗時較長,且成功率受網絡情況影響較大,建議在tmux session中下載,以免ECS斷開連接導致下載模型中斷。
下載Stable Diffusion WebUI項目源碼。
git clone -b v1.5.2 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
下載Stable Diffusion WebUI項目源碼所需依賴模型。
mkdir stable-diffusion-webui/repositories && cd $_ git clone https://github.com/Stability-AI/stablediffusion.git stable-diffusion-stability-ai git clone https://github.com/Stability-AI/generative-models.git generative-models git clone https://github.com/crowsonkb/k-diffusion.git k-diffusion git clone https://github.com/sczhou/CodeFormer.git CodeFormer git clone https://github.com/salesforce/BLIP.git BLIP
將Stable Diffusion所需的依賴模型切換到指定分支,以保證生成結果的穩定。
git -C stable-diffusion-stability-ai checkout cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf git -C generative-models checkout 5c10deee76adad0032b412294130090932317a87 git -C k-diffusion checkout c9fe758757e022f05ca5a53fa8fac28889e4f1cf git -C CodeFormer checkout c5b4593074ba6214284d6acd5f1719b6c5d739af git -C BLIP checkout 48211a1594f1321b00f14c9f7a5b4813144b2fb9
下載Stable Diffusion預訓練模型。
cd ~ && mkdir -p stable-diffusion-webui/models/Stable-diffusion wget "https://www.modelscope.cn/api/v1/models/AI-ModelScope/stable-diffusion-v1-5/repo?Revision=master&FilePath=v1-5-pruned-emaonly.safetensors" -O stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors mkdir -p ~/stable-diffusion-webui/models/clip git clone --depth=1 https://gitee.com/modelee/clip-vit-large-patch14.git ~/stable-diffusion-webui/models/clip/clip-vit-large-patch14
修改腳本文件,使Stable Diffusion運行時從本地調用ViT多模態模型。
sed -i "s?openai/clip-vit-large-patch14?${HOME}/stable-diffusion-webui/models/clip/clip-vit-large-patch14?g" ~/stable-diffusion-webui/repositories/stable-diffusion-stability-ai/ldm/modules/encoders/modules.py
步驟三:部署運行環境
更換pip下載源。
在安裝依賴包之前,建議您更換pip下載源以加速安裝。
創建pip文件夾。
mkdir -p ~/.config/pip
配置pip安裝鏡像源。
cat > ~/.config/pip/pip.conf <<EOF [global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com EOF
安裝Python運行依賴。
pip install cython gfpgan open-clip-torch==2.8.0 httpx==0.24.1 pip install git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1
設置環境變量
OMP_NUM_THREADS
和GOMP_CPU_AFFINITY
。ZenDNN運行庫需要針對硬件平臺顯式設置環境變量
OMP_NUM_THREADS
和GOMP_CPU_AFFINITY
。cat > /etc/profile.d/env.sh <<EOF export OMP_NUM_THREADS=\$(nproc --all) export GOMP_CPU_AFFINITY=0-\$(( \$(nproc --all) - 1 )) EOF source /etc/profile
運行腳本,自動化部署Stable Diffusion的運行環境。
cd ~/stable-diffusion-webui venv_dir="-" ./webui.sh -f --skip-torch-cuda-test --exit
步驟四:進行AI對話
執行如下命令,開啟WebUI服務。
export LD_PRELOAD=/usr/lib64/libtcmalloc.so.4 export venv_dir="-" python3 launch.py -f --skip-torch-cuda-test --skip-version-check --no-half --precision full --use-cpu all --listen
當出現如下信息時,表示WebUI服務啟動成功。
在瀏覽器地址欄輸入
http://<ECS公網IP地址>:7860
,進入Web頁面。在prompt對話框中,輸入對話內容(僅支持英文Prompt,例如:
Urban portrait of a skateboarder in mid-jump, graffiti walls background, high shutter speed
),單擊Generate,即可開始AI對話。說明您也可以輸入其他Prompt,來挖掘Stable Diffusion更多能力。
自動化部署
阿里云提供了自動部署腳本,可以一鍵部署運行Stable Diffusion模型。
下載自動部署腳本。
wget https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20231213/bild/deploy_stable-diffusion_amd-docker.sh
進入容器環境。
sudo docker exec -it -w /root pytorch-amd /bin/bash
重要后續命令需在容器環境中執行,如意外退出,請使用以上命令重新進入容器環境。如需查看當前環境是否為容器,可以執行
cat /proc/1/cgroup | grep docker
查詢(有回顯信息則為容器環境)。下載tmux并創建一個tmux session。
yum install -y tmux tmux
說明該腳本運行中會下載模型文件,耗時較長,建議在tmux session中啟動部署,以免ECS斷開連接導致部署中斷。
為自動化部署腳本添加執行權限。
chmod +x deploy_stable-diffusion_amd-docker.sh
運行自動化部署腳本。
./deploy_stable-diffusion_amd-docker.sh
當顯示結果如下所示時,說明自動部署腳本已完成。
說明該腳本運行時間較長,在tmux session中進行部署的過程中,如果斷開了ECS連接,重新登錄ECS實例后執行
tmux attach
命令即可恢復tmux session,查看腳本運行進度。在瀏覽器地址欄輸入
http://<ECS公網IP地址>:7860
,進入Web頁面。在prompt對話框中,輸入對話內容(僅支持英文Prompt,例如:
Urban portrait of a skateboarder in mid-jump, graffiti walls background, high shutter speed
),單擊Generate,即可開始AI對話。說明您也可以輸入其他Prompt,來挖掘Stable Diffusion更多能力。