FlagGems
Triton语言实现的大模型算子库,180+ PyTorch兼容算子支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Triton语言实现的大模型算子库,180+ PyTorch兼容算子支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个这样的场景:你在某款国产 AI 加速卡上训练了一个 Llama 模型,训练效果不错。但当你想要把模型迁移到 NVIDIA GPU 上做推理时,却发现 PyTorch 的底层算子实现完全不同,需要重新适配数十个 kernel——这不是小工程,很可能需要几周时间。
这就是 AI 硬件生态的真实困境:每一种芯片都有自己的软件栈,每个软件栈都需要独立维护一套算子实现。NVIDIA 有 CUDA,AMD 有 ROCm,华为有 CANN,寒武纪有 CNRT……算子优化的工作在每一种硬件上都要重做一遍,而且极度依赖专家级 CUDA 编程能力。
FlagGems 想要解决的就是这个问题。它由 FlagOS 团队 开发,是一个基于 Triton 语言 的高性能大模型算子库。Triton 是 OpenAI 出品的 DSL(领域特定语言),让开发者可以用 Python-like 语法写出接近 CUDA 性能的内核代码。更关键的是,Triton 的抽象层让同一套内核代码可以编译到多种后端——这为"一次编写、多端运行"提供了技术基础。
2026 年,FlagGems 正式加入 PyTorch 生态,成为 PyTorch 官方认可的生态项目,获得了更多主流关注。
FlagGems 的核心设计思想是 out-of-tree PyTorch 扩展。它不修改 PyTorch 本身,而是通过 PyTorch 的 dispatch 机制(ATen 后端),在算子被调用时拦截请求,替换为 Triton 实现的内核代码。
FlagGems 采用双层架构设计。最上层是用户编写的 PyTorch 代码,调用标准的 torch.nn.functional 接口;中间层是 FlagGems 的 Triton Kernel,通过 PyTorch ATen 调度机制拦截算子调用;最下层是具体硬件后端,包括 NVIDIA GPU(CUDA)、AMD GPU(ROCm)以及多种国产 AI 加速卡。这种设计的核心优势在于:用户代码零改动。开发者继续使用熟悉的 PyTorch 接口,而底层算子已被悄然替换为 FlagGems 的高性能 Triton 实现。
FlagGems 库内已实现超过 180 个 PyTorch 算子,涵盖以下类别:基础数学运算(add、mul、div、addmm、bmm)、激活函数(silu、gelu、sigmoid、tanh)、归一化(layer_norm、rms_norm、group_norm)、注意力相关(scaled_dot_product_attention、softmax)、嵌入与查表(embedding、gather)、量化操作(act_quant)等。
值得注意的是,FlagGems 支持 自动点wise 算子代码生成(Automatic pointwise operator codegen),能够根据输入类型和张量布局自动生成对应的 kernel,无需逐一手写。
FlagGems 的 container 目录下提供了 12 种硬件后端 的配置脚本:NVIDIA CUDA 12.8/13.3、AMD ROCm、华为 Ascend 8.5.0/9.0.0、寒武纪 Cambricon、海光 Hygon、邃思 Tsingmicro、沐曦 Mthreads、昆仑芯 Kunlunxin 等主流 AI 加速卡。这意味着 FlagGems 的目标用户不仅是 NVIDIA GPU 用户,还包括使用国产 AI 芯片进行 LLM 训练和推理的开发者。
根据 PyTorch 官方博客的描述,在已优化的 180+ 算子中,相当一部分 FlagGems 实现的加速比接近 1.0(即与原生 PyTorch 性能持平),部分选择性优化的算子可以取得显著性能提升。
FlagGems 采用了 eager-mode ready 设计,无需依赖 torch.compile(),可以直接在动态图模式下工作,这让它对现有 PyTorch 训练流程的侵入性降到最低。性能优化的另一个关键策略是 选择性手动优化——对于 attention、matmul、softmax 等热点算子进行精细的手工 Triton 调优,而非热点算子则依赖自动代码生成,降低维护成本。
FlagGems 通过 pyproject.toml + scikit-build-core + CMake 构建系统进行安装,底层调用 Triton 编译器和 C++ 工具链。硬件门槛方面,必须有支持 Triton 后端的加速卡,NVIDIA GPU 需要 CUDA 12+,AMD GPU 需要 ROCm,显存推荐 8GB+。从源码编译整套环境,对于没有 GPU 驱动经验的开发者来说门槛较高,不适合"一键体验"。
使用方式非常简洁:pip install flag_gems 后,执行 flag_gems.enable() 注册 FlagGems 后端,后续所有 PyTorch 算子调用将自动使用 FlagGems 的 Triton 实现。项目中 examples/ 目录提供了 Bert-base-uncased、Llama-2-7b、Llava-1.5-7b 等模型的测试脚本。
FlagGems 作为一个底层算子库,局限性也比较明显。项目没有 Dockerfile、没有 docker-compose,无法通过容器一键运行。源码构建涉及 CMake、C++ 编译器(Triton 对 C++20 有要求)和 Triton 工具链的复杂配置,对新手极不友好。官方文档较为分散,虽然有英文和中文 CONTRIBUTING 指南,但缺乏傻瓜式安装教程。
此外,没有 Web UI——这是一个纯 SDK 性质的库,不提供任何图形界面。性能依赖调优质量,自动代码生成的算子性能不一定优于原生 PyTorch。最后,Triton 本身仍处于活跃开发中,不同版本的 Triton API 存在 breaking changes,FlagGems 需要跟进维护。
FlagGems 的最大价值在于为国产 AI 芯片提供了一条绕过 CUDA 的高性能算子路径。传统上,国产 AI 加速卡要获得良好的 PyTorch 支持,需要各家厂商单独维护 CUDA 到自有指令集的适配层,工作量巨大。FlagGems + Triton 的组合提供了一种"中间层抽象":芯片厂商只需适配 Triton 后端,就可以自动获得 FlagGems 中 180+ 算子的支持,大幅降低适配成本。
从 FlagOS 生态来看,FlagGems 是 FlagOS 软件栈中负责"通用算子层"的核心组件,旁边还有负责编译器统一的 FlagTree、负责模型自动迁移的 FlagRelease 等项目,共同构成了一个完整的国产 AI 软件生态。
| 维度 | 评分/描述 |
|---|---|
| 项目类型 | 底层算子库 / SDK |
| 部署难度 | 困难(需源码编译 + 硬件配置) |
| 目标用户 | AI 系统工程师、芯片厂商、LLM 训练框架开发者 |
| 核心优势 | Triton 一次编写多后端运行、180+ PyTorch 兼容算子、PyTorch 官方生态认可 |
| 主要局限 | 无容器化、无 Web UI、安装门槛高、依赖 Triton 版本 |
| 推荐场景 | 国产 AI 加速卡 LLM 适配、Triton 内核研发、追求特定算子极致优化 |