ESC
开源 1 分钟阅读

kimodo.cpp:NVIDIA Kimodo 移植到 C++/GGML

该项目将 NVIDIA 的 Kimodo 文本生成动作模型移植到 C++/GGML,支持 CPU 和 Vulkan 推理,提供 C/C++ API、GGUF 加载、DDIM 采样及本地演示。目前仅实现无约束动作生成,部分功能尚未完成。

来源:GitHub

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"