本地部署 Ming-Image-0.1-Design,卡住的通常不是「能不能跑起来」,而是三个可调项怎么组合:分辨率、精度、批量。建议的顺序是先把显存量清楚,再决定分辨率,然后试精度,批量放到最后动。原因是降分辨率会同时损失细节和构图稳定性,降精度则不一定立刻看得出来,先量显存能避免你在参数上反复试错,却把驱动或运行时的问题误判成模型问题。
本地部署的取舍顺序建议是「先量显存 → 再定分辨率 → 然后试精度 → 最后调批量」。显存余量充足时优先保分辨率;显存刚好卡在边界时,可以先试半精度,因为它通常比降分辨率更快释放显存。判断依据要落在同一提示词、同一种子、同一台机器的复跑对比上,以日志里的显存峰值和实际输出文件为准。不同驱动版本和运行时版本的表现可能不同,换机器后需要重新量一次。
列出部署前必须先确认的环境项
环境不确认就直接调参数,很容易把 OOM、CUDA 报错、出图全黑这些问题算到分辨率头上,白跑几轮对照实验。建议先固定四件事:驱动版本、运行时版本、torch 与 CUDA 的匹配情况、以及当前可用显存。
# 驱动与显存一把看全
nvidia-smi
nvidia-smi `--query-gpu`=driver_version,memory.total,memory.used,memory.free `--format`=csv
# 运行时版本
python -V
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
合格判断方式可以按这三条过:torch.cuda.is_available() 返回 True;nvidia-smi 右上角报的 CUDA 版本不低于 torch 编译时使用的 CUDA 版本(版本错配常见的表现是 CUDA error: no kernel image is available 这类运行时报错);memory.free 减掉桌面和系统占用后,仍要大于你最小配置跑通时的峰值。Linux 无桌面环境可以少留,Windows 建议多留一些给显示输出。
用最小配置跑通一次出图
先跑通链路,再谈取舍。最小配置的目标不是出好图,而是确认「加载模型 → 采样 → 落盘」这一段没有断点。
# 字段名仅作示意,实际字段以仓库的 config / CLI 为准
model: Ming-Image-0.1-Design
device: cuda:0
dtype: float16
resolution: 512x512
steps: 20
batch_size: 1
seed: 12345
output_dir: ./out_min
cpu_offload: false
跑通判据建议用四条:进程退出码为 0;output_dir 下出现图片文件且能正常打开;日志里采样进度条从 0 走到设定的 steps;全程没有 OOM、没有 CUDA error、没有 NaN 或全黑输出。
日志里代表成功的行,通常是进度条走到 100% 那一行,以及形如 Saved image to ./out_min/00001.png 的落盘记录。不同版本措辞不同,以你终端里实际打印的那一行为准,把它复制下来当基线,后面每次改参数都跟这一行对齐看。
分辨率往下调一档,对比画质与显存
分辨率是最贵的一项。建议一次只降一档,例如 1024 → 768,或 768 → 512,不要一次跳两档,否则分不清代价发生在哪一级。
# 出图过程中每秒采一次显存,用来记录峰值
nvidia-smi `--query-gpu`=memory.used `--format`=csv -l 1
# 或在生成脚本里记录
import torch
print(torch.cuda.max_memory_allocated() / 1024**2, "MiB")
两档各跑一次,把峰值显存差值和耗时差值记在同一个表里,这就是分辨率让步换回来的空间。画质变化建议按固定五项逐条记录,别只写「有点糊」:远景小物件是否还在、画面内文字是否还成形、手指与肢体是否粘连、边缘是否发虚、背景纹理是否变成色块。同一提示词、同一种子、同一步数下逐张对比,判定标准是你自己能不能接受,而不是别人说够不够。
精度换低一档,看是否出现明显噪点或结构崩坏
精度的切换方式一般落在配置字段或启动参数上,常见形态是 dtype: float16、`--dtype` bf16,或在脚本里写 torch_dtype=torch.float16。以仓库实际暴露的选项为准,不要凭记忆硬编参数名。
切换精度时必须锁死其他变量:同一提示词、同一种子、同一分辨率、同一步数,只动精度一项,跑出来两张图放在一起看。重点排查这些异常:画面出现细密噪点或彩色颗粒;出现规则条纹或网格;结构崩坏,比如五官错位、肢体数量异常;整体色彩偏移或对比度突然变大;输出全黑、全灰或出现 NaN;以及降精度后显存不降反升——后者通常不是精度问题,而是触发了 CPU offload 或分块推理。
如果低一档精度在两张图上都看不出差别,就可以把它作为默认值;如果连续出现结构崩坏,说明这档精度在你的设备上不适合,回到上一档,改从分辨率和批量上找空间。
组合成几套配置并标注适用场景
三项参数的代价方向可以先按这张表对照,把实测值填进去再决定组合。
| 可调项 | 显存方向 | 画质代价 | 可验证方式 |
|---|---|---|---|
| 分辨率降一档 | 下降明显 | 细节与构图稳定性同时损失 | 同种子两档出图逐项对比 |
| 精度降一档 | 下降,但幅度受实现影响 | 可能出现噪点、条纹、结构异常 | 同种子同分辨率两精度对比 |
| 批量降一档 | 下降 | 基本不影响单张画质 | 看单次显存峰值随批量变化 |
把上面的记录拼成三套可以直接照做的配置,每套都留好你的实测显存峰值再定档位。
- A 单张出图配置:分辨率高档、精度高档、批量 1。显存占用最高,接近设备可用上限,跑之前先确认
memory.free有余量。适合封面、需要细节的单张任务,不适合连续大批量。 - B 平衡配置:分辨率中档、半精度、批量 1~2。显存占用中等,是日常出图和少量批量较稳的落点。如果这一档显存长期贴顶,先降批量,不要先降精度。
- C 草稿批量配置:分辨率低档、半精度(必要时叠加 offload 或量化)、批量较大或用脚本循环。显存占用最低,适合批量筛构图、试探提示词。用于正式出图前,建议先用它筛出候选,再换回 B 或 A 重跑。
选型时的判断线可以简单一些:如果降到低精度已经出现结构崩坏,就别把 C 当成最终方案;如果 B 能稳定跑通且画质可接受,就没必要为了省一点显存去动分辨率。所有档位在换驱动、换运行时或换机器之后都要重新量一次,历史记录只能当参考。