knights-analytics/hugot
Onnx transformer pipelines in Golang
它是什么
Hugot 是一个 Go 库,让你可以直接从 Go 代码运行 Hugging Face 风格的 transformer 流水线。它适用于导出为 ONNX 格式的模型,并支持广泛的任务——文本分类、问答、图像分割、音频转录、零样本分类等。该库提供三个可互换的后端:
- 纯 Go(无 C 依赖,适合小型模型)
- ONNX Runtime (ORT) – 最快的 CPU/GPU 后端
- OpenXLA – 支持 TPU 和其他 XLA 加速器。
谁可能使用它
- 希望在不调用单独 Python 服务器的情况下将 AI 推理嵌入服务的 Go 开发者。
- 在基于 Go 的生产栈中部署 Hugging Face 模型的 ML 工程师。
- 需要在本地、CPU、GPU 或 TPU 上运行推理,并偏好单一语言代码库的团队。
核心特性(如 README 中所述)
| 特性 | 详情 |
|---|---|
| 模型兼容性 | 任何可以导出为 ONNX(通过 Optimum)的 Hugging Face 模型都可以工作,预测结果与 Python 参考一致。 |
| 支持的流水线 | 超过 30 个流水线,涵盖文本、视觉、音频、多模态和经典 ML(例如 textClassification、imageSegmentation、automaticSpeechRecognition、zeroShotClassification、objectDetection 等)。某些流水线仅限 ORT。 |
| 后端选择 | 在编译时通过构建标签选择(-tags ORT、-tags XLA、-tags ALL)。Go 后端不需要 cgo;ORT 和 XLA 提供硬件加速。 |
| 硬件加速 | CPU(默认)、通过 CUDA 的 NVIDIA GPU(ORT 或 XLA)、TPU(仅 XLA),以及通过 ONNX Runtime 支持 TensorRT、DirectML、CoreML、OpenVINO。 |
| 训练/微调 | 使用 goMLX 加载 ONNX 模型、微调并写回 ONNX。目前可用于 FeatureExtraction 流水线(对语义搜索嵌入有用)。 |
| 生成式 AI | 通过 ONNX Runtime 的生成式 AI 引擎运行生成模型;支持并发请求和批处理,通过 WithGenerativeEngine。 |
| 安装 | go get github.com/knights-analytics/hugot;用于 ORT/XLA 的可选 C 库可以从发布版或 Docker 镜像中获取。 |
| 示例用法 | README 包含一个完整的 Go 程序,下载情感模型、创建文本分类流水线、在字符串批次上运行并打印 JSON 结果。 |
工作原理(高层)
- 模型下载 –
hugot.DownloadModel从 Hugging Face hub 获取 ONNX 模型。 - 会话创建 –
NewGoSession、NewXLASession或NewORTSession创建绑定到所选后端的运行时上下文。 - 流水线构建 – 将配置(例如
TextClassificationConfig)传递给session.NewPipeline。 - 推理 – 调用
pipeline.RunPipeline(ctx, inputs);库处理分词、模型执行和输出解析。 - 训练 – 从会话创建
Trainer,提供数据集(JSONL,包含sentence1、sentence2、score),并调用trainer.Train。微调后的模型可以保存并像任何其他流水线一样重用。
生态系统与许可
- 该项目是开源的(MIT 风格徽章链接表明宽松许可证)。
- 它基于 goMLX 用于纯 Go 和 XLA 后端,基于 ONNX Runtime 用于 ORT 后端。
- 提供了 Docker 镜像,用于快速测试,所有依赖项已预装。
何时选择 Hugot
- 你已经用 Go 编写服务,并希望避免 Python 到 Go 的 RPC 层。
- 你需要低延迟、设备端推理(例如边缘服务、微服务或实时 API)。
- 你的模型可以导出为 ONNX(大多数 Hugging Face 模型都可以)。
- 你希望在不离开 Go 生态系统的情况下获得可选的 GPU/TPU 加速。
以上所有信息直接取自仓库的 README;未添加任何外部假设。
相关
- 项目
- Dispatch
- Dispatch
- Dispatch
- 项目