在ec2上部署qwen-image模型

news/2025/11/19 0:15:49/文章来源:https://www.cnblogs.com/peacemaple/p/19239829

参考资料

  • https://zhuanlan.zhihu.com/p/1937260131931882107

  • https://blog.csdn.net/qq_52065352/article/details/150394958

  • https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/Qwen_Image.pdf

  • https://modelscope.cn/aigc/imageGeneration?tab=advanced

环境初始化

测试环境为g5.12xlarge机器,4卡A10G,cuda版本

# nvidia-smi
Tue Nov 18 10:52:16 2025
NVIDIA-SMI 570.172.08             Driver Version: 570.172.08     CUDA Version: 12.8     # nvcc --version
Cuda compilation tools, release 12.4, V12.4.131

模型下载并上传到efs中

modelscope download --model Qwen/Qwen-Image

使用镜像环境调试

FROM public.ecr.aws/deep-learning-containers/pytorch-inference:2.6.0-gpu-py312
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
ENTRYPOINT ["sleep", "infinity"]

构建镜像

docker pull public.ecr.aws/deep-learning-containers/pytorch-inference:2.6.0-gpu-py312docker build -t qwenllm:imagev1 .
docker tag qwenllm:imagev1 xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/qwenllm:imagev1
docker push xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/qwenllm:imagev1

使用模板启动pod,将仓库和模型通过efs挂载到pod中

apiVersion: apps/v1
kind: Deployment
metadata:name: diffuse-qwen-imagenamespace: aitaolabels:app: diffuse
spec:replicas: 1selector:matchLabels:app: diffusetemplate:metadata:labels:app: diffusespec:serviceAccount: sa-service-account-apinodeSelector:eks.amazonaws.com/nodegroup: llm-ngcontainers:- name: diffuse-containerimage: xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/qwenllm:imagev1ports:- containerPort: 8000name: http-apiresources:limits:nvidia.com/gpu: 4memory: "64Gi"cpu: "24"requests:nvidia.com/gpu: 4memory: "32Gi"cpu: "16"volumeMounts:- name: persistent-storagemountPath: /efsvolumes:- name: persistent-storagepersistentVolumeClaim:claimName: efs-claimrestartPolicy: Always

通过diffusers库推理

使用如下脚本

  • device_map不设置为balanced会仅使用单卡(A10G只有20GB显存),导致oom
  • 实际生成时也只使用单卡,每个step约1分钟时间较久
model_path = "/efs/models/Qwen/Qwen-Image"pipe = DiffusionPipeline.from_pretrained(model_path,torch_dtype=torch.bfloat16,device_map="balanced",
)
...
image = pipe(prompt="中国古典庭院,阳光明媚,高清写实",width=width,height=height,num_inference_steps=20,true_cfg_scale=4.0,generator=generator
).images[0]

多卡并行的官方示例中主要通过以下方式实现

  • 使用torch.multiprocessing.set_start_method('spawn', force=True)设置多进程启动方法为'spawn'
  • 每个GPU对应一个独立的进程(GPUWorker),避免了Python GIL限制和CUDA上下文冲突
  • 使用[MultiGPUManager](javascript:void(0))类管理所有GPU Worker进程,任务自动分配给空闲的GPU Worker
  • 通过队列机制实现了简单的负载均衡

但是这个代码似乎不会对单个生成任务进行多卡并行推理。

  • 每个生成任务会被分配到一个GPU上处理
  • 通过任务队列([task_queue](javascript:void(0)))分发给不同的GPU Worker进程
  • 每个任务只会在一个GPU上执行,而不是跨多个GPU并行执行

所以还是会出现oom

GPU 0 model initialization failed: CUDA out of memory. Tried to allocate 72.00 MiB. GPU 0 has a total capacity of 22.30 GiB of which 68.69 MiB is free. Process 3960521 has 22.23 GiB memory in use. Of the allocated memory 21.79 GiB is allocated by PyTorch, and 196.79 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

使用comfyUI

  • https://comfyanonymous.github.io/ComfyUI_examples/qwen_image/

仍旧使用上面的pod模板

# 安装 modelscope
pip install modelscope

下载fp8模型

# 下载模型文件
modelscope download --model Comfy-Org/Qwen-Image_ComfyUI split_files/diffusion_models/qwen_image_fp8_e4m3fn.safetensors
# 下载Text Encoder模型
modelscope download --model Comfy-Org/Qwen-Image_ComfyUI split_files/text_encoders/qwen_2.5_vl_7b_fp8_scaled.safetensors
# 下载VAE模型
modelscope download --model Comfy-Org/Qwen-Image_ComfyUI split_files/vae/qwen_image_vae.safetensors $ tree 
.
├── diffusion_models
│   └── qwen_image_fp8_e4m3fn.safetensors
├── text_encoders
│   └── qwen_2.5_vl_7b_fp8_scaled.safetensors
└── vae└── qwen_image_vae.safetensors

拷贝模型到ComfyUI的model目录下

aws s3 sync ./ s3://bucketname/Comfy-Org/Qwen-Image_ComfyUI/

启动ComfyUI

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI && pip install -i https://mirrors.ustc.edu.cn/pypi/simple/ -r requirements.txt
python  main.py  --port 8000

测试生成,大约耗时38s

  • 查看资源消耗,仍旧没有使用多卡,目前看来得需要一个强大的单卡会更好(显存要够)。
  • 部分模型参数被offload到cpu中,消耗了月20GB内存,所以理论上单卡的g5机型就能运行起来。

image-20251118232154256

下载lora模型

/efs/ComfyUI/models/loras# modelscope download --model DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1 model.safetensors --local_dir ./

使用4step 和8step 的lora模型能够大幅加快生成速度

https://www.modelscope.cn/models/lightx2v/Qwen-Image-Lightning/files

效果如下

image-20251119000747077

后续需要封装为api可以参考文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/969481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一种成熟的状态机

好的!我将线程化状态机实现拆分为头文件和源文件的形式。 1. 头文件 ThreadedStateMachine.hcpp#ifndef THREADED_STATE_MACHINE_H #define THREADED_STATE_MACHINE_H#include <iostream> #include <map>…

linux c 文件删除文件夹

在 Linux 系统中,删除一个文件夹及其内部的所有文件和子文件夹(包括空文件夹)可以使用 rm -r 命令。以下是几种常见的方法:方法 1:使用 rm -r 命令(最常用) rm -r /path/to/folder-r:递归删除(包括子目录) /…

linux c 指针

在 Linux 系统中,C 指针(C Pointer)是用于内存管理和数据结构操作的重要概念。C 语言中的指针是一种非常灵活的工具,可以用来访问和操作内存地址,从而实现高效的程序设计。一、C 指针的基本概念指针:是一个变量,…

AI元人文的“双模决策”体系:自动驾驶与人机协作——附语:关于一个思维陷阱的坦诚

AI元人文的“双模决策”体系:自动驾驶与人机协作 ——附语:关于一个思维陷阱的坦诚 AI元人文构建的双层决策架构:“自动驾驶模式”(基于嵌入式价值协议的自主裁决) 对应场景:绝大多数有预案、可预测的常规及紧急…

2025留学生名企内推首选清单:从实习到入职全程护航,5家实力机构深度测评

2025留学生名企内推首选清单:从实习到入职全程护航,5家实力机构深度测评一、2025年留学生名企内推怎么选?这五个问题你可能正在纠结 作为深耕留学生求职规划领域十年的顾问,我每天都会接到大量留学生及家长的咨询。…

2025新加坡留学机构推荐:从新国大到南洋理工,选对中介少走弯路

2025新加坡留学机构推荐:从新国大到南洋理工,选对中介少走弯路一、2025年新加坡留学中介怎么选?这五个问题你可能正在纠结 作为深耕国际教育规划领域十余年的咨询师,我每天都会接待大量计划赴新留学的学生和家长。…

11.18工作汇总

今日主要完成任务:名人经历搜索上线 明天任务安排: 准备alpha阶段发布 燃尽图

OI 笑传 #30

SuzumenoNamida怎么用 suzume 当摘要阅读这么多,suzume桑是你引的流吗。。。那我再试试。 今天是 ABC432 的 CDEF。超绝注意力场+码力场。 赛时发现 C 比较问号于是去看 DE,结果心血来潮想去把 D 写了,结果还真写出…

2025年11月马来西亚留学中介排名:从本科到博士的专属申请方案

2025年11月马来西亚留学中介排名:从本科到博士的专属申请方案一、2025年马来西亚留学中介怎么选?这五个问题你可能正在纠结 作为一位深耕东南亚国际教育规划领域十年的咨询师,我每天都会接待大量计划赴马留学的学生…

rust基础第一篇:环境搭建

rust基础第一篇:环境搭建windows环境,cargo build报错error: linking with `link.exe` failed: exit code: 1

43

所学时间;9小时

Windows-Delivery-Optimization

Windows-Delivery-Optimization导航 (返回顶部)1. Dosvc 2. 传递优化的副作用2.1 关闭传递优化 2.2 设置服务失败后的操作 2.3 禁用端口7680 2.4 删除超大文件3. 设置传递优化 4. 扩展阅读4.1 如何在 Windows 中创建和…

2025韩国留学选中介不踩坑,5家高性价比机构深度测评

2025韩国留学选中介不踩坑,5家高性价比机构深度测评一、2025年韩国留学中介怎么选?这五个问题你可能正在纠结 作为一位深耕东亚留学规划领域十年的咨询师,我每天都会接待大量准备赴韩留学的学生和家长。2025年韩国留…

今晚Cloudflare一哆嗦,我的加班计划全泡汤

事情发生在今晚加班的黄金时间。我正对着代码发愁,想着让ChatGPT帮我debug一下。结果连续三次重试,等来的都是冷冰冰的错误页面。 "行吧,AI也有累的时候",我自我安慰着,顺手想点开X摸鱼五分钟。 结果呢…

老技术人的离开“总是悄无声息

老技术人的"离开“总是悄无声息2025-11-18 23:42 潇湘隐者 阅读(0) 评论(0) 收藏 举报Kerry Osborne的个人网站(http://kerryosborne.oracle-guy.com/)已经有两个多星期打不开了。也不清楚发生了啥事情,好几…

申请澳洲八大认准这些中介!2025年11月高录取率留学机构全解析

申请澳洲八大认准这些中介!2025年11月高录取率留学机构全解析一、2025年澳洲留学中介怎么选?这五个问题你可能正在纠结 作为一位深耕国际教育规划领域十余年的咨询师,我每天都会接待大量计划赴澳留学的学生和家长。…

2025年11月香港留学机构TOP5:高录取率中介都在这,八大申请测评推荐

2025年11月香港留学机构TOP5:高录取率中介都在这,八大申请测评推荐一、2025年香港留学中介怎么选?这五个问题你可能正在纠结 作为一位深耕国际教育规划领域十余年的咨询师,我每天都会接待大量准备申请香港留学的学…

TCP Socket 和 UDP Socket的创建流程

TCP Socket的创建: 1.服务器,客户端调用socket(),创建各自的tcp socket 2.服务器调用bind()绑定自己的ip和端口号 3.服务器调用listen()来监听来自客户端的请求 4.客户端调用connect()指定服务器ip和端口号来向服务器…

保证可靠数据传输的相关原理

可靠数据传输原理(rdt)rdt2.0:首次支持差错恢复的停等协议 rdt 家族中首个具备 “可靠传输” 雏形的版本,针对存在比特差错的信道设计。核心引入校验和(检测错误)、ACK(确认正确接收)和 NAK(告知分组出错)机制…