Diffusers、ComfyUI套件基于ModelArts Lite Server适配PyTorch NPU的推理指导(6.5.906)
本文档主要介绍如何在ModelArts Lite Server环境中部署文生图模型Stable Diffusion系列、HUNYUAN模型,对应Diffusers、ComfyUI框架,使用NPU卡进行推理。
方案概览
本方案介绍了在Server上使用昇腾计算资源部署Diffusers、ComfyUI框架用于推理的详细过程。完成本方案的部署,需要先联系您所在企业的华为方技术支持购买Server资源。
本方案目前仅适用于企业客户。
资源规格要求
推理部署推荐使用“西南-贵阳一”Region上的Server资源、Ascend Snt9B和Snt9B23。
获取软件和镜像
分类 |
名称 |
获取路径 |
---|---|---|
插件代码包 |
AscendCloud-AIGC-6.5.906-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 |
获取路径:Support-E,在此路径中查找下载ModelArts 6.5.906 版本。
说明:
如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 |
基础镜像 |
Snt9B:西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b-20250729103313-3a25129 Snt9B23:西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b23-20250729103313-3a25129 |
从SWR拉取。 |
支持特性
套件类型 |
模型名称 |
---|---|
Diffusers |
SD1.5 SDXL SD3.5 HUNYUAN |
ComfyUI |
SD1.5 SDXL SD3.5 |
步骤一:准备环境
- 请参考Lite Server资源开通,购买Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。
购买Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。
当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
- 检查环境。
- SSH登录机器后,检查NPU设备状态。运行如下命令,返回NPU设备信息。
npu-smi info
如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。
- 检查docker是否安装。
docker -v #检查docker是否安装
如尚未安装,运行以下命令安装docker。
yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
- 配置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
- SSH登录机器后,检查NPU设备状态。运行如下命令,返回NPU设备信息。
- 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表1。
docker pull {image_url}
步骤二:启动容器镜(Snt9b)
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=host \ ${image_name} bash
参数说明:
- --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如comfyui。
- --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。
- 若需要启动多卡推理服务,则需要挂载多卡,例如再添加一个--device=/dev/davinci2
- ${image_name} 代表镜像名称。填写的是表1 获取软件和镜像中的基础镜像名称。
- -p 8183:8183 开启一个端口,可以通过 http://宿主机IP:8183 访问容器服务(如冲突,可自行更换其他端口)。
docker exec -it ${container_name} bash
步骤二:启动容器镜(Snt9b23)
docker run -itd \ --privileged \ --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=host \ ${image_name} bash
参数说明:
- --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如comfyui。
- --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。
- 若需要启动多卡推理服务,则需要挂载多卡,例如再添加一个--device=/dev/davinci2
- ${image_name} 代表镜像名称。填写的是表1 获取软件和镜像中的基础镜像名称。
- -p 8183:8183 开启一个端口,可以通过 http://宿主机IP:8183 访问容器服务(如冲突,可自行更换其他端口)。
docker exec -itu root ${container_name} bash
步骤三:Diffusers部署
安装依赖和模型包
- 使用如下命令登录huggingface,并输入个人账号的token,用于自动下载模型权重。
登录成功后,直接启动Diffusers推理脚本即可实现自动下载。
huggingface-cli login
也可以手动下载模型权重,上传到容器的/home/ma-user目录下,官网下载地址(需登录)。
- SD1.5下载链接:https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5
- SDXL下载链接:https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main
- SD3.5-medium下载链接:https://huggingface.co/stabilityai/stable-diffusion-3.5-medium/tree/main
- SD3.5-large下载链接:https://huggingface.co/stabilityai/stable-diffusion-3.5-large/tree/main
- HUNYUAN下载链接:https://huggingface.co/Tencent-Hunyuan/HunyuanDiT-Diffusers/tree/main
- 安装插件代码包。
- 将获取到的插件代码包AscendCloud-AIGC-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。插件代码包获取地址参见表1。
cd /home/ma-user/temp unzip AscendCloud-AIGC-*.zip #解压
- 将AIGC包解压后,进入到获取的/home/ma-user/temp/aigc_inference/torch_npu/utils/ascend_diffusers目录下,安装ascend_diffusers包。
cd /home/ma-user/temp/aigc_inference/torch_npu/utils/ascend_diffusers pip install -e .
- 将AIGC包解压后,进入到获取的/home/ma-user/temp/aigc_inference/torch_npu/utils/AscendX-MM目录下,安装AscendX-MM包。
cd /home/ma-user/temp/aigc_inference/torch_npu/utils/AscendX-MM pip install -e .
- 将获取到的插件代码包AscendCloud-AIGC-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。插件代码包获取地址参见表1。
export MODEL_PATH='下载好的huggingface模型路径',例如/home/ma-user/stable-diffusion-3.5-medium。如果未手动下载,想要自动下载则不加model_id参数即可。 cd /home/ma-user/temp/aigc_inference/torch_npu/diffusers/0.31.0/examples
单卡模型推理启动服务命令如下,详细参数请参考/home/ma-user/temp/aigc_inference/torch_npu/diffusers目录下的Readme文件。
- SD1.5模型推理启动命令:
pip install diffusers==0.30.2 python sd_inference_example.py --model_name sd15 --model_id ${MODEL_PATH} --prompt 'a dog' --num_inference_steps 20 --width 512 768 1024 --height 512 768 1024
- SDXL模型推理启动命令:
pip install diffusers==0.30.2 python sd_inference_example.py --model_name sdxl --model_id ${MODEL_PATH} --prompt 'a dog' --num_inference_steps 20 --width 768 1024 --height 768 1024
- SD3.5模型推理启动命令:
pip install diffusers==0.31.0 python sd_inference_example.py --model_name sd35 --model_id ${MODEL_PATH} --prompt 'a dog' --num_inference_steps 28 --width 512 768 1024 --height 512 768 1024
- HUNYUAN模型推理启动命令:
pip install diffusers==0.30.2 export INF_NAN_MODE_FORCE_DISABLE=1 python sd_inference_example.py --model_name hunyuan --model_id ${MODEL_PATH} --prompt 'a dog' --num_inference_steps 20 --width 512 768 1024 --height 512 768 1024
步骤四:ComfyUI部署
安装依赖和模型包
- 下载ComfyUI软件包。
下载ComfyUI源码并切换分支。
git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI git checkout v0.3.7
如果上述方法无法下载ComfyUI源码,可参考如下操作,手动下载到本地再上传到容器中,如图1所示。- 登录https://github.com/comfyanonymous/ComfyUI页面,切换Tag为v0.3.7,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。
访问Github下载开源软件需要连通外网,请用户自行配置网络代理。
- 将下载好的ComfyUI-0.3.7.zip文件上传到容器的/home/ma-user/目录下,并解压。
cd /home/ma-user/ unzip ComfyUI-0.3.7.zip cd ComfyUI-0.3.7
- 登录https://github.com/comfyanonymous/ComfyUI页面,切换Tag为v0.3.7,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。
- 安装依赖,将requirements.txt中的torch修改为torch==2.5.1。
pip install -r requirements.txt
- 下载模型权重。
sd1.5:将v1-5-pruned-emaonly.safetensors复制到ComfyUI/models/checkpoints目录下。
https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
sdxl:将sd_xl_base_1.0.safetensors复制到ComfyUI/models/checkpoints目录下。
sd3.5:将sd3.5_medium.safetensors复制到ComfyUI/models/checkpoints目录下。
此外需要额外下载三个text_encoder相关模型:复制到ComfyUI/models/clip目录下。
https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_l.safetensors
https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_g.safetensors
ComfyUI框架还需要下载推理所需的workflow:
- 安装插件代码包。
- 将获取到的插件代码包AscendCloud-AIGC-xxx.zip和AscendCloud-OPP-6.5.906-torch-xxx.zip文件上传到容器的/home/ma-user/目录下,并解压。插件代码包获取请参见表1。
cd /home/ma-user/ unzip AscendCloud-AIGC-*.zip unzip AscendCloud-OPP-*-torch-*.zip
- 进入ComfyUI/custom_nodes目录下,将解压AIGC包后获取的aigc_inference/torch_npu/comfyui/0.3.7/comfyui_ascend_node文件夹复制到该目录下。
cd ComfyUI/custom_nodes cp -r /home/ma-user/aigc_inference/torch_npu/comfyui/0.3.7/comfyui_ascend_node /home/ma-user/ComfyUI/custom_nodes
- 进入到获取的aigc_inference/torch_npu/utils/ascend_diffusers目录下,安装ascend_diffusers包。
cd /home/ma-user/aigc_inference/torch_npu/utils/ascend_diffusers pip install -e .
- 进入到获取的aigc_inference/torch_npu/utils/AscendX-MM目录下,安装AscendX-MM包。
cd /home/ma-user/aigc_inference/torch_npu/utils/AscendX-MM pip install -e .
- 进入到/home/ma-user/目录下安装ascend_cloud_ops(Snt9b23机型不需要安装)
cd /home/ma-user/ pip install ascend_cloud_ops_custom-*.whl bash ascend_cloud_ops_custom_opp-*.run --install-path=/home/ma-user/ source /home/ma-user/vendors/customize/bin/set_env.bash
- 将获取到的插件代码包AscendCloud-AIGC-xxx.zip和AscendCloud-OPP-6.5.906-torch-xxx.zip文件上传到容器的/home/ma-user/目录下,并解压。插件代码包获取请参见表1。
开启高性能模式
export CACHE_MODE=1
启动服务
- 用ifconfig命令获取容器IP(若无效可使用ip addr,或者自行寻找其他方式获取到容器IP)。
图2 snt9b获取容器IP图3 snt9b23获取容器IP
- 进入目录。
cd /home/ma-user/ComfyUI
- 启动服务命令如下。
python main.py --port 8183 --listen 172.17.0.7 --force-fp16
- 使用http://{宿主机ip}:8183可以访问前端页面。
- 如下运行文生图。
图4 1访问前端页面
根据上面checkpoint的箭头,对新的npu的checkpoint进行规划,如下图。
图5 规划checkpoint在ckpt_name中选择要使用的权重文件,单击Queue Prompt加入推理队列进行推理,如下图。
图6 进入推理队列成功之后结果如下图。
图7 推理成功
- 如下运行文生图。