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×1024 | 2024.07.06 的基座权重,中英双语,中文文字渲染是它最出名的一项。官方推理默认 EulerDiscreteScheduler、CFG 5.0、50 步。 |
| Kolors-diffusers | 同一套权重,diffusers 打包 | 只拉 fp16 variant 约 16.5GB | KolorsPipeline / KolorsImg2ImgPipeline | diffusers ≥ 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.5GB | 256 token 上限不变 | 降显存唯一有效的杠杆。换成 4-bit 后,1024 单图采样的显存占用就跟跑 SDXL 差不多,16GB 卡也能进场。 |
| Kolors-ControlNet-Canny / Depth / Pose | 每个约 1B | fp16 每挂一个约 +2GB | 1024×1024 | 2024.07.26 与 08.06 分批放出。Depth 还要额外下 dpt_hybrid-midas 权重,Pose 要 DWPose 的 ONNX 模型,这两个不在主仓库里,第一次跑经常卡在这。 |
| Kolors-Inpainting | 约 3B | fp16 替换基座 UNet,约 +6GB | 1024×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 预装镜像开机到出第一张带中文字的图
- 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 - 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 - 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')" - 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 —
