文档首页/ AI开发平台ModelArts/ 最佳实践/ AIGC模型训练推理/ SD1.5&SDXL ComfyUI、WebUI、Diffusers套件适配PyTorch NPU的推理指导(6.3.909)
更新时间:2024-12-17 GMT+08:00
分享

SD1.5&SDXL ComfyUI、WebUI、Diffusers套件适配PyTorch NPU的推理指导(6.3.909)

本文档主要介绍如何在DevServer环境中部署Stable Diffusion模型对应SD1.5和SDXL的ComfyUI、Webui和Diffusers框架,使用NPU卡进行推理。

方案概览

本方案介绍了在DevServer上使用昇腾计算资源部署ComfyUI、WebUI、Diffusers框架用于推理的详细过程。完成本方案的部署,需要先联系您所在企业的华为方技术支持购买DevServer资源。

本方案新增了300IDUO的支持。

本方案目前仅适用于企业客户。

资源规格要求

推理部署推荐使用“西南-贵阳一”Region上的DevServer资源和Ascend Snt9B和300IDUO。

获取软件和镜像

表1 获取软件和镜像

分类

名称

获取路径

插件代码包

AscendCloud-6.3.909软件包中的AscendCloud-AIGC-6.3.909-xxx.zip

文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。

获取路径:Support-E

说明:

如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。

基础镜像

西南-贵阳一

snt9b:

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2406-aarch64-snt9b-20240910112800-2a95df3

300iduo:

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2406-aarch64-snt3p-20240906180137-154bd1b

从SWR拉取。

步骤一:准备环境

  1. 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。

    购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。

    当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据

  2. 检查环境。
    1. SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。
      npu-smi info

      如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。

    2. 检查docker是否安装。
      docker -v   #检查docker是否安装

      如尚未安装,运行以下命令安装docker。

      yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
    3. 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
      sysctl -p | grep net.ipv4.ip_forward
      如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。
      sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf 
      sysctl -p | grep net.ipv4.ip_forward
  3. 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表1
    docker pull {image_url}
  4. 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。
    docker run -itd \
    --name ${container_name} \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    -p 8183:8183 \
    -v /etc/localtime:/etc/localtime \
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    --shm-size 60g \
    --device=/dev/davinci_manager \
    --device=/dev/hisi_hdc \
    --device=/dev/devmm_svm \
    --device=/dev/davinci3 \
    --network=bridge \
    ${image_name} bash

    参数说明:

    • --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如webui。
    • --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。
    • 若需要启动多卡推理服务,则需要挂载多卡,例如再添加一个--device=/dev/davinci2
    • ${image_name} 代表 ${image_name}。
    • -p 8183:8183 开启一个端口,可以web访问(如冲突,可自行更换其他端口)。
  5. 进入容器。需要将${container_name}替换为实际的容器名称,例如:webui。
    docker exec -it ${container_name} bash

步骤二:ComfyUI部署

安装依赖和模型包

  1. 下载ComfyUI软件包。
    • 下载ComfyUI源码并切换分支。
      git clone https://github.com/comfyanonymous/ComfyUI.git
      cd ComfyUI
      git checkout a82fae23757
    • 如果上述方法无法下载ComfyUI源码,可参考如下操作,手动下载到本地再上传到容器中,如图1所示。
      1. 登录https://github.com/comfyanonymous/ComfyUI页面,切换Tag为v0.2.2,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。
        图1 下载ComfyUI源码

        访问Github下载开源软件需要连通外网,请用户自行配置网络代理。

      2. 将下载好的ComfyUI-0.2.2.zip文件上传到容器的/home/ma-user/目录下,并解压。
        cd /home/ma-user/
        unzip ComfyUI-0.2.2.zip
        cd ComfyUI-0.2.2
  2. 安装依赖。
    pip install -r requirements.txt
  3. 下载sdxl/sd1.5基础模型并复制到ComfyUI/models/checkpoints目录下。

    https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors

    https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors

  4. 安装插件代码包。
    1. 将获取到的插件代码包AscendCloud-AIGC-6.3.909-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。
      cd /home/ma-user/temp
      unzip AscendCloud-AIGC-6.3.909-*.zip #解压
    2. 进入ComfyUI/custom_nodes目录下,将解压AIGC包后获取的aigc_inference/torch_npu/comfyui/a82fae2/comfyui_ascend_node文件夹复制到该目录下。
    3. 进入到获取的aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers目录下进行安装。
      pip install -e .
  5. 如果运行时出现Cannot find bin of op MatMulV2的报错,则在prestartup_script.py文件中注释以下代码。
    torch_npu.npu.set_compile_mode(jit_compile=False)

启动服务

  1. 用ifconfig命令获取容器ip(若无效可使用ip addr,或者自行寻找其他方式获取到容器ip)。

  2. 首先进入目录。
    cd /home/ma-user/ComfyUI
  3. 启动服务命令如下。
    python main.py --port 8183 --listen 172.17.0.7  --force-fp16
  4. 使用http://{宿主机ip}:8183 可以访问前端页面,如下运行文生图。
    图2 访问前端页面

    根据上面checkpoint的箭头,对新的npu的checkpoint进行规划,如下图。

    图3 规划checkpoint

    在ckpt_name中选择要使用的权重文件,单击Queue Prompt加入推理队列进行推理,如下图:

    图4 进入推理队列

    成功之后结果如下图。

    图5 推理成功

步骤三:WebUI部署

安装依赖和模型包

  1. 下载webui1.9.0版本软件包。
    • 下载webui源码
      git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
    • 切换到v1_9_RC分支\
      cd stable-diffusion-webui
      git checkout e164031
  2. 下载sdxl/sd1.5基础模型并复制到stable-diffusion-webui/models/Stable-diffusion目录下。

    https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors

    https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors

    下载vaeapprox-sdxl.pt文件后,复制到容器/home/ma-user/stable-diffusion-webui/models/VAE-approx/目录下。

    https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre

  3. 安装插件代码包。
    1. 将获取到的插件代码包AscendCloud-AIGC-6.3.909-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。
      cd /home/ma-user/temp
      unzip AscendCloud-AIGC-6.3.909-*.zip #解压
    2. 将解压AIGC包后获取的aigc_inference/torch_npu/webui/v1_9_0_RC/ascend_extension文件夹复制到stable-diffusion-webui/extensions目录下。
    3. 进入到获取的aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers目录下进行安装。
      pip install -e .
  4. 安装依赖。
    进入stable-diffusion-webui根目录,安装依赖。
    pip install -r requirements_versions.txt
  5. 如果运行时出现Cannot find bin of op MatMulV2的报错,则在preload.py文件中注释以下代码。
    torch_npu.npu.set_compile_mode(jit_compile=False)

启动服务

  1. 首先进入目录。
    cd /home/ma-user/stable-diffusion-webui
  2. 启动服务命令如下。
    python launch.py --skip-torch-cuda-test --port 8183 --enable-insecure-extension-access --listen --log-startup --disable-safe-unpickle
  3. 使用http://{宿主机ip}:8183 可以访问前端页面,如下跑文生图。
    图6 访问前端页面

步骤四:Diffusers部署

安装依赖和模型包

  1. 安装pip依赖。
    pip install  accelerate transformers==4.41.2 diffusers==0.29.2
  2. 安装插件代码包。
    1. 将获取到的插件代码包AscendCloud-AIGC-6.3.909-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。
      cd /home/ma-user/temp
      unzip AscendCloud-AIGC-6.3.909-*.zip #解压
    2. 将AIGC包解压后,进入aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers目录下,按照README.md安装。
      pip install -e .

      如果运行时出现Cannot find bin of op MatMulV2的报错,则在examples/sd_inference_example.py文件中注释以下代码。

      torch_npu.npu.set_compile_mode(jit_compile=False)

启动服务

  • 单卡SD1.5模型推理启动服务命令如下。
    python examples/sd_inference_example.py --prompt 'a dog' --num_inference_steps 50 --width 512 768 1024 --height 512 768 1024 --dynamo --dynamic
  • 单卡SDXL模型推理启动服务命令如下。
    python examples/sd_inference_example.py --sdxl --model_id stabilityai/stable-diffusion-xl-base-1.0 --prompt 'a dog' --num_inference_steps 50 --width 512 768 1024 --height 512 768 1024 --dynamo --dynamic
  • 多卡SD1.5模型推理启动服务命令如下。

    目前多卡推理仅支持SD1.5模型。

    多卡推理启动前需要切换torch_npu版本,下载torch_npu的whl包到temp目录下

    https://gitee.com/ascend/pytorch/releases/download/v6.0.rc1.1-pytorch2.1.0/torch_npu-2.1.0.post5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

    cd temp
    pip install torch_npu-2.1.0.post5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
    多卡推理启动如下,ASCEND_RT_VISIBLE_DEVICES表示容器内的卡号。
    cd aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers
    ASCEND_RT_VISIBLE_DEVICES=0,1 python -m torch.distributed.launch --nproc_per_node 2 examples/sd_inference_example.py --dynamo --parallel

相关文档