小显存也能跑 Kimodo:CPU 文本编码等低显存(<3GB)部署优化指南
【免费下载链接】kimodoOfficial implementation of Kimodo, a kinematic motion diffusion model for high-quality human(oid) motion generation.项目地址: https://gitcode.com/gh_mirrors/ki/kimodo
Kimodo 是 NVIDIA 开源的运动学扩散模型(kinematic motion diffusion model),只需一句文本提示就能生成高质量 3D 人体与机器人动作。官方默认配置需要约 17GB 显存,但只需设置一个环境变量TEXT_ENCODER_DEVICE=cpu,即可把显存占用压到 3GB 以下。本文详解 3 套低显存部署方案,让你的 4GB/8GB 小显存显卡(甚至核显主机)也能跑起 Kimodo 动作生成。
为什么 Kimodo 默认要 17GB 显存?先搞清楚瓶颈在哪
Kimodo 的推理由两部分组成:
| 组件 | 作用 | 显存占用 |
|---|---|---|
| 文本编码器(LLM2Vec) | 把文本提示变成嵌入向量 | 约 16GB(大头) |
| 动作扩散模型 | 去噪生成关节运动序列 | 很小 |
关键在于:文本编码器基于一个8B 参数的大语言模型(Meta-Llama-3-8B-Instruct 架构的 LLM2Vec),以 bfloat16 精度加载时权重就占了约 16GB 显存。也就是说,17GB 的需求几乎全部来自文本编码这一步——而这一步并不依赖 GPU。
因此低显存部署的思路非常直接:把文本编码器从显存里搬走,只把轻量的扩散模型留在 GPU 上。官方文档明确给出了结论:
设置
TEXT_ENCODER_DEVICE=cpu后,"This is slightly slower but reduces VRAM usage to<3 GB"(略慢,但显存降到 3GB 以下)。
相关依据可参考 CHANGELOG.md 中 2026-04-24 的更新记录("better support for small VRAM GPUs viaTEXT_ENCODER_DEVICE=cpu")以及 docs/source/getting_started/quick_start.md。
方案一:一行环境变量,把文本编码放到 CPU(最推荐)💡
这是官方推荐的低显存用法,零代码改动,对 CLI 和交互 Demo 都生效:
命令行生成(CLI):
TEXT_ENCODER_DEVICE=cpu kimodo_gen "A person walks forward." \ --model Kimodo-SOMA-RP-v1 \ --duration 5.0 \ --output output启动交互式 Demo:
TEXT_ENCODER_DEVICE=cpu kimodo_demo打开浏览器访问http://127.0.0.1:7860即可在时间轴上编辑文本提示与约束,实时预览生成结果。
效果与代价:
- 显存占用从 ~17GB 降到<3GB,4GB 级小卡直接可用;
- 速度损失较小(官方描述为 "a fairly small speed hit"),因为文本编码只占推理的一小部分;
- 注意编码器权重仍需下载约 16GB 磁盘空间,CPU 推理时也需要相应的系统内存(建议 16GB+ RAM)。
该变量的读取逻辑位于 kimodo/model/llm2vec/llm2vec_wrapper.py:未设置时默认auto(有 GPU 就用 GPU),设为cpu后强制编码器驻留 CPU,编码完成的嵌入向量再送进扩散模型所在设备,见 kimodo/model/kimodo_model.py。
方案二:独立部署文本编码服务,显卡分工协作 🖥️
如果你经常批量生成动作(比如跑 benchmark、离线生成数据集),更省的做法是只加载一次大型编码器,让多个生成请求共享它——这就是官方的文本编码服务。
第一步:启动文本编码服务(可放在任意机器上)
kimodo_textencoder它是一个 Gradio 服务,默认监听http://127.0.0.1:9550/,首次启动会自动下载嵌入模型。Docker 环境下可用docker compose up text-encoder启动。
第二步:让生成端连接它。模型加载逻辑(见 kimodo/model/load_model.py)支持以下环境变量:
| 变量 | 默认值 | 作用 |
|---|---|---|
TEXT_ENCODER_MODE | auto | auto:先探测 API 服务,不可达自动回退本地编码器;api:强制走远程;local:强制本地加载 |
TEXT_ENCODER_URL | http://127.0.0.1:9550/ | 远程文本编码服务地址 |
auto是默认模式,所以只要服务在跑,生成命令无需任何额外配置。此时GPU 上只剩扩散模型,显存 <3GB;即使服务没启动,auto模式也会自动回退到本地编码(配合方案一的TEXT_ENCODER_DEVICE=cpu依然低显存)。
进阶玩法:编码与生成分机。把服务部署在一台有大显存/大内存的机器上,生成端只需把地址指过去:
TEXT_ENCODER_URL=http://192.168.1.100:9550/ kimodo_gen "A person waves." --duration 5.0 --output wave服务端的实现位于 kimodo/scripts/run_text_encoder_server.py,客户端为 kimodo/model/text_encoder_api.py。若服务机本身显存也紧张,记得给它加上TEXT_ENCODER_DEVICE=cpu kimodo_textencoder。
方案三:配套小优化,让低显存部署更快更稳 ⚡
- 本地缓存模型权重,省时间省带宽:设置
CHECKPOINT_DIR指向已下载的本地检查点目录;配合LOCAL_CACHE=true可只读本地缓存、跳过在线检查(实现见 kimodo/model/load_model.py)。编码器模型目录也可用TEXT_ENCODERS_DIR指定本地路径。 - 保持 bfloat16,别开 fp32:文本编码器默认 bfloat16 加载;服务端的
--fp32参数会让权重体积翻倍,小显存/小内存机器请避开。 - 减少去噪步数提速:
--diffusion_steps调到 50~100 可明显加快生成,质量损失很小(详见 docs/source/user_guide/configuration.md);批量对比时把--num_samples设为 1。 - 装完源码版后按需运行:若需源码安装/二次开发,克隆仓库
git clone https://gitcode.com/gh_mirrors/ki/kimodo后按文档配置虚拟环境即可,部署参数与上表完全一致。
三种低显存部署方案对比
| 部署方案 | 生成端显存 | 速度 | 适用场景 |
|---|---|---|---|
| 全 GPU 运行(默认) | ~17GB | 最快 | RTX 3090/4090/A100 等大卡 |
方案一:TEXT_ENCODER_DEVICE=cpu | <3GB | 略降 | 偶尔生成、小卡单机,最省事 |
| 方案二:独立文本编码服务 | <3GB | 接近全 GPU | 批量生成、多请求复用、多机分工 |
结语:小显存跑 Kimodo 的完整清单
- 单机小卡:
TEXT_ENCODER_DEVICE=cpu+kimodo_gen/kimodo_demo,一条命令解决; - 高频使用:加一个
kimodo_textencoder服务,编码器只加载一次,auto模式自动接管; - 进阶调优:
CHECKPOINT_DIR+LOCAL_CACHE=true走本地权重,--diffusion_steps调低提速。
掌握以上 3 套方案后,一张 4GB 的入门显卡就能体验完整的文本生成 3D 动作流程,生成结果还可以导出 NPZ/CSV/BVH 格式,直接接入 MuJoCo 仿真与下游机器人管线(如 G1 机器人动作)。
【免费下载链接】kimodoOfficial implementation of Kimodo, a kinematic motion diffusion model for high-quality human(oid) motion generation.项目地址: https://gitcode.com/gh_mirrors/ki/kimodo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考