不用 Python,也能训练大模型:两年之后再看 Go 语言机器学习框架 GoMLX

不用 Python,也能训练大模型:两年之后再看 Go 语言机器学习框架 GoMLX

💡 原文中文,约12500字,阅读约需30分钟。
📝

内容提要

GoMLX是Go语言的机器学习框架,两年间从雏形发展为1.5k星标项目,核心计算引擎拆分为独立compute仓库。它提供Backend、Graph、Tensor、Store四大抽象,支持xla、纯Go和go-darwinml三种后端,可训练模型并对接HuggingFace和ONNX生态。虽生态不及Python,但适合Go服务集成,正迈向生产可用。

🔎

延伸解读

架构拆分:从单体到可插拔引擎

GoMLX 在 v0.28 版本将底层计算引擎拆分为独立的 compute 仓库,形成“高层 API + 可插拔后端”的清晰分层。这一设计借鉴了 PyTorch 的 ATen/Dispatcher 和 JAX 的 XLA 层思路,将“怎么算”与“算什么”解耦。对开发者而言,这意味着可以独立贡献新后端,而无需改动上层 API,降低了扩展门槛,也提升了项目的可持续演进能力。

多后端策略:性能与便携的平衡

GoMLX 提供三种后端:xla 基于 OpenXLA,支持 GPU/TPU,追求极致性能;go 后端纯 Go 实现,无 CGO 依赖,可编译为 WASM 在浏览器运行;go-darwinml 面向苹果生态。这种多后端设计让开发者能根据部署场景灵活选择,例如在服务端用 xla 训练,在浏览器端用 go 后端推理,兼顾了性能与可移植性。

生态对接:不重复造轮子

GoMLX 通过 go-huggingface 和 onnx-gomlx 等组件,直接对接 HuggingFace 和 ONNX 生态,支持加载预训练模型、分词器、safetensors/GGUF 格式,并能将 ONNX 模型转换后微调。这种策略避免了从零构建模型库,让 Go 开发者能复用 Python 生态的成果,降低了迁移成本,也体现了项目务实的发展方向。

工程特性:面向生产的设计

GoMLX 引入了梯度检查点(重计算省显存)、基于 XLA Shardy 的分布式训练(实验性)、以及 gomlx_checkpoints 工具用于可视化训练曲线。这些特性表明项目正从“能跑通 Demo”向生产可用迈进。但需注意,分布式训练仍不成熟,动态形状支持有限,JIT 编译与输入形状绑定,使用时应固定或分桶输入形状以避免重复编译开销。

Q&A

GoMLX是什么?它的设计目标是什么?

GoMLX是Go语言的机器学习框架,旨在复刻PyTorch、JAX和TensorFlow的能力,让用户无需Python即可训练、微调和部署模型。其设计哲学强调简单透明、组合性优先于魔法,以及文档即代码的一部分。

GoMLX的四大核心抽象是什么?它们各自的作用是什么?

GoMLX的四大核心抽象是Backend、Graph、Tensor和Store。Backend负责连接硬件并JIT编译计算图;Graph是用纯Go描述的计算图,用于定义计算;Tensor是数据的载体,管理主机和设备内存;Store用于管理可训练参数和超参数,通过Scope实现命名空间隔离。

GoMLX支持哪些后端?它们分别适用于什么场景?

GoMLX支持三种后端:xla后端基于OpenXLA/PJRT,支持GPU/TPU,适合追求极致性能的训练和推理;go后端是纯Go实现,无CGO依赖,可编译为WASM,适合嵌入式、浏览器等轻量部署;go-darwinml后端面向苹果生态,支持Metal加速,适合macOS/iOS本地推理。

GoMLX如何与HuggingFace和ONNX生态集成?

GoMLX通过go-huggingface库对接HuggingFace,支持原生Tokenizer、safetensors/GGUF解析,可下载和微调预训练模型;通过onnx-gomlx库将ONNX模型转换为GoMLX计算图,支持推理和微调,可作为onnxruntime的替代方案。

GoMLX在v0.28版本中进行了哪些架构重组?

v0.28版本将底层计算引擎(如backends、dtypes、shapes、distributed)拆分到独立的compute仓库,形成“高层API + 可插拔计算引擎”的解耦架构。compute仓库专注于计算图的定义和执行,GoMLX主仓库则提供高层API、自动微分、训练循环等。

GoMLX支持哪些前沿算法和工程特性?

GoMLX内建了KAN(Kolmogorov-Arnold网络)、VNN(Vector Neural Networks)、梯度检查点(重计算省显存)以及基于XLA Shardy的分布式多卡训练支持。此外,还支持DyT归一化等新研究。

GoMLX与Python生态相比有哪些优势和劣势?

优势:底层与XLA共用引擎,性能相当;纯Go后端可编译为WASM,可移植性强;无需Python环境,适合Go服务集成。劣势:生态体量远不及PyTorch/Jax,模型库和社区资源较少;API更冗长,但换来透明性。

GoMLX的长期目标是什么?

官方长期目标包括:让Go成为训练模型的一等公民;成为高效的研究和教学平台,支持分布式训练;成为可靠的生产平台,支持TPU/GPU、更多后端(如llama.cpp、WebNN)、从HuggingFace导入模型微调,以及将模型编译为C库或WASM供任意语言消费。

🏷️

标签

➡️

继续阅读