Qwen-Image、Qwen-Image-Edit基于Lite Server适配NPU推理指导(6.5.908)
本文档主要介绍如何在ModelArts Lite Server环境中部署模型Qwen-Image、Qwen-Image-Edit对应Diffusers、ComfyUI框架,使用NPU卡进行推理。
方案概览
本方案介绍了在Server上使用NPU计算资源部署Diffusers、ComfyUI框架用于推理的详细过程。完成本方案的部署,需要先联系您所在企业的华为方技术支持购买Server资源。
本方案目前仅适用于企业客户。
资源规格要求
推推荐使用ModelArts Lite Server的Ascend Snt9B资源。
获取软件和镜像
分类 |
名 |
获取路径 |
---|---|---|
插件代码包 |
AscendCloud-AIGC-6.5.908-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 |
获取路径:Support-E,在此路径中查找下载ModelArts 6.5.908.2版本。
说明:
如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 |
基础镜像 |
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 Snt9b:中国-香港: swr.ap-southeast-1.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b-20250729103313-3a25129 |
从SWR拉取。 |
支持特性
套件类型 |
模型名称 |
---|---|
Diffusers |
Qwen-Image Qwen-Image-Edit Qwen-Image-Lightning |
ComfyUI |
Qwen-Image Qwen-Image-Edit |
步骤一:准备环境
- 请参考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}
步骤二:启动容器镜像
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} 代表镜像名称。
- -p 8183:8183 开启一个端口,可以通过 http://宿主机IP:8183 访问容器服务(如冲突,可自行更换其他端口)。
- 进入snt9b容器。需要将${container_name}替换为实际的容器名称,例如:comfyui。
docker exec -it ${container_name} bash
步骤三:Diffusers部署
安装依赖和模型包
- 使用如下命令登录huggingface,并输入个人账号https://huggingface.co/Qwen/Qwen-Image的token,用于自动下载模型权重。
登录成功后,直接启动Diffusers推理脚本即可实现自动下载。
huggingface-cli login
也可以手动下载模型权重,上传到容器的/home/ma-user目录下,官网下载地址(需登录)。
- 安装python依赖包。
pip install diffusers pip install peft==0.17.0 pip install transformers==4.54.1 pip install urllib3==1.26.7
启动服务
- Qwen-Image执行python脚本
- 新建一个python文件qwen-image.py,将Qwen-Image链接中的代码内容复制到文件中
- 修改qwen-image.py文件,model_name请修改为自己的权重路径
import torch_npu from torch_npu.contrib import transfer_to_npu model_name = "/home/ma-user/Qwen-Image" torch.npu.config.allow_internal_format = False
如下图:
将pipe.vae.enable_tiling()插入到pipe = pipe.to(device)之后,如下图:
- 执行python qwen-image.py进行推理,生成图片是当前目录下的example.png
- Qwen-Image-Edit执行python脚本
- 新建一个python文件qwen-image-edit.py,将Qwen-Image-Edit链接中的代码复制到文件中
- 修改qwen-image-edit.py文件,model_name请修改为自己的权重路径
将如下代码添加或替换掉对应内容
import torch_npu from torch_npu.contrib import transfer_to_npu torch.npu.config.allow_internal_format = False from diffusers import QwenImageEditPipeline model_name = "/home/ma-user/Qwen-Image-Edit" pipeline = QwenImageEditPipeline.from_pretrained(model_name)
pipeline.vae.enable_tiling()
如下图:
- 执行python qwen-image-edit.py进行推理。
- Qwen-Image-Lightning执行python脚本
- 新建一个python文件qwen-image-lightning.py,将Qwen-Image-Lightning链接中的代码复制到文件中
- 修改Qwen-Image-Lightning.py文件
将如下代码添加或替换掉对应内容, image_name, lightning_name请修改为自己的权重路径
import torch_npu from torch_npu.contrib import transfer_to_npu torch.npu.config.allow_internal_format = False
image_name = "./Qwen-Image" lightning_name = "./Qwen-Image-Lightning" weight_name = "Qwen-Image-Lightning-4steps-V2.0-bf16.safetensors" pipe = DiffusionPipeline.from_pretrained(image_name, scheduler=scheduler, torch_dtype=torch.bfloat16 ).to("cuda") pipe.load_lora_weights(lightning_name, weight_name=weight_name) pipe.vae.enable_tiling()
如下图:
- 执行python qwen-image-lightning.py进行推理。
步骤四:ComfyUI部署
安装依赖和模型包
- 下载ComfyUI软件包。
如果上述方法无法下载ComfyUI源码,可参考如下操作,手动下载到本地再上传到容器中,如图1所示。
- 登录https://github.com/comfyanonymous/ComfyUI#页面,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。
访问Github下载开源软件需要连通外网,请用户自行配置网络代理。
- 将下载好的ComfyUI-master.zip文件上传到容器的/home/ma-user/目录下,并解压。
cd /home/ma-user/ unzip ComfyUI-master.zip cd ComfyUI-master
- 登录https://github.com/comfyanonymous/ComfyUI#页面,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。
- 安装依赖,将requirements.txt中的torch修改为torch==2.5.1。
pip install -r requirements.txt
- 下载模型权重。
- 将对应模型放到ComfyUI/models/下的对应文件夹下
- qwen_image_edit_bf16.safetensors
loras
- Qwen-Image-Lightning-4steps-V2.0.safetensors
text_encoders
vae
- 将对应模型放到ComfyUI/models/下的对应文件夹下
开启高性能模式
export TASK_QUEUE_ENABLE=2
启动服务
- 用ifconfig命令获取容器IP(若无效可使用ip addr,或者自行寻找其他方式获取到容器IP)。
图2 snt9b获取容器IP
- 进入目录。
cd /home/ma-user/ComfyUI
- 启动服务命令如下,--listen后的ip改为你的容器IP。
python main.py --port 8183 --listen 172.17.0.7 --force-fp16 --bf16-unet
- 使用http://{宿主机ip}:8183可以访问前端页面。
- 如下运行文生图。
图3 访问前端页面
选择qwen-image工作流,如下图。
图4 浏览模板图5 选择工作流选择对应权重文件并点击运行,如下图所示。
图6 选择对应权重文件并点击运行成功之后结果如下图。
图7 推理成功 - 如下运行图生图。
图8 访问前端页面
选择qwen-image-edit工作流,如下图。
图9 浏览模板点击图像生成后选择工作流,如下图
图10 选择工作流选择对应权重文件和输入图像,并点击运行,如下图所示。
图11 选择对应权重文件和输入图像并运行成功之后保存图像节点会输出对应图像。
- 如下运行文生图。