Obsidian-Memory-Transformer
基于Titan架构启发的长期记忆Transformer,通过可学习记忆银行突破上下文窗口限制,实现跨
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于Titan架构启发的长期记忆Transformer,通过可学习记忆银行突破上下文窗口限制,实现跨
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你让 AI 读完一整年的工作日志,问它"我去年第三季度遇到过哪些技术挑战",它一脸茫然——不是因为它笨,而是因为标准 Transformer 的上下文窗口是有限的,超出部分就像人脑一样,随时间流逝被覆盖。
这不只是用户的痛点,更是 AI 研究者日思夜想的难题。Google 在 2024 年推出 Titan 架构,首次将"长期记忆"概念引入 Transformer;今天要分析的这个开源项目,则是一位来自剑桥的物理学家兼 AI 先驱 Sahibzada Allahyar,在 Titan 基础上的一次激进演绎。
他把这个项目命名为 Obsidian Memory Transformer——Obsidian(黑曜石)是一种古老而坚硬的岩石,在电子游戏中常被用来铭刻永恒的文字。这个隐喻再清晰不过:给 Transformer 一个可以铭刻记忆的载体,让它不再遗忘。
Sahibzada Allahyar 的背景颇具传奇色彩。根据公开报道,他是剑桥大学出身的物理学家,在 AI 领域的研究横跨理论物理与深度学习。他创办了 Singularity Research 实验室,声称联合了哈佛、MIT、剑桥等顶尖院校的研究者,目标是"让 AI 民主化"。
这种学术背景直接体现在代码质量上。项目采用 C++17 编写核心 CUDA 内核,代码结构高度模块化,头文件与实现文件分离良好,注释采用 Doxygen 风格,甚至还有详细的 CONTRIBUTING.md 贡献指南——这不是一个临时起意的实验项目,而是一个有长期维护打算的严肃工程。
项目仓库地址指向 singularityresearch/ltm-transformer,但 fork 到 GitHub 后由 sahibzada-allahyar 独立维护,体现了开源社区协作的典型路径。
Obsidian Memory Transformer 的核心架构,可以用一句话概括:在标准 Transformer 上叠加一个可学习的长期记忆模块,让模型在处理当前上下文时,能够主动检索历史压缩表征。
具体来说,它包含三个关键组件:
这是整个系统的心脏。Memory Bank 是一个 [num_slots × slot_dim] 的可学习矩阵,默认配置为 512 个槽位,每个槽位 64 维,总参数量约 3.3 万参数。
记忆银行的工作流程非常类似人脑的长期记忆:新的上下文信息经过 Compression Gate 压缩后,通过门控机制决定哪些信息值得写入记忆银行。记忆银行在推理过程中跨步骤持久化——这是与标准 Transformer 最大的区别,后者每个推理步骤都从零开始,前者则可以"记住"之前处理过的所有内容。
代码实现中,Memory Bank 支持动态调整槽位数量(use_dynamic_slots),最小 128 个、最大 1024 个,通过剪枝机制(prune_threshold = 0.1)淘汰低权重槽位,确保记忆银行始终保持高效利用。
Compression Gate 是记忆写入的"守门人"。它的核心逻辑是:根据当前注意力分数,决定哪些隐藏状态值得压缩存入 Memory Bank,以及以何种强度更新。
更新公式借鉴了 LSTM 的门控思想:memory = (1 - gate) × old_memory + gate × new_content,其中 gate 值在 [0, 1] 范围内由一个可学习的神经网络输出。update_rate = 0.9 的默认值意味着每次更新都会较大比例地融合新内容,但保留部分旧记忆——类似人脑的遗忘曲线。
这是最体现工程优化功力的部分。当模型需要"回忆"历史时,它不是简单地把整个记忆银行加载进来做 Attention,而是通过稀疏访问模式——只检索与当前上下文最相关的记忆槽位。
稀疏访问的关键优化在于与 FlashAttention 的深度集成。代码中 FlashAttentionConfig 支持 use_flash_v2=true,使用 FlashAttention v2 的分块矩阵乘法技术,将 Attention 的显存复杂度从 O(N²) 降低到 O(N),使得记忆检索在超长序列上仍然高效。
项目名称中的"Cuda"标签并非偶然——这是一个以性能为首要目标的实现。选择手写 CUDA 内核而非纯 PyTorch 实现,背后有三重考量:
第一,混合精度训练的底层支持。 代码中直接支持 FP16 和 BF16 两种混合精度格式,通过 __nv_bfloat16 和 __half 类型声明,配合 NVIDIA 的 Tensor Core,可以充分利用现代 GPU 的矩阵乘法加速单元。
第二,INT8/INT4 量化推理。 项目包含 quantizer.cuh 和 calibrator.cu 两套量化模块,支持动态量化(post-training quantization)和量化感知训练两种模式。在推理阶段,将模型权重从 FP16 压缩到 INT8,显存占用减半,推理速度提升约 2-3 倍。
第三,Fused Operations(融合算子)。 fused_ops.cu 和 mma_ops.cu 将 Attention 中的多个独立操作(矩阵乘法→Softmax→加权求和)融合为单一 CUDA Kernel,减少显存访问次数,提升计算吞吐。据项目文档声称,相比 PyTorch 原生实现,融合算子可带来 40-60% 的速度提升。
对于超大规模模型的训练,项目实现了三种并行策略:
此外,项目支持通过 MPI 实现多节点通信,mpi_utils.cpp 提供了节点间张量同步的底层接口。这意味着理论上可以在一个集群上训练参数量远超单卡显存限制的模型。
为了让研究成果惠及更广泛的开发者,项目提供了完整的 Python 绑定。python_bindings/ 目录下的代码将 C++ 核心编译为 .so 动态库,通过 pybind11 风格的接口暴露给 Python。
安装方式简洁:
pip install ltm-transformer
或者从源码编译:
mkdir build && cd build
cmake ..
make -j$(nproc)
make install
使用接口设计也尽量与 HuggingFace 风格对齐,降低迁移成本:
from ltm import TitanModel, TitanConfig
config = TitanConfig(hidden_size=768, memory_slots=512, use_flash_attention=True)
model = TitanModel(config)
在赞誉之外,也需要客观指出这个项目的几个局限性:
第一,PyPI 预编译包可能不存在或版本落后。 从源码看,pip install ltm-transformer 依赖 PyPI 上传预编译的二进制包,但项目实际上没有对应的 PyPI 发布记录。如果 NVIDIA 驱动版本不匹配,pip 安装很可能失败。
第二,文档不完整。 虽然架构设计文档详细,但关于如何训练自定义数据集、如何微调预训练权重,目前仓库中缺少实际教程和示例脚本,对于想做下游任务的开发者来说上手门槛较高。
第三,缺少基准测试数据。 项目声称性能优异,但 README 中没有提供与其他模型(如标准 Transformer、Megalodon、RingAttention)的具体性能对比数字,这让评估变得困难。
第四,社区活跃度存疑。 180 stars 和 0 forks 的数据表明该项目在 GitHub 上的传播范围有限,没有形成活跃的社区生态。
尽管存在局限,Obsidian Memory Transformer 的价值在于它验证了一个核心假设:通过可学习的外部记忆模块,Transformer 可以突破上下文窗口的固有限制。
这一方向并非独家创新——Google Titan、Meta Megalodon、DeepMind 的 Hawk/Hawkish 都在探索类似路径。但这个开源实现的特殊之处在于,它以高度工程化的 CUDA 实现将学术想法落地,使得长记忆机制不再只是论文中的数学公式,而是可以被实际运行和实验的代码。
对于 AI 研究者和深度学习工程师而言,这是一个值得关注的实验性项目——不是开箱即用的产品,但在理解"让 AI 拥有持久记忆"这个宏大命题上,它提供了难得的、可以直接阅读和修改的参考实现。