想在本机跑 Qwen-Image-2.1,先别急着装依赖。真正决定能不能跑起来的是三个相互牵制的量:显卡可用的显存量、权重以什么精度加载、以及加载方式是整模型常驻还是分步搬运。这三者任何一改动都会挤压另外两个。比较稳的顺序是:先用命令把硬件下限量清楚,再根据剩余显存决定要不要量化或分步加载,然后把选择写进配置文件固定下来,接着从启动日志确认精度真的生效,最后用固定提示词和种子横向比一次,选定长期使用的那一档。
本地部署 Qwen-Image-2.1 时,先量显存再定精度,比反过来省事。单卡显存小于模型实际权重占用时,优先考虑量化或分步加载,而不是硬上高精度。判断是否可行,看启动日志里的 dtype、量化配置和峰值显存是否与配置一致;如果日志与配置不符,说明参数没生效,先修配置再谈画质。最终档位由固定提示词与种子下的耗时和画面差异决定,不能只凭一次出图好看就定下来。
在系统里核对显卡型号、显存与驱动版本
这一步的目的是先确定硬件下限,避免装完框架才发现显存不够。NVIDIA 卡上最直接的是 nvidia-smi,它会同时给出显卡型号、驱动版本、当前显存占用和总量。想只取关键字段便于记录,可以用查询模式:
nvidia-smi
nvidia-smi -L
nvidia-smi `--query-gpu`=index,name,driver_version,memory.total,memory.used `--format`=csv输出里 memory.total 是这张卡的物理显存总量,memory.used 是此刻已占用的部分。真正能留给模型的是总量减去桌面环境、浏览器、其他进程已经吃掉的那部分,所以不要拿总量直接当预算。多卡机器还要注意:每张卡的显存是独立的,除非用并行切分,否则不能简单相加。驱动版本要与所选框架的 CUDA 运行版本匹配,nvidia-smi 右上角显示的 CUDA Version 表示驱动支持的上限,不是已安装的运行时版本。
非 NVIDIA 平台换用对应命令:AMD 可以用 rocm-smi 查看显存与驱动,macOS 可以用 system_profiler SPDisplaysDataType 看统一内存与芯片型号。做完这一步,建议把型号、显存总量、驱动版本、可用余量记在一处,后面调参都以这份记录为参照。
按显存档位决定是否启用量化或分步加载
量化是降低权重存储与计算的数值精度,例如从 bf16/fp16 降到 fp8、int8 或更低比特。它的作用是压低常驻显存,让原本放不下的模型能加载进来;代价是画面细节、画面内小字文本、色彩稳定性等可能发生变化,具体损失多少只能靠出图对比判断,不能提前假定。分步加载(顺序搬运)是另一回事:模块只在用到时才搬进显存,用完再释放,本质是用推理时间换显存空间,主要解决“装不下”的问题,而不是提升速度。
选择时可以先用一个参照点:以 bf16 整模型常驻做基线,看加载阶段是否成功、峰值显存在哪里。如果基线就报显存不足,再依次尝试量化、分步加载,或者两者叠加。判断显存吃紧与否,别只看剩余数字,还要留出系统、显存分配器和中间激活的余量,顶满通常会在出图后半程失败。另外分辨率和批量大小本身就是显存变量,建议先把目标分辨率和批量定下来,再评估需要哪一档精度,否则调完精度换分辨率又要重来。参考顺序大致是:能 bf16 常驻就先用;放不下再考虑量化;量化后仍不足,再加分步加载;分步加载明显拖慢时,回退到低一档精度加小批量的组合。
用配置文件固定模型路径与精度参数
临时在命令行里传参数,几周后自己都记不清当时怎么跑通的。把模型路径、精度、量化、设备、卸载策略这些写进一个配置文件,部署结果才可复现。下面是一份通用骨架,字段名按你实际使用的加载脚本替换即可:
model:
path: /data/models/Qwen-Image-2.1 # 建议绝对路径
precision: bf16 # bf16 / fp16 / fp8 / int8
quantization: none # none / int8 / 4bit
device: cuda:0 # 多卡时显式指明
offload:
enable: false
strategy: sequential # 仅在显存不足时打开
runtime:
resolution: 1024x1024
batch_size: 1
seed: 1234路径尽量写绝对路径,避免因为工作目录不同导致找不到权重;如果权重分散在多个子目录,就在 path 下统一整理。精度和量化这两个字段要和加载器读取的参数名对上,位置通常与模型路径同级。改完配置后不要靠记忆判断是否生效,下一步用日志核对。
从启动日志确认模型是否按预期精度加载
最常见的坑是以为降了精度,实际加载的还是默认档。启动过程里需要关注的行通常包括:模型目录、推理精度(如 torch_dtype=bfloat16)、量化配置、设备映射,以及加载完成后的显存占用打印。示意如下:
[load] model_dir=/data/models/Qwen-Image-2.1
[load] torch_dtype=bfloat16
[load] quantization=none
[load] device_map={'': 'cuda:0'}
[load] vram_after_load=...对照方法是主动做一次差量:把配置里的精度改成另一档,重启一次,比较两轮日志的差异。如果两行的 dtype 完全一样,说明配置没被读到,可能被代码里的默认值覆盖,或者加载器走了另一份缓存配置。也可以直接查看权重目录下的 config.json,确认其中记录的精度与实际加载是否一致。确认无误后,再进入出图对比,否则比较的是同一个东西,白浪费一轮。
对比不同精度下的出图耗时与结果差异
最终选哪一档,靠固定变量下的横向比较,而不是凭单张图印象。做法是固定同一段提示词、同一个随机种子、同一分辨率和步数,只改精度档位,其余保持一致。每档至少重跑几次,记录单张耗时并取中位数,同时记录加载后与出图峰值显存,避免只看首张的时间。
画面侧建议按几个维度逐一观察:画面内小字文本是否发糊或笔画粘连、细密纹理(织物、毛发、树叶)是否糊成一团、整体色彩是否偏移、结构是否符合提示词要求。把每档的耗时、显存、上述几项观察列进一张表,选择在可接受耗时内画面变化最小的一档。定下来之后,把该档位的精度和量化参数写回配置文件,下次启动直接复用,不再临时改命令行。