kimodo.cpp
NVIDIA Kimodo 文本生成动作模型的 GGML/C++ 实现。
状态
Kimodo-SMPLX-RP-v1 接受 UTF-8 提示或预计算的 LLM2Vec 嵌入,并在 CPU 或 Vulkan 上生成无约束的 SMPL-X22 局部旋转和根平移。文本编码器默认使用八层 Vulkan 分块;设置 KIMODO_TEXT_LAYER_CHUNK=1..32 可调整 VRAM 使用量。
已包含:检查 GGUF 加载、safetensors 转换、DDIM 采样、C/C++ API、CPU/Vulkan 一致性测试,以及本地文本到动作演示。约束、SOMA、G1、GLB 导出和量化模型尚未实现。
构建与测试
GGML 是固定版本的 Git 子模块:
git submodule update --init --recursive
nix develop path:. --command cmake --preset debug
nix develop path:. --command cmake --build --preset debug
nix develop path:. --command ctest --preset debug
标准测试套件需要本地动作 GGUF、文本包和测试夹具。它不会自行下载权重。还提供了 release、asan-ubsan 和 fuzz 预设。
进行 sanitizer 工作:
nix develop path:. --command cmake --preset asan-ubsan
nix develop path:. --command cmake --build --preset asan-ubsan
nix develop path:. --command env \
LD_LIBRARY_PATH="$PWD/build/asan-ubsan/ggml/src:$PWD/build/asan-ubsan/ggml/src/ggml-vulkan:$LD_LIBRARY_PATH" \
ASAN_OPTIONS=detect_leaks=0:abort_on_error=1 UBSAN_OPTIONS=print_stacktrace=1 \
ctest --preset asan-ubsan --output-on-failure
由于 Vulkan 加载器/驱动程序分配对进程是全局的,因此禁用了泄漏检测。GGUF 解析器模糊测试需要 Clang。
API
include/kimodo/kimodo_capi.h 是 C API。模型加载会在推理前检查动作 GGUF 和文本包。使用 kimodo_generate_embedding 生成 4096 个 F32 值,或使用 kimodo_generate 处理文本。两者都返回 SMPL-X22 根平移和局部 XYZW 旋转。
演示
构建 debug 预设并转换文本包后:
go run ./demo -addr 0.0.0.0:8094
打开 http://localhost:8094。左侧边栏包含提示和持久历史记录;选择之前的动画会恢复其提示以生成新动画。
许可权重
SMPL-X 检查点和 Llama 基础模型受门控。接受其 Hugging Face 许可并进行身份验证后,使用以下命令下载精确修订版和哈希清单:
nix develop path:. --command hf auth login
nix develop path:. --command scripts/download_weights.sh \
--output "$PWD/models" --with-text
使用以下命令将本地 LLM2Vec 模型转换为原生组件包:
nix develop path:. --command scripts/convert_llm2vec_bundle.sh \
"$PWD/models/llama3-8b-instruct-base" "$PWD/generated/llm2vec-text-bundle"