模型 / 数据集
NX-AI/xlstm avatar
NX-AI/xlstm

xLSTM 仓库拆解:从 NeurIPS 论文实现到 7B 推理模型的两套代码

Official repository of the xLSTM.

2,199 个 Star186 个 ForkPythonApache-2.0

秒懂

它是什么?
NX-AI/xlstm 是 xLSTM 的官方仓库,但仓库内部其实并存两套架构:一套对应 NeurIPS 论文的 xLSTMBlockStack/xLSTMLMModel,一套是面向 7B 推理优化的 xlstm_large。本文只依据 README 与仓库结构,说明它们各自解决什么问题、怎么跑起来、以及哪一类团队不该直接上手。
适合谁用?
如果你的目标是在 NVIDIA GPU 上复用 xLSTM Large 的架构或权重做推理与微调,这个仓库值得直接克隆;如果你只是想在 CPU 或 Apple Metal 上跑一个小规模实验,README 明确建议改用 chunkwise--native_autograd、native_sequence__native、native 这套原生 PyTorch 内核,代价是失去 Triton 加速。动手前先确认三件事:PyTorch 版本是否满足 >=1.8 且与 CUDA 匹配,sLSTM 的 CUDA 路径是否达到 Compute Capability >= 8.0,以及 7B 权重走的是 nxai_community 许可而非仓库的 Apache-2.0。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 8 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

这个仓库其实装着两套 xLSTM

很多人把 NX-AI/xlstm 当成一个模型库,但它更像两个项目的合订本。第一部分是 NeurIPS 论文的参考实现,对外暴露的是 xLSTMBlockStack 和 xLSTMLMModel 两类入口:前者面向非语言任务,或者要嵌进别的网络结构里;后者面向语言建模和其他基于 token 的任务。第二部分是 xLSTM Large,代码放在 xlstm/xlstm_large 目录下,README 说它是为训练吞吐和稳定性做过优化的版本,也是那个在 2.3T token 上训练出来的 7B 模型所用的架构。

这个划分决定了你该看哪份文档。想复现论文、做架构层面的改动、把 xLSTM 的 block 塞进自己的模型,走 xLSTMBlockStack。想直接拿现成权重做推理、评估一个循环式 LLM 的实际表现,走 xlstm_large。README 特别强调 xlstm_large 是一个独立单文件实现,除 mlstm_kernels 外不依赖 NeurIPS 那套代码,所以两条路径可以分开维护,互不牵连。

需要说明的是,README 只给出了模型规模、token 数和架构定位,没有提供任何与 Transformer 或状态空间模型的定量对比数字。文中那句 promising performance 是论文作者的表述,不是本仓库给出的可复现基准。

指数门控与矩阵记忆解决了什么

原始 LSTM 的两个老问题是记忆容量受限于逐元素状态,以及门控在长序列上容易饱和。README 对 xLSTM 的描述很简短:在原始 LSTM 思路上引入指数门控,配合相应的归一化与稳定化技巧,再叠加一种新的矩阵记忆,从而绕开这些限制。

这段话里真正有工程含义的是矩阵记忆。逐元素状态意味着每个隐藏单元只维护一个标量,容量随宽度线性增长;矩阵记忆把状态变成矩阵,容量增长方式随之改变。指数门控则是把门控从 sigmoid 的 (0,1) 区间换成可以放大的形式,让模型在需要长期保留信息时不必被压缩到饱和区。两者都需要稳定化处理,否则指数项在长序列上会数值爆炸,README 没有展开这部分细节。

架构层面还有一个容易被忽略的点:xLSTM 是循环结构,不是注意力结构。README 在介绍 7B 模型时用的标题是 A Recurrent LLM for Fast and Efficient Inference,把效率和推理速度放在架构定位里,而不是放在与 Transformer 的精度对比里。至于这个效率优势具体是多少,材料中没有数字,不能替它补。

安装路径:conda 环境加 pip,7B 还要多一个包

README 给的安装流程分两条。想用 xLSTM Large 7B,先装内核包,再装主包:

pip install mlstm_kernels pip install xlstm

不想走 PyPI 就从源码装:

git clone https://github.com/NX-AI/xlstm.git cd xlstm pip install -e .

环境方面,仓库基于 PyTorch,README 说测试覆盖到 >=1.8。它同时提供了一个 environment_pt240cu124.yaml,从文件名可以看出对应 PyTorch 2.4.0 与 CUDA 12.4,这是官方认为经过较好测试的组合:

conda env create -n xlstm -f environment_pt240cu124.yaml conda activate xlstm

这里有个实际约束:requirements 段落把 mlstm_kernels 写成 xLSTM Large 7B 的必要依赖,也就是说 pip install xlstm 装到的只是模型代码,7B 那条路径还需要额外一步。只装主包然后照着 demo 写 chunkwise_kernel="chunkwise--triton_xl_chunk",大概率会在导入阶段就失败。

配置里那三个 kernel 参数才是关键

xLSTMLargeConfig 的参数里,真正决定跑不跑得起来的是 chunkwise_kernel、sequence_kernel 和 step_kernel 这三个字符串。README 的 demo 给的是 Triton 组合:

chunkwise_kernel="chunkwise--triton_xl_chunk" sequence_kernel="native_sequence__triton" step_kernel="triton"

注释里写明 xl_chunk 就是 TFLA 内核。同一份 demo 还展示了一次前向:用 torch.randint 造一个 (3, 256) 的输入,放到 cuda 上,模型输出形状为 (256, 2048),对应 vocab_size=2048。这是一个随机初始化的模型,不是加载权重后的推理,demo 的用途是验证形状和内核能不能跑通。

对非 NVIDIA 硬件,README 的建议是把三个参数整体换掉:

chunkwise_kernel="chunkwise--native_autograd" sequence_kernel="native_sequence__native" step_kernel="native"

注释直接标注 no Triton kernels。这是一次全有或全无的替换,README 没有给出混用 Triton 与 native 内核的说明。另外配置里还有 mode="inference" 和 return_last_states=True 两个字段,demo 中都是这么设的,但 README 没有解释 mode 的其他取值,也没有说明训练场景该怎么配。

sLSTM 的 CUDA 编译门槛与两个环境变量

如果你用的是 NeurIPS 那套实现里的 sLSTM CUDA 内核,README 给了一条硬性要求:Compute Capability 必须 >= 8.0。这个门槛把 Volta 及更早的卡直接排除在外,T4(7.5)也在外面。

编译出问题时,README 引用了社区贡献者 @zia1138 的做法,显式指定目标架构:

export TORCH_CUDA_ARCH_LIST="8.0;8.6;9.0"

另一个变量用于注入头文件搜索路径,解决 CUDA 库找不到的问题:

export XLSTM_EXTRA_INCLUDE_PATHS='/usr/local/include/cuda/:/usr/include/cuda/'

它也可以在 Python 里设置:os.environ['XLSTM_EXTRA_INCLUDE_PATHS']='...'。README 提醒,torch 与 CUDA 的版本必须匹配,这是自定义环境里最常见的失败来源。

如果 sLSTM 内核编译始终不顺,README 指向同组织的 FlashRNN 库,说那里有独立、更快的 sLSTM 内核。这等于承认仓库内的 CUDA 路径不是唯一选择,也不是性能上限。

什么时候不该用这个仓库

第一类不适合的情况是硬件不匹配。7B 路径依赖 mlstm_kernels 提供的快速内核,README 说主要是在 NVIDIA GPU 上测试的,Triton 内核理论上也能跑在 AMD 上,但这句话的措辞是 should also run,不是已验证。Apple Metal 用户被明确建议改用原生 PyTorch 实现,也就是放弃加速。想在 Mac 上做正经的 7B 推理,README 给的出路是社区维护的 xLSTM-metal 端口,那已经不属于本仓库。

第二类是只想做小规模架构实验的人。为了跑一个 block 而引入 mlstm_kernels 和整套 conda 环境,成本与收益不成比例;直接用 xLSTMBlockStack 配原生内核更省事。

第三类是把它当成成熟训练框架的团队。README 展示的是模型定义、配置和前向调用,没有给出分布式训练脚本、数据管线或检查点转换工具的说明。仓库的定位是架构实现与权重发布,不是端到端训练栈。把这两件事混为一谈,会在工程化阶段付出额外代价。

和 Mamba 这类状态空间模型比,差别在哪

拿 Mamba 作对照比较合适,因为它同样主打线性或近线性的序列建模效率,同样提供 CUDA/Triton 内核,也同样有预训练权重。区别在状态更新方式:Mamba 走的是选择性状态空间,状态转移由输入调制,本质仍是逐元素的状态向量;xLSTM 走的是门控循环加矩阵记忆,状态是矩阵,门控是指数形式。

这个差别会落到具体工程细节上。矩阵记忆意味着状态的内存占用随隐藏维度呈平方关系,而不是线性,长上下文推理时的显存曲线因此不同。指数门控要求配套的归一化与稳定化,内核实现里这部分不能省,README 也把 stabilization techniques 与 exponential gating 并列写在一起。

两者都依赖自定义内核才能拿到宣称的效率,所以实际的选型依据往往不是论文里的架构图,而是你的硬件能不能编译并跑通这些内核。在这一点上,xLSTM 的 CUDA 路径有明确的 Compute Capability >= 8.0 门槛,这是一个可以直接拿来筛选的硬条件。

许可与维护成本

仓库本身的许可标识是 Apache-2.0,这是宽松许可,允许商用与修改,附带通常的专利授权与免责条款。但 README 里 7B 模型那一节的徽章指向的是 nxai_community 许可,链接落在另一个仓库的 LICENSE 文件上。也就是说代码和权重不是同一套条款,权重有自己的使用限制。README 没有展开 nxai_community 的具体内容,需要自行阅读原始许可文本。这里不构成法律意见,涉及商用部署时应由法务确认权重条款与代码条款的差异。

维护节奏上,材料显示最近一次推送是 2026-09-07,同一天发布了 v2.0.6,上一个版本 v2.0.4 在 2025-05-28,间隔约十五个月。这是一个低频发布、按需更新的仓库,不是每周迭代的项目。对使用者的含义是:API 相对稳定,但遇到问题时不指望上游立刻修。

升级成本主要压在 mlstm_kernels 上。7B 路径的核心加速来自这个外部包,而内核与 CUDA、Triton、PyTorch 版本强耦合。仓库自己的版本号变化可能很小,但内核包的变动会直接影响 chunkwise_kernel 这些字符串是否还有效。锁定版本组合比追新更实际。

编辑结论

如果你的目标是在 NVIDIA GPU 上复用 xLSTM Large 的架构或权重做推理与微调,这个仓库值得直接克隆;如果你只是想在 CPU 或 Apple Metal 上跑一个小规模实验,README 明确建议改用 chunkwise--native_autograd、native_sequence__native、native 这套原生 PyTorch 内核,代价是失去 Triton 加速。动手前先确认三件事:PyTorch 版本是否满足 >=1.8 且与 CUDA 匹配,sLSTM 的 CUDA 路径是否达到 Compute Capability >= 8.0,以及 7B 权重走的是 nxai_community 许可而非仓库的 Apache-2.0。

官方来源

  1. License: Apache-2.0
  2. NX-AI/xlstm on GitHub
  3. Project website
  4. README
  5. Releases
社区笔记

社区笔记