# 使用GPU实例部署AI生图Stable Diffusion WebUI服务
#### 应用场景
StableDiffusion提供完整的文本生成图像能力，适用于生成创意海报、广告图生成、产品概念图、包装设计草稿、游戏角色、场景概念图和影视分镜草图等，适合企业内部创意团队和设计团队快速迭代产品原型。此外StableDiffusion还提供图生图能力，无需专业设计师即可完成复杂的图像编辑，降低成本，提高图片处理效率。
华为云为用户提供使用GPU实例来部署Stable Diffusion WebUI的操作指导，帮助客户在ECS上快速部署AI生图服务。
#### 方案架构
图1Stable Diffusion WebUI部署示意图   
![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002671531349.png "点击放大")
#### 方案优势
使用ECS GPU实例在conda虚拟环境上从0开始部署StableDiffusion WebUI服务，为企业提供高度可控、稳定可靠、可持续扩展的专属算力环境，确保AI生产力在隐私、安全的前提下高效落地。
#### 资源和成本规划
表1资源和成本规划 
| 资源                      | 资源说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 成本说明                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| 安全组                     | 入方向规则： - 优先级：1  - 策略：允许  - 类型：IPv4  - 协议端口：TCP: 8000  - 源地址：0.0.0.0/0                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 免费                                                                                                                                                                                                                                                                                                                                                            |
| 弹性云服务器                  | - 计费模式：包年/包月  - 可用区：可用区1  - 规格：pi2.2xlarge.4。更多规格推荐，请参见[表2]  - 镜像：Ubuntu 22.04 server 64bit with NO Driver(40GiB)，GPU驱动为535.161.08，CUDA为12.2.0  - 系统盘：100GiB  - 数据盘：100GiB  - 弹性公网IP：现在购买  - 线路：全动态BGP  - 公网带宽：按流量计费  - 带宽大小：300 Mbit/s   | ECS涉及以下几项费用： - 云服务器  - 云硬盘  - 弹性公网IP   具体的计费方式及标准请参考[计费模式概述](https://support.huaweicloud.com/price-ecs/ecs_billing_2001.html)。 |
| miniconda            | Miniconda 是一个精简版的Conda环境管理工具，用于管理Python环境和安装第三方库。 获取地址：<https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 免费                                                                                                                                                                                                                                                                                                                                                          |
| Stable Diffusion WebUI | Stable Diffusion WebUI是Stable Diffusion（SD）模型的可视化网页界面，支持文生图（Text-to-image）、图生图（Image-to-image）等操作。 获取地址：<https://github.com/AUTOMATIC1111/stable-diffusion-webui.git>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 免费                                                                                                                                                                                                                                                                                                                                                         |
   
 表2Stable Diffusion WebUI运行可选的GPU弹性云服务规格 
| 模型名称                                                                    | 最小所需规格        | GPU卡         |
|:---|:---|:---|
| clip-vit-large-patch14 stable-diffusion-v1-5 | pi2.2xlarge.4 | T4(16G)\*1   |
| clip-vit-large-patch14 stable-diffusion-v1-5 | p2s.4xlarge.8 | V100(32G)\*1 |
| clip-vit-large-patch14 stable-diffusion-v1-5 | g6.4xlarge.4  | T4(16G)\*1   |
   
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
请联系华为云技术支持选择最适合您部署的GPU卡资源服务器。
#### 前提条件
- 弹性云服务器所在安全组添加了如[表3]所示的安全组规则，具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0030878383.html)。
   表3安全组规则 
  | 方向 | 优先级 | 策略 | 类型  | 协议端口      | 源地址        |
  |:---|:---|:---|:---|:---|:---|
  | 入方向 | 1       | 允许   | IPv4 | TCP: 8000 | 0.0.0.0/0 |
     
  
 
#### 使用GPU实例部署AI生图Stable Diffusion WebUI服务的主要步骤
GPU实例部署AI生图Stable Diffusion WebUI操作步骤如下：
1. [创建GPU弹性云服务器。]
2. [驱动和CUDA的前置条件检查。]
3. [初始化数据盘，用于存放模型文件及相关资源。]
4. [创建conda虚环境。]
5. [下载模型文件。]
6. [安装Stable Diffusion WebUI及其依赖。]
7. [启动Stable Diffusion WebUI。]
8. [打开Stable Diffusion WebUI界面进行测试。]
 
#### 实施步骤
1. 创建GPU弹性云服务器。
   
   本操作以安装了Ubuntu操作系统的pi2.2xlarge.4实例为例。实例配置请注意如下参数，其他参数说明，请参见[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
   1. 实例：pi2.2xlarge.4。更多规格推荐，请参见[表2 Stable Diffusion WebUI运行可选的GPU弹性云服务规格]。
   
   2. 镜像：Ubuntu 22.04 server 64bit with NO Driver(40GiB)，勾选"自动安装GPU驱动"，GPU驱动为535.161.08，CUDA为12.2.0。
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
      建议选择Huawei Cloud EulerOS 2.0或Ubuntu 22.04中未安装驱动的公共镜像，自动安装GPU驱动。建议驱动版本：Driver-535.161.08，CUDA-12.2.0。
      图2GPU实例镜像选择和自动安装GPU驱动选择   
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560768221.png "点击放大") 
   
   3. 弹性公网IP：选择"现在购买"，支持公网访问，用于依赖环境下载和Stable Diffusion WebUI服务的访问。
   
   4. 安全组：入方向放通TCP: 8000端口，用于访问WebUI服务。具体步骤请参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0030878383.html)。
   
   5. 存储与备份：为保证服务稳定运行与数据安全，建议采用系统盘与数据盘分离部署的架构。
      - 系统盘：100GiB，用于安装操作系统、驱动及运行环境。
      
      - 数据盘：100GiB，用于独立存储模型文件、生成图片及相关业务数据等。
       
   
   
   
   
2. 驱动和CUDA的前置条件检查。
   
   执行以下命令，查看显卡基本信息。
   ```
   nvidia-smi
   ```
   如果使用的不是推荐的镜像和驱动版本，请参考[手动安装GPU加速型ECS的Tesla驱动](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0174.html)方法更新驱动到535版本，CUDA更新到12.2。
   
   
3. 初始化数据盘，用于存放模型文件及相关资源。
   
   GPU弹性云服务器创建完成后，请参见[初始化Linux数据盘](https://support.huaweicloud.com/usermanual-evs/evs_01_0033.html)进行数据盘初始化。本实践将数据盘挂载至**/mnt/model**目录，您可以根据业务需要自行定义目录。
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002529848254.png "点击放大")
   
   
4. 创建conda虚环境。
   
   1. 执行以下命令，下载[miniconda安装包](https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh)。
      ```
      wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
      ```
      
   
   2. 执行以下命令，并按照回显提示信息进行操作，安装miniconda。
      ```
      bash Miniconda3-latest-Linux-x86_64.sh
      ```
      
   
   3. 执行以下命令，将conda环境变量添加到启动文件中。
      ```
      echo 'export PATH="$HOME/miniconda3/bin:$PATH"' >> ~/.bashrc
      source ~/.bashrc
      ```
      
   
   4. 执行以下命令，并按照回显提示信息进行操作，创建基于python3.10.6的虚环境。
      ```
      conda create -n sdwebui python=3.10.6
      conda activate sdwebui
      ```
      
   
   
   
   
5. 下载模型文件。
   
   1. 执行以下命令，创建下载模型脚本。
      ```
      vim download_models.py
      ```
      按"i"键进入编辑模式，插入以下内容：
      ```
      from modelscope import snapshot_download
      model_dir = snapshot_download('AI-ModelScope/stable-diffusion-v1-5', cache_dir='/mnt/model', revision='master')
      ```
      模型名称为AI-ModelScope/stable-diffusion-v1-5，本实践中模型的存储路径为*/mnt/model*，可以根据业务需要更换目录。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560648189.png "点击放大")
      添加完成后，按"Esc"键退出编辑模式，并输入":wq"后按"Enter"键，保存并退出文件。
      
   
   2. 执行以下命令，下载stable-diffusion模型。
      ```
      pip install modelscope
      python download_models.py
      ```
      等待模型下载完成。回显中显示"Download model 'AI-ModelScope/stable-diffusion-v1-5' successfully."，则表示模型下载完成。
      
   
   3. 执行以下命令，修改model名字为clip模型。
      ```
      vim download_models.py
      ```
      按"i"键进入编辑模式，修改model名字为clip-vit-large-patch14。
      ```
      model_dir = snapshot_download('AI-ModelScope/clip-vit-large-patch14', cache_dir='/mnt/model', revision='master')
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002529808244.png "点击放大")
      修改完成后，按"Esc"键退出编辑模式，并输入":wq"后按"Enter"键，保存并退出文件。
      
   
   4. 执行以下命令，下载clip模型
      ```
      python download_models.py
      ```
      等待模型下载完成。回显中显示"Download model 'AI-ModelScope/clip-vit-large-patch14' successfully."，则表示模型下载完成。
      
   
   
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   ModelScope是国内的开源模型社区，在中国地区访问速度更快；若在海外环境使用，建议通过Hugging Face获取相应模型。
   
   
6. 安装Stable Diffusion WebUI及其依赖。
   
   1. 执行以下命令，下载[stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui.git)项目。
      ```
      git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
      ```
      
   
   2. 执行以下命令，进入项目目录，修改项目配置
      ```
      cd stable-diffusion-webui
      sed -i 's|stable_diffusion_repo = .*|stable_diffusion_repo = os.environ.get('"'"'STABLE_DIFFUSION_REPO'"'"', "https://github.com/w-e-w/stablediffusion.git")|' ./modules/launch_utils.py
      ```
      
   
   3. 移动模型到项目目录。
      ```
      mv /mnt/model/AI-ModelScope/stable-diffusion-v1-5/v1-5-pruned-emaonly.safetensors /root/stable-diffusion-webui/models/Stable-diffusion/
      mkdir /root/stable-diffusion-webui/openai/
      mv /mnt/model/AI-ModelScope/clip-vit-large-patch14 /root/stable-diffusion-webui/openai/
      ```
      
   
   
   
   
7. 启动Stable Diffusion WebUI。
   
   执行以下命令，运行项目。
   ```
   bash webui.sh -f --listen --port 8000 --no-hashing --no-download-sd-model --api
   ```
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   如果上述命令执行失败，提示Command: "/root/stable-diffusion-webui/venv/bin/python" -m pip install https://github.com/openai/CLIP/archive/d50d76daa670286dd6cacf3bcd80b5e4823fc8e1.zip --prefer-binary，请执行如下命令：
   ```
   source venv/bin/activate
   pip install git+https://github.com/openai/CLIP.git
   bash webui.sh -f --listen --port 8000 --no-hashing --no-download-sd-model --api
   ```
   
   
8. 打开Stable Diffusion WebUI界面进行测试。
   
   1. 在ECS详情界面查看弹性公网ip地址 ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560768223.png "点击放大")
      
   
   2. 打开浏览器输入***http://弹性公网IP:8000*** 访问Stable Diffusion WebUI服务。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002529848256.png "点击放大")
      
   
   3. 打开浏览器输入***http://弹性公网IP:8000/docs*** 访问Stable Diffusion WebUI服务的API文档。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560648191.png "点击放大")
      
   
   
   至此StableDiffusion WebUI就部署完毕并验证正常。您可以在本地浏览器访问***http://弹性公网IP:8000***通过会话或使用API调用进行图片生成或进行API调用。
   
   
 
