CogVLM 出自清华 KEG 与智谱,代码仓库和权重现在都挂在 zai-org 名下,Hugging Face 上原来的 THUDM/* 路径会自动跳到 zai-org/*,两种写法都能拉到权重。它和大多数 VLM 的区别在架构:不是把视觉特征拼进文本序列了事,而是在每个 Transformer 层里额外挂一套「视觉专家」权重。初代 CogVLM-17B 是 10B 视觉参数加 7B 语言参数(底座 Vicuna-7B-v1.5),CogVLM2 换成 Meta-Llama-3-8B-Instruct 底座,做成 19B。
这套架构的代价直接写在显存上。官方 basic_demo 的表格很明确:19B 系列 BF16 推理 42GB,Int4 推理 16GB,两者都是在 2K 对话长度下实测的。cli_demo.py 里甚至硬编码了一道检查——发现显存不足 48GB 而你又没开量化,它就会提示你改用多卡脚本或者加量化参数。再叠上 1344×1344 的输入分辨率带来的大量视觉 token,预填充阶段的峰值只会更难看。所以「CogVLM 需要多大显存」这个问题没有一个数字,只有一张表。
还有一件必须说清楚的事:CogVLM2 停在 2024 年 5 月,这条线的后继在 zai-org/GLM-V 仓库里——GLM-4.1V-9B-Thinking(2025-07-01,64K 上下文)、GLM-4.5V(2025-08-11)、以及 GLM-4.6V 与 GLM-4.6V-Flash(2026-04-02,128K 上下文,Flash 走 MIT 许可)。全新项目应该从 GLM-4.6V-Flash 起步,而不是从 CogVLM2 起步。但 cogvlm2-llama3-chat-19B 月下载量仍在七千次以上,grounding-generalist 那种专做框选的老权重也还有人留着,已上线的 pipeline 更不会为了换代重跑一遍评测——这页就是写给还要真刀真枪把它跑起来的人。
01 —
CogVLM 家族现有版本与显存对照
数字取自官方 basic_demo 表格与模型卡;官方没公布的地方我们直接留白,不替你猜。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| cogvlm2-llama3-chinese-chat-19B | 19B(Llama-3-8B-Instruct 底座 + 视觉专家) | BF16 约 42GB / Int4 约 16GB | 8K 文本 | 中英双语图像理解与多轮对话,输入分辨率最高 1344×1344,中文私有化场景默认就选它。 |
| cogvlm2-llama3-chat-19B(含官方 -int4 权重) | 19B | BF16 约 42GB / Int4 约 16GB | 8K 文本 | 纯英文版。官方单独发了 -int4 仓库,用 bitsandbytes 4-bit,模型卡写明只能在 Linux + NVIDIA 上跑。 |
| cogvlm2-video-llama3-chat / -base | 19B | 与 19B 系列同级,BF16 约 42GB | 2K 文本 | 视频理解版,固定抽 24 帧、每帧 224×224,且只支持单轮对话。别拿它当图像模型用,分辨率差了一个数量级。 |
| cogagent-9b-20241220 | 9B(GLM-4V-9B 底座) | BF16 约 29GB / INT8 约 15GB / INT4 约 8GB | demo 默认 max_length 4096 | GUI Agent 执行模型而非聊天模型:看截图输出点击、输入、滚动等动作,支持 Windows / macOS / Android,分辨率 1120×1120。官方明确提醒 INT4 掉点明显、不建议用。 |
| cogvlm-chat-hf(初代 CogVLM-17B) | 17B(10B 视觉 + 7B 语言,Vicuna-7B-v1.5) | FP16 约 40GB / INT4 约 11GB | 约 4K(随 Vicuna-7B-v1.5 底座) | 490×490 分辨率,另有 base-224、base-490、grounding-generalist 三个兄弟。同期的 CogAgent-18B 是 11B 视觉 + 7B 语言、1120×1120,INT4 约 12.6GB。 |
| GLM-4.6V / GLM-4.6V-Flash(后继线,zai-org/GLM-V) | 106B / 9B | 官方未公布显存表;106B 另发 FP8 权重 | 128K | 2026-04-02 发布,vLLM 与 SGLang 都能直接 serve。Flash 为 MIT 许可,新项目从这里开始,别再从 CogVLM2 开始。 |
02 —
按变体选卡:NexGPU 上的四种打法
显存对得上才有意义。42GB 的 BF16 不会因为你想省钱就塞进 24GB。
Int4 跑 CogVLM2-19B(16GB),或初代 CogVLM-17B INT4(11GB)、CogAgent-18B INT4(12.6GB)
RTX 3090 24GB$0.193/卡·时
官方 INT4 指标本来就是按 1 张 RTX 3090(24G) 标定的,24GB 还能给 1344×1344 带来的视觉 token 留出预填充余量。
BF16 全精度单卡跑 cogvlm2-llama3-chinese-chat-19B(42GB)
RTX A6000 48GB$0.817/卡·时
cli_demo.py 里写死了 48GB 这道门槛:低于它又不量化就会被劝去改多卡。48GB 正好是脚本不啰嗦、你也不用碰 device_map 的那一档。
cogagent-9b-20241220 做 GUI Agent(BF16 29GB)
RTX 5090 32GB$0.723/卡·时
29GB 进 32GB 刚刚好,不用掉到官方不推荐的 INT4。而且这是整条线里唯一能被 vLLM 以 GLM4VForCausalLM 架构直接 serve 的成员,吞吐不再卡在 HF generate 上。
解冻视觉专家做 BF16 LoRA 微调(官方 73GB/卡,8 卡 DeepSpeed ZeRO-2)
A100 SXM4 80GB × 8$1.088/卡·时(8 卡合计 $8.704/时)
官方就是在 8×A100 80G + ZeRO-2 上跑通的,照抄配置最省事。NexGPU 单节点最多 14 卡,8 卡开在同一台机器里,省掉跨机 NCCL 的调试时间。
03 —
在 NexGPU 上把 CogVLM2 跑起来
四步,从一台空实例到 OpenAI 兼容接口。踩不踩坑的分界线在第二步。
- 01
开一台显存对得上的实例
在 console.nexgpu.net 选卡:Int4 走 RTX 3090 24GB,BF16 全精度走 RTX A6000 48GB,GUI Agent 走 RTX 5090 32GB。镜像直接挑 PyTorch 预置镜像(平台有 2000+ 预置镜像,vLLM、ComfyUI、Jupyter 都在列),SSH、Jupyter、Web 终端、REST API、CLI 五种入口默认都开着。按秒计费、按小时定价,没有最低消费、没有开通费、不用提工单申请配额。
- 02
先钉住 transformers 版本,这是最大的坑
CogVLM2 靠 trust_remote_code=True 加载仓库自带的建模文件,而 basic_demo/requirements.txt 只写了 transformers>=4.40,没有上限。装到新版本会直接抛 AttributeError: 'CogVLMForCausalLM' object has no attribute '_extract_past_from_model_output'——仓库 issue 里有人在 transformers 4.52.4 上复现。新版 GenerationMixin 已经把这个内部方法删了,而远端建模代码还在调它。把版本压回 4.45 之前,再谈别的。
pip install "transformers<4.45" "bitsandbytes>=0.43.1" accelerate xformers torchvision timm einops sse-starlette - 03
拉权重,按显存选量化档
cli_demo.py 的 --quant 只接受 4 或 8,默认 0 表示不量化。24GB 单卡就用 --quant 4。要多卡的话走 cli_demo_multi_gpus.py,它用 infer_auto_device_map 并设了 no_split_module_classes=["CogVLMDecoderLayer"],官方在 3 张 16GB 卡上实测每卡占 13–14.5GB;但注意脚本对 2 卡及以下写死了每卡 16GiB 上限,你要跑 BF16 得自己把 max_memory 调高,否则会被切得装不下。另外初代 CogVLM 的 tokenizer 不在模型仓库里,要从 lmsys/vicuna-7b-v1.5 单独加载 LlamaTokenizer。
huggingface-cli download zai-org/cogvlm2-llama3-chinese-chat-19B --local-dir ./cogvlm2-zh && python basic_demo/cli_demo.py --quant 4 - 04
对外暴露接口,并想清楚要不要 vLLM
basic_demo/openai_api_demo.py 会起一个 OpenAI 格式的服务,前端和现有网关可以直接对接;web_demo.py 走 chainlit 出一个交互页面。但别去找 vLLM 上的 CogVLM——CogVLM 和 CogVLM2 的架构从来没进过 vLLM 支持列表,能被 vLLM serve 的只有 cogagent-9b-20241220(GLM4VForCausalLM)以及 GLM-4.1V、GLM-4.5V、GLM-4.6V 那条线。要连续批处理和 PagedAttention,就得换模型,不是换参数。
python basic_demo/openai_api_demo.py # 需要吞吐时改用:vllm serve zai-org/cogagent-9b-20241220 --trust-remote-code
一笔真实的账:给两万张图做中文标注
用 cogvlm2-llama3-chinese-chat-19B 的 BF16 权重批量打标,选 RTX A6000 48GB,$0.817/卡·时。开机、下载 19B 的 BF16 权重(约 38GB safetensors)、装依赖,按 25 分钟算:0.42 × $0.817 ≈ $0.34。跑 6 小时批处理:6 × $0.817 = $4.90。导出 2GB 结果,出网按中位价 $0.0081/GB 计 ≈ $0.02。合计约 $5.26。换成 Int4 档呢?RTX 3090 24GB 是 $0.193/卡·时,同样 6 小时是 6 × $0.193 = $1.16,不到前者的四分之一——代价是量化掉点,做粗筛可以,出终稿别用。另有一个容易算错的对比:官方多卡脚本在 3 张 16GB 卡上实测每卡只占 13–14.5GB,看着很省,可 3 张 Tesla T4 16GB 是 3 × $0.298 = $0.894/时,比单张 A6000 的 $0.817/时 还贵,还要多调一套 device_map。在这个模型上,多卡不是省钱手段,是没办法时的办法。最后记得:计费按秒计、按小时定价,实例一停算力费就停;只有存储会一直算到卷被销毁为止(中位价 $0.414/GB·月,权重加缓存约 60GB 就是 $24.84/月),跑完顺手把不用的卷删掉。
04 —
