资讯动态

如何为 Colibrì 的 Inkling 启用音频输入(DMel 帧与 WAV API)?

发布时间:2026/9/14 17:48:27 来源:尧图企业网站定制
如何为 Colibrì 的 Inkling 启用音频输入DMel 帧与 WAV API【免费下载链接】colibriRun frontier MoE models on hardware you already own — pure C, zero deps, experts streamed from disk. Tiny engine, immense model. 项目地址: https://gitcode.com/GitHub_Trending/colibri3/colibri如果你的 Inkling 快照已经在 colibri 上跑通了文本推理下一步往往是让它接受语音输入。Inkling 的音频走的是离散化对数 mel 帧DMel每 50 ms 音频切成 1 帧、80 个 mel band每帧量化到 16 个等级音频塔只是一张 embedding 表加一个 RMSNorm引擎在|audio|占位符位置换成该帧的嵌入。前提是快照里带有这两个音频张量——有它们引擎就是全精度的语音输入引擎没有则维持原来的纯文本行为。本文覆盖三件事给快照装上音频张量自行转换或给现有容器补 sidecar 两条路径、两种输入方式的真实命令CLI 传 DMel 帧、gateway 直接传 WAV以及文档给出的 token 级验证方法。参考文档docs/inkling.md 的 Audio input (DMel) 一节、docs/api.md以及 c/tools/convert_inkling_int4.py 与 c/tools/make_tiny_inkling_audio.py。准备条件可运行的引擎与快照音频功能依附于 Inkling 快照先按 docs/inkling.md 的 Quickstart 具备make -C c inkling # 纯 CPU无依赖构建 make -C c inkling CUDA1 # 可选bf16 常驻层放显存需要约 37 GB 空闲显存硬件基线975B 完整快照约 120 GB 内存CPU 构建下 bf16 常驻层占约 86 GBNVMe 存放快照。若内存不足文档给出了把 dense 权重量化为 int4-gs64 的收缩路径convert_inkling_dense_int4.py25 GB 主机即可运行——音频路径本身不改变这些要求。给快照装音频张量需要引擎可见的两个张量model.audio.encoder.weightembedding 表和model.audio.final_norm.weight塔 norm。文档给出两条获取路径。路径 A自行转换时保留音频推荐一步到位。用--keep-audio跑转换器它会原样通过model.audio.*张量Inkling-Small 上约 10 MB bf16python3 c/tools/convert_inkling_int4.py --indir bf16-checkpoint \ --outdir ~/Models/inkling_i4 --keep-audiobf16-checkpoint换成你本地 bf16 原始 checkpoint 目录。参数含义见 c/tools/convert_inkling_int4.py 的帮助文本keep model.audio.(DMel embedding table norm, ~10 MB) so the engine can take audio input*。路径 B已有纯文本容器补一个 sidecar。两个张量可以用 HTTP range 请求从原始 checkpoint 的分片里单独取出来约 10 MB不用重下整个 bf16 checkpoint写成audio.safetensors放到快照目录里即可。引擎会索引目录中每个*.safetensors所以 sidecar 会被自动拾取。docs/inkling.md 给出的取数脚本文档示例REPO指向文档所用的 Inkling-Small 仓库换成你自己的 checkpoint 仓库地址输出audio.safetensors需放入快照目录import json, struct, urllib.request REPO https://huggingface.co/thinkingmachines/Inkling-Small/resolve/main NAMES [model.audio.encoder.weight, model.audio.final_norm.weight] def rng(url, a, b): req urllib.request.Request(url, headers{Range: fbytes{a}-{b}}) return urllib.request.urlopen(req).read() index json.loads(urllib.request.urlopen(f{REPO}/model.safetensors.index.json).read()) header, blobs, off {}, [], 0 for name in NAMES: url f{REPO}/{index[weight_map][name]} n struct.unpack(Q, rng(url, 0, 7))[0] info json.loads(rng(url, 8, 7 n))[name] a, b info[data_offsets] raw rng(url, 8 n a, 8 n b - 1) header[name] {dtype: info[dtype], shape: info[shape], data_offsets: [off, off len(raw)]} blobs.append(raw) off len(raw) hdr json.dumps(header).encode() with open(audio.safetensors, wb) as f: f.write(struct.pack(Q, len(hdr)) hdr b.join(blobs))如何判断装上了启动引擎时如果目录里存在这两个张量引擎会加载它们并打印[audio] DMel encoder loaded (… bins x … levels - D…)一行见 c/inkling.c 的加载逻辑没有则静默走纯文本路径。运行中如果音频帧数与 prompt 中|audio|占位数量对不上引擎会报错指出两者数量并提示快照是否缺少音频张量。输入路径一CLI 传预编码 DMel 帧DMel 文件的格式是 raw u8 字节[n_frames, 80]行主序——即 c/openai_server.py 中 gateway DSP 或 tinkernel-audio 产出的那种帧不是 WAV。每帧对应一个|audio|位置--audio隐含--chatSNAP~/Models/inkling_i4 ./c/inkling --audio speech.dmel -p 用一句话总结这段语音说了什么speech.dmel换成你的 DMel 帧文件路径。注意约束帧数必须恰好等于 prompt 里|audio|占位的数量否则引擎报错并终止本次生成见 docs/inkling.md Modes 表中--audio一行。输入路径二gateway 直接发 WAV省去自行编码通过coli serve暴露的 OpenAI 兼容接口可以把 WAV 文件直接作为input_audio内容块发出gateway 自己计算 DMel 帧——这条路径额外需要 gateway 侧安装 numpy文档明确仅此路径需要。WAV 要求16 kHz、PCM16 或 float32、单声道采样率不是 16 kHz 时 gateway 会明确报 400 并提示在采集端重采样。docs/api.md 同时说明音频只被带音频支持的 Inkling checkpoint 接受其他引擎返回显式错误。启动服务COLI_MODEL指向你的 Inkling 快照cd c COLI_MODEL~/Models/inkling_i4 ./coli serve --host 127.0.0.1 --port 8000 \ --model-id inkling-colibri然后发请求base64 wav替换为你自己的 WAV 文件内容做 base64 编码后的字符串curl localhost:8000/v1/chat/completions -d { model: inkling-colibri, messages: [{role: user, content: [ {type: input_audio, input_audio: {data: base64 wav, format: wav}} ]}] }gateway 侧的音频 DSPSlaney mel、周期 Hann 窗、对 RMS 0.01 的轻声音量提升实现在 c/openai_server.py 的 Inkling DMel audio input 一节与文档描述的 tml-renderers 0.1.0 行为对齐。预期开销文档明确音频会膨胀 prompt——约 5 秒语音约 100 个位置语音轮的 prefill 成本要按这个量级估算。验证token 级 oracle文档给出的可核对验证方式是 tiny 随机权重 fixture 的 token 精确比对。c/tools/make_tiny_inkling_audio.py 用InklingForConditionalGeneration含音频塔生成一个小模型和ref_inkling.json其中dmel字段是展平的[n_frames, n_mel_bins]等级序列并记录 HF transformers 的tf_pred与贪心续写判定标准是 C 引擎逐 token 复现这两者f32 精确专家用bits0运行。fixture 依赖带 Inkling 支持的 transformers工具会提示pip install -U transformerspython3 c/tools/make_tiny_inkling_audio.py tiny_inkling_audio # 按 Modes 表的位置参数形式跑引擎的 oracle 模式[cap] [bits] [ref.json] ./c/inkling 0 0 tiny_inkling_audio/ref_inkling.json第一个位置参数是每层专家缓存上限0表示按空闲内存自动定容第二个是专家位宽0 f32 直通。输出应显示audio oracle: N DMel frames x M bins且引擎续写与 ref 完全一致即为通过——这同时验证了占位符替换、按帧查表、audio RMSNorm 与 masked_scatter 拼接整条路径。限制引擎不加载视觉编码器与 MTP head所以同一快照里只有音频这一条多模态路径可用docs/inkling.md。gateway 的 WAV 解码要求 16 kHz 且 PCM16/float32不满足时返回 400重采样需要你在采集端完成。Inkling 引擎不支持 tool calling带tools声明的请求会收到 HTTP 400docs/api.md 的支持矩阵音频请求同理只走纯 chat 内容。音频轮 prefill 开销约按每 5 秒语音 100 位置计。【免费下载链接】colibriRun frontier MoE models on hardware you already own — pure C, zero deps, experts streamed from disk. Tiny engine, immense model. 项目地址: https://gitcode.com/GitHub_Trending/colibri3/colibri创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价