跳到主要内容

文生图模型

Kolors 私有化部署:显存大头不在 UNet,在文本编码器

快手可图团队把 T5/CLIP 换成了 ChatGLM3-6B,于是 Kolors 的中文语义和中文文字渲染成了开源阵营里少有的能打的一档——代价是 12.5GB 的文本编码器。搞清楚这一点,24GB 一张卡就够。

Kolors(中文名「可图」)是快手 Kolors 团队 2024 年 7 月 6 日放出的隐空间扩散文生图模型,仓库在 github.com/Kwai-Kolors/Kolors,权重在 Hugging Face 的 Kwai-Kolors 组织下。它的技术选择很直接:Imagen 和 Stable Diffusion 3 用 T5,Kolors 改用 GLM 系的 ChatGLM3-6B 当文本编码器,再用多模态大模型对训练数据重新打标。结果是中英双语提示词都吃得准,提示词长度上限从 SDXL 的 77 token 拉到 256 token,中文文字渲染这一项在开源模型里长期领先。UNet 那一侧仍然是 SDXL 同构的 U-Net 骨干,约 2.6B 参数、原生 1024×1024,VAE 直接沿用 SDXL 的 VAE。

这个结构决定了 Kolors 的部署直觉跟 SDXL 完全相反。fp16 下 UNet 只有 5.16GB,文本编码器却有 12.5GB(官方是 7 个 pytorch_model-0000x-of-00007.bin 分片,pickle 格式,不是 safetensors),VAE 一百多 MB,加起来约 17.9GB 权重,整仓连 fp32 一份下来是 29GB。所以省显存的杠杆不在 UNet,而在把 ChatGLM3 换成量化版:社区常用的 Kijai/ChatGLM3-safetensors 提供 8-bit 6.78GB 和 4-bit 3.92GB 两档,换上之后整条链路能压进 10GB 出头,1024 采样的显存开销就跟普通 SDXL 差不多了。其余的坑也都很具体:官方 conda 环境写的是 Python 3.8;VAE 是 SDXL VAE,fp16 溢出出黑图那套老毛病照样会犯,要么上 fp16-fix VAE 要么 VAE 跑 fp32;提示词超过 256 token 会被静默截断;diffusers 里挂 IP-Adapter 时 image_encoder 必须指定 revision="refs/pr/4" 才能拿到 safetensors,否则只能读原仓库的 pickle 检查点。

还得说清现状:Kolors 的开源权重线停在 1.0。官方仓库 News 的最后一条是 2024 年 11 月 13 日的 Kolors-Portrait-with-Flux 与 Kolors-Character-With-Flux 演示,此后没有再放出新一代基座权重,更新的可图代际只在快手 Kling AI 平台上以 API 形式提供,不发权重。Kwai-Kolors 组织后来公开的是另外两个东西:CoTyle(20B、Apache-2.0、2025 年 11 月 18 日放出,用数字风格码而不是长提示词来控制画风,开源版基座是 Qwen-Image,商用版基座才是 Kolors)和 MetaView(单图新视角合成,MM-DiT 骨干加 Depth Anything 3 的几何先验,已中 ECCV 2026)。也就是说,今天你要私有化部署「可图」,能真正拿到手的就是 Kolors 1.0 这一套——好消息是它便宜、单张 24GB 卡装得下、生态也齐:ControlNet 的 Canny/Depth/Pose 三件套、Inpainting、IP-Adapter-Plus 与 FaceID-Plus、Dreambooth-LoRA 训练脚本全都开着。在 NexGPU 上,跑通它最低只要一张 $0.193/卡·时 的 RTX 3090。

01 —

能下载到的 Kolors 权重都在这里

基座、量化文本编码器、三种 ControlNet、重绘与图像提示适配器,逐个对显存的影响

版本参数量显存上下文说明
Kolors(Kwai-Kolors/Kolors)UNet 约 2.6B + ChatGLM3-6B 文本编码器fp16 权重约 17.9GB(UNet 5.16GB + 文本编码器 12.5GB + SDXL VAE);整仓含 fp32 共 29GB提示词 256 token / 原生 1024×10242024.07.06 的基座权重,中英双语,中文文字渲染是它最出名的一项。官方推理默认 EulerDiscreteScheduler、CFG 5.0、50 步。
Kolors-diffusers同一套权重,diffusers 打包只拉 fp16 variant 约 16.5GBKolorsPipeline / KolorsImg2ImgPipelinediffusers ≥ 0.30 原生支持,from_pretrained(variant="fp16") 直接起。官方文档示例用 DPMSolverMultistepScheduler 配 Karras sigmas、CFG 6.5、25 步,比原仓库的 50 步省一半时间。
ChatGLM3 量化文本编码器(Kijai/ChatGLM3-safetensors)把 6B 文本编码器单独量化4-bit 3.92GB / 8-bit 6.78GB / fp16 12.5GB256 token 上限不变降显存唯一有效的杠杆。换成 4-bit 后,1024 单图采样的显存占用就跟跑 SDXL 差不多,16GB 卡也能进场。
Kolors-ControlNet-Canny / Depth / Pose每个约 1Bfp16 每挂一个约 +2GB1024×10242024.07.26 与 08.06 分批放出。Depth 还要额外下 dpt_hybrid-midas 权重,Pose 要 DWPose 的 ONNX 模型,这两个不在主仓库里,第一次跑经常卡在这。
Kolors-Inpainting约 3Bfp16 替换基座 UNet,约 +6GB1024×1024局部重绘专用权重,电商换背景、商品图改字、去水印这类活直接用它,不要拿基座硬做 mask。
Kolors-IP-Adapter-Plus / IP-Adapter-FaceID-Plus适配器 + OpenAI CLIP-ViT-L-336 图像编码器diffusers 官方文档写明需要 24GB 以上,否则必须 enable_model_cpu_offload()图像提示 / 人脸 ID 保持跟 SDXL 的 IP-Adapter 不通用,必须用 Kolors 这一套。加载 image_encoder 时要写 revision="refs/pr/4",不然读不到 safetensors。

02 —

按你要干的事挑卡

NexGPU 按秒计费的实价,显存按 Kolors 真实占用对齐,不虚标

  • 第一次跑通、验证中文文字渲染、fp16 全量出图

    RTX 3090 24GB$0.193/卡·时

    17.9GB 的 fp16 权重加 1024 采样的激活刚好稳稳落在 24GB 里,而这是我们平台上能整卡装下 Kolors 的最便宜的一张卡。

  • 批量出图、在线服务、把单张成本压到最低

    RTX 4090 24GB$0.540/卡·时

    同样 24GB,但 Ada 的采样吞吐大约是 3090 的两倍,赶量的时候少等一半时间,每张图的绝对成本仍在千分之几美分量级。

  • 叠 IP-Adapter-Plus、FaceID 或多个 ControlNet 同时常驻

    RTX 5090 32GB$0.723/卡·时

    diffusers 官方注明 IP-Adapter 需要 24GB 以上,32GB 让你不必开 cpu offload——offload 会把每张图的时间拖长一大截。

  • Dreambooth-LoRA 微调、多适配器同时训练与评测

    RTX A6000 48GB$0.817/卡·时

    训练态的 UNet、优化器状态、1024 分辨率的激活再加上还没预计算完的 ChatGLM3 嵌入,48GB 让你不用在梯度检查点和 batch size 之间二选一。

03 —

四步在 NexGPU 上把 Kolors 跑起来

从 PyTorch 预装镜像开机到出第一张带中文字的图

  1. 01

    开一台 24GB 卡的实例,装依赖

    从 2,000+ 预置镜像里选 PyTorch 那一档,SSH 或 Jupyter 进去。官方仓库的 conda 环境写的是 Python 3.8,但走 diffusers 路线不必迁就它,用镜像自带的 Python 就行,关键是 diffusers 要 0.30 以上、transformers 要 4.38 以上。

    pip install "diffusers>=0.30.0" "transformers>=4.38.0" accelerate sentencepiece safetensors
  2. 02

    只拉 fp16 那一份权重

    整仓 29GB 里有一半是你用不上的 fp32 UNet。直接拉 Kolors-diffusers 的 fp16 variant,约 16.5GB。注意文本编码器是 7 个 .bin pickle 分片,如果你的加载代码写死了 use_safetensors=True,这一步会报错——要么去掉这个参数,要么换成社区的 ChatGLM3 safetensors 量化版。

    huggingface-cli download Kwai-Kolors/Kolors-diffusers --local-dir weights/Kolors
  3. 03

    起 pipeline,出第一张图

    用 DPMSolverMultistepScheduler 配 Karras sigmas、CFG 6.5、25 步,比原仓库默认的 Euler 50 步快一倍而画质基本持平。如果出来是纯黑图,那是 SDXL VAE 在 fp16 下溢出的老问题,把 VAE 单独转 fp32 或换 fp16-fix 版就好。

    python -c "import torch; from diffusers import KolorsPipeline, DPMSolverMultistepScheduler; p=KolorsPipeline.from_pretrained('weights/Kolors', torch_dtype=torch.float16, variant='fp16').to('cuda'); p.scheduler=DPMSolverMultistepScheduler.from_config(p.scheduler.config, use_karras_sigmas=True); p(prompt='一张瓢虫的照片,微距,变焦,高质量,电影,拿着一个牌子,写着「可图」', guidance_scale=6.5, num_inference_steps=25).images[0].save('kolors.png')"
  4. 04

    挂 IP-Adapter、ControlNet,或者转 ComfyUI

    图像提示走 Kolors-IP-Adapter-Plus,注意 image_encoder 那行的 revision 参数,这是最常见的一个坑。显存不够就开 enable_model_cpu_offload(),够就别开。要可视化工作流的话,ComfyUI 镜像加 kijai 的 ComfyUI-KwaiKolorsWrapper,在节点里直接选 fp16 / 8-bit / 4-bit 三档文本编码器。

    pipe.load_ip_adapter("Kwai-Kolors/Kolors-IP-Adapter-Plus", subfolder="", weight_name="ip_adapter_plus_general.safetensors", revision="refs/pr/4", image_encoder_folder=None)

一张图到底几分钱

按 1024×1024、DPM++ Karras 25 步、单张约 6 秒估算:RTX 3090 24GB 是 $0.193/卡·时,一小时约出 600 张,摊下来 $0.193 ÷ 600 ≈ $0.00032 一张。换 RTX 4090 24GB($0.540/卡·时),Ada 的采样吞吐大约翻倍,单张按 2.7 秒算一小时约 1,330 张,$0.540 ÷ 1,330 ≈ $0.00041 一张——每张贵三分之一,但同样的活你少等一半时间,赶交付的时候这笔账很好算。权重要不要留盘上是另一笔:fp16 那份 16.5GB,存储按 $0.414/GB·月 的中位价是 16.5 × 0.414 ≈ $6.83 一个月;实例一停计算立刻停止计费,存储则一直算到你把它销毁为止,短期项目跑完直接销毁就是零。把 1,000 张 1024 PNG(约 1.5GB)拉回本地,出网按 $0.0081/GB 中位价算约 $0.012。全程按秒计费、按小时定价,没有起租时长、没有开通费、不用提配额工单。

04 —

常见问题

Kolors 本地部署最低需要多大显存?16GB 的卡能跑吗?

fp16 全量是约 17.9GB 权重,加上 1024 采样的激活,实际要一张 24GB 卡才舒服。想压到 16GB 以内,就把 ChatGLM3-6B 换成 4-bit 量化版(3.92GB),文本编码器一下省掉 8.5GB,整条链路落在 10GB 出头。不过在 NexGPU 上这笔账其实不用算:RTX 3090 24GB 才 $0.193/卡·时,比省显存折腾量化更划算,一张卡直接把 fp16 全量装下。

Kolors 和 SDXL 是什么关系?SDXL 的 LoRA、ControlNet 能直接用吗?

UNet 骨干和 SDXL 同构、约 2.6B,VAE 直接就是 SDXL 的 VAE,所以采样速度和显存直觉可以照搬。但文本编码器换成了 ChatGLM3-6B,条件维度和交叉注意力的输入完全不同,SDXL 的 LoRA、textual inversion、ControlNet 一个都不通用——ControlNet 要用 Kwai-Kolors 自己那三个约 1B 的 Canny/Depth/Pose,IP-Adapter 也必须用 Kolors 版。想同时保留两套生态做对比,在 NexGPU 上开两台按秒计费的实例并行跑就行,比在一台机器上来回换环境省时间。

为什么一加 IP-Adapter 就 OOM?

这不是你配置错了,diffusers 官方文档就直接写着 Kolors 用 IP-Adapter 需要 24GB 以上显存,消费级卡上建议开 enable_model_cpu_offload()。另一个高频报错是 image_encoder 加载失败,需要在 from_pretrained 里加 revision="refs/pr/4" 才能读到 safetensors 版本。要么忍受 offload 带来的速度损失,要么直接上 NexGPU 的 RTX 5090 32GB($0.723/卡·时),32GB 装得下适配器加图像编码器,全程不用 offload。

Kolors 可以商用吗?授权是怎么规定的?

代码是 Apache-2.0,权重走单独的 Kolors Model License。核心条款是:向 licensor 注册后,只要你所有产品与服务上个自然月的月活合计不超过 3 亿,注册即视为取得相应商业许可,超过就需要另行获得批准;分发时要向下游告知模型来源并附上协议副本,改过的文件要显著标注改动;另外明确禁止用 Kolors 的输出去训练 Kolors 及其衍生模型之外的其他大模型。合规部分你自己走流程,算力这边 NexGPU 覆盖 51 个国家和地区、1,175 个已验证可租节点,按你的数据落地要求挑区域就行。

Kolors 还在更新吗?开源权重停在哪一版?

开源基座停在 2024 年 7 月的 Kolors 1.0,官方仓库 News 最后一条是 2024 年 11 月 13 日的两个 Flux 联动演示,之后没有再放出新一代基座权重,更新的可图代际走的是快手 Kling AI 平台的 API,不发权重。Kwai-Kolors 组织后来公开的是 CoTyle(20B、Apache-2.0、2025 年 11 月 18 日,用数字风格码控制画风,开源版基座是 Qwen-Image)和 MetaView(单图新视角合成,MM-DiT 加 Depth Anything 3 几何先验,已中 ECCV 2026)。这不影响 Kolors 1.0 的价值——它至今仍是中文文字渲染最省钱的开源选择之一,而在 NexGPU 上把这三个模型全试一遍,一个下午的机时钱都不到。

Kolors 的中文提示词能写多长?为什么后半段好像没生效?

KolorsPipeline 的 encode_prompt 默认 max_sequence_length=256,比 SDXL 的 77 token 宽裕得多,但超出部分会被静默截断,不报错——你以为写了但模型没看见,这是「后半段没生效」最常见的原因。想验证不同长度提示词的边界,起一台 RTX 3090 24GB($0.193/卡·时)批量跑对照组,几美分就能把这条曲线摸清楚。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。