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 结果。

工作原理(高层)

  1. 模型下载 – hugot.DownloadModel 从 Hugging Face hub 获取 ONNX 模型。
  2. 会话创建 – NewGoSession、NewXLASession 或 NewORTSession 创建绑定到所选后端的运行时上下文。
  3. 流水线构建 – 将配置(例如 TextClassificationConfig)传递给 session.NewPipeline。
  4. 推理 – 调用 pipeline.RunPipeline(ctx, inputs);库处理分词、模型执行和输出解析。
  5. 训练 – 从会话创建 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
  • 项目