用 Python 边车在 Go 中进行 ML

本文主要介绍了 Go 应用中使用机器学习模型的方法,包括使用互联网 LLM 服务、本地运行 LLM 以及使用 Python 和 JAX 或 TensorFlow 进行本地模型训练等内容:

  • 互联网 LLM 服务:这是最容易的类别,如 Google、OpenAI 等的多模态服务以 REST API 形式提供,并有方便的客户端库和第三方包。Go 在该领域与其他编程语言支持程度相当,因其网络原生性质在这类应用中很强大。可参考 Go 博客的相关文章,如Building LLM-powered applications in Go等。
  • 本地运行 LLM:有大量高质量的开源模型可供选择,如 Gemma、Llama、Mistral 等。行业已开始标准化一些模型格式,如 GGUF、safetensors 或 ONNX,并有优秀的开源工具如 Ollama 可让模型在本地运行并提供类似 OpenAI 或 Gemini 的 API。Ollama 可通过 Modelfile 自定义 LLM,在云环境中也有一些现成解决方案。此外还有 Llamafile 以不同方式分发模型。
  • 使用 Python 和 JAX 进行本地模型推理:如果现有开源 LLM 不能满足项目需求,可考虑自己训练 LLM,但训练成本高。此部分展示了如何在 Python 中使用 JAX 运行本地已训练模型,并将其作为 Go 应用的 sidecar 服务器。通过初始化 Gemma 模型,创建 Flask 服务器并暴露简单的 REST 接口,Go 应用可与该服务器通信。同时测试了 IPC 开销,发现其可忽略不计。
  • 使用 Python 和 TensorFlow 进行本地快速图像模型训练:此示例使用 TensorFlow + Keras 训练简单的图像模型(CNN)来分类 CIFAR - 10 数据集图像,通过创建 Unix 域套接字和简单的长度前缀编码协议进行通信,Go 客户端可发送图像并接收分类结果,测试中平均往返延迟约为 10μs,单个图像推理时间约为 3ms,相比之前的 HTTP + REST 方法延迟更低。
  • 代码:本文示例的完整代码在GitHub上。

需要注意的是,文中提到的一些模型并非完全开源,其训练细节仍为专有。同时,对于不同的项目需求和场景,可选择不同的方法和工具来使用机器学习模型。

阅读 8
0 条评论