这个项目能做什么
goinfer 是一个纯 Go、无 cgo 的库和一组二进制文件,用于在本地运行开放权重 LLM。它面向单用户推理:一个进程、一台机器,通过复制文件即可部署。它不是服务引擎(无连续批处理或分页注意力),也不是提供商编排层。
关键能力:
- **库使用**:通过 `go get` 获取解码器和分词器包,导入后使用 `decoder.Model.Generate` 生成文本。40 行示例见 `examples/embed/main.go`。
- **保证输出类型**:从 Go 结构体派生 JSON Schema,通过增量字节级语法上的 logit 掩码约束生成,并用 `json.Unmarshal` 解析结果。无效 token 不可达,不重试。适用于任何 JSON Schema 和命令行。工具调用在 Qwen、Nemotron-3-Nano、Mellum2 和 Granite 4.2 系列上获得相同处理。
- **置信度捕获**:`.CaptureConfidence(...)` 报告模型在枚举、布尔和整数字段的决策位置对允许值的概率。适用于路由,但未校准。
- **二进制文件**:`goinfer-serve`(OpenAI + Anthropic API、Web UI、内置 GPU)、`goinfer-chat`(单次运行),以及模型包含变体(0.5B 和 1.5B),启动约 0.4 秒,堆内存低于 100 MB。
- **模型获取**:通过 `pull` 直接从 HuggingFace 拉取 GGUF;中断传输可恢复;仅限匿名访问。
- **后端**:CPU、CUDA、Metal 和 WebGPU,全部无 cgo。GPU 后端有单独入口(`-tags metal`、`-tags cuda`)。
- **量化**:f32、int8、int8int8、int4(W4A8)和 int4mix;读取 15 种 GGUF 类型,以五种精度计算。默认 `--quant int4`。
- **大型模型**:`-stream-weights` 仅保留路由专家(用于 MoE);`-moe-cache-experts` 按需将专家从主机流式传输到 VRAM。
- **小型设备**:使用 `CGO_ENABLED=0` 交叉编译到 64 位 ARM Linux(如 Raspberry Pi);512 MB 板为低端。
- **模型系列**:39 个系列,包括 Gemma 1/2/3/4、Qwen 2.5/3、Llama、Mistral、Mixtral、Phi-3、DeepSeek/MLA、GLM、Kimi、Granite、Nemotron、Mellum。每个都在 HuggingFace logit 奇偶校验门后。
- **序列混合**:softmax·GQA、门控线性(DeltaNet)、状态空间(Mamba-2)、潜在 KV(MLA),以及密集和稀疏 MoE。
- **加载器**:GGUF、safetensors、GPTQ、AWQ 和预量化 `.giw` 包。
- **服务**:OpenAI 兼容和 Anthropic Messages 端点,多模型、视觉、嵌入。`POST /v1/systemone` 响应 TypeSafe 的决策线格式。
- **性能**:与 Ollama 的基准测试显示更快的冷启动(M1 Pro 上 25 秒 vs 33 秒)、CUDA 上更快的贪心解码(1.05–1.47×)和 Metal 上(1.5B/7B 上 1.03–1.19×),但 Metal 上长提示预填充和 Mac 上 CPU 解码比 llama.cpp 慢。所有数据均记录机器、检查点、量化和日期。
状态:Pre-1.0。前向传播和量化契约是奇偶校验门控且稳定的;加载器和架构描述符表面仍在变动。MIT 许可。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。