s4

GitHub
2.9k 356 中等 2 次阅读 2天前Apache-2.0开发框架
AI 解读 由 AI 自动生成,仅供参考

s4 是一个专注于结构化状态空间序列建模的开源框架,旨在突破传统模型在处理长序列数据时的性能瓶颈。基于 HiPPO 理论,s4 通过结构化状态空间机制,能够在低计算成本下有效捕捉长距离依赖关系,广泛适用于音频、文本及时间序列分析等任务。

s4 主要面向深度学习研究人员与开发者,提供了基于 PyTorch 的灵活训练框架及独立模块。技术亮点在于高效实现了 Cauchy 和 Vandermonde 内核,支持自定义 CUDA 加速或 Pykeops 集成,显著优化了内存占用与计算速度。s4 不仅包含多种变体模型(如 S4D、S4ND 等)的官方实现,还提供了详细的实验复现指南与示例脚本。无论是希望探索序列建模前沿理论,还是需要将高效序列层集成到现有项目中,s4 都能提供坚实的技术支持与便捷的开发体验。

使用场景

某工业 AI 团队正在开发风力发电机故障预测系统,需要处理长达数万步的振动传感器序列数据,以提前识别潜在机械故障。

没有 s4 时

  • 传统 RNN 模型在处理长序列时出现梯度消失,无法捕捉早期的异常振动信号。
  • 尝试使用 Transformer 架构,但二次方复杂度导致显存占用过高,无法在边缘计算设备上部署。
  • 训练速度缓慢,每次超参数调整都需要数小时,研发周期被大幅拉长。
  • 长距离依赖建模效果差,导致对缓慢恶化的故障模式漏报率居高不下,影响生产安全。

使用 s4 后

  • s4 利用结构化状态空间机制,完美捕捉长程依赖,早期微弱信号不再丢失。
  • 线性复杂度大幅降低显存需求,模型成功部署至资源受限的边缘网关,推理延迟更低。
  • 集成简单的 Python 接口,内置高效 CUDA 内核加速计算,训练速度提升数倍,迭代效率显著提高。
  • 在长序列分类任务上准确率显著上升,故障识别更精准,维护成本降低。

s4 通过高效的状态空间建模,解决了长序列处理中的性能与效率瓶颈,让长上下文理解变得轻量且精准。

运行环境要求

操作系统
  • 未说明
GPU

推荐 NVIDIA GPU (示例使用 CUDA 11.6),支持多卡训练,自定义 CUDA 内核需编译

内存

未说明

依赖
notes核心算子支持自定义 CUDA 内核(需手动编译)或 Pykeops 库以提升效率;配置管理基于 Hydra 框架;支持 WandB 日志记录;多 GPU 训练可通过 trainer.gpus 参数配置;部分库版本需兼容(特别是 torch 系列)。
python3.9+
pytorch>=1.10
torchvision
torchaudio
torchtext
pykeops
cmake
pytorch-lightning
hydra-core
wandb
s4 hero image

快速开始

用于序列建模 (Sequence Modeling) 的结构化状态空间 (Structured State Spaces)

本仓库提供了与 S4 相关模型的官方实现和实验, 包括 HiPPOLSSLSaShiMiDSSHTTYHS4DS4ND

每个模型的项目特定信息,包括源代码概述和具体实验复现, 可以在 models/ 下找到。

目录

设置环境并将 S4 移植到外部代码库:

使用本仓库训练模型:

变更日志

参见 CHANGELOG.md

路线图

  • 更多关于使用本仓库从头开始训练的文档
  • S4 资源和实现的汇编
  • pip 包

设置

要求

本仓库需要 Python 3.9+ 和 Pytorch 1.10+。 已测试至 Pytorch 1.13.1。 其他包列在 requirements.txt 中。 需要注意使某些库版本兼容,特别是 torch/torchvision/torchaudio/torchtext。

安装示例:

conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
pip install -r requirements.txt

结构化核函数 (Structured Kernels)

S4 的核心操作是 论文 中描述的柯西 (Cauchy) 和范德蒙德 (Vandermonde) 核函数 (kernels)。 这些是非常简单的矩阵乘法;这些操作的朴素实现可以在 standalone 中的 cauchy_naivelog_vandermonde_naive 函数中找到。 然而,正如论文所述,这需要次优的内存使用,目前需要自定义核函数 (kernel) 来在 PyTorch 中克服。

支持两种更高效的方法。代码会自动检测是否安装了其中任何一种并调用相应的核函数。

自定义 CUDA 核函数 (Custom CUDA Kernel)

此版本更快,但需要为每个机器环境手动编译。 从 extensions/kernels/ 目录运行 python setup.py install

Pykeops

此版本由 pykeops 库 提供。 安装通常只需 pip install pykeops cmake 即可开箱即用,这些也列在 requirements 文件中。

S4 入门

S4 模块

S4 层及其变体的独立文件可以在 models/s4/ 中找到, 其中包括调用模块的说明。

参见 notebooks/ 以获取解释 HiPPO 和 S4 背后一些概念的可视化内容。

示例训练脚本(外部使用)

example.py 是一个用于 MNIST 和 CIFAR 的独立训练脚本,导入独立的 S4 文件。默认设置 python example.py 在顺序 CIFAR 上达到 88% 的准确率,使用的是一个非常简单的 200k 参数的 S4D 模型。 此脚本可用作在外部仓库中使用 S4 变体的示例。

使用本仓库训练(内部使用)

本仓库旨在提供一个非常灵活的框架来训练序列模型。支持许多模型和数据集。

基本入口点是 python -m train,或等价于

python -m train pipeline=mnist model=s4

这在 Permuted MNIST 数据集上训练一个 S4 模型。 这应该在 1 个 epoch (训练轮次) 后达到约 90%,根据 GPU 不同需要 1-3 分钟。

更多使用本仓库的示例在整个文档中都有记录。参见 训练 以获得概述。

优化器超参数 (Optimizer Hyperparameters)

此代码库的一个重要功能是支持需要不同优化器超参数 (optimizer hyperparameters) 的参数。 特别是,SSM 核函数 (kernel) 对 $(A, B)$(有时是 $\Delta$ 参数)特别敏感, 因此这些参数的学习率有时会降低,并且权重衰减 (weight decay) 始终设置为 $0$。

参见模型中的 register 方法(例如 s4d.py)和训练脚本中的 setup_optimizer 函数(例如 example.py),以了解如何在外部仓库中实现此功能的示例。

训练

本仓库的核心训练基础设施基于 Pytorch-Lightning,配置方案基于 Hydra

主入口点是 train.py,配置文件在 configs/ 中。

数据

基本数据集会自动下载,包括 MNIST、CIFAR 和 Speech Commands。 创建和加载数据集的所有逻辑都在 src/dataloaders 目录中。 此子目录内的 README 记录了如何下载和组织其他数据集。

模型

模型定义在 src/models 中。参见此子目录中的 README 以获得概述。

配置和超参数

提供了复现论文中端到端实验的预定义配置,位于 models/ 中的项目特定信息下,例如 原始 S4 论文

配置也可以通过命令行轻松修改。 一个实验示例是

python -m train pipeline=mnist dataset.permute=True model=s4 model.n_layers=3 model.d_model=128 model.norm=batch model.prenorm=True wandb=null

这使用 Permuted MNIST 任务,带有指定层数、主干维度 (backbone dimension) 和归一化类型 (normalization type) 的 S4 模型。

参见 configs/README.md 以获取有关配置的更详细文档。

Hydra

建议阅读 Hydra 文档 以充分了解配置框架。如需帮助启动特定实验,请提交 issue。

恢复训练

每个实验都将记录到其自己的目录中(由 Hydra (配置管理工具) 生成),格式为 ./outputs/<date>/<time>/。检查点(Checkpoints)将保存于此文件夹内,并在创建新检查点时打印到控制台。 要恢复训练,只需指向所需的 .ckpt 文件(PyTorch Lightning (深度学习框架) 检查点,例如 ./outputs/<date>/<time>/checkpoints/val/loss.ckpt),并将标志 train.ckpt=<path>/<to>/<checkpoint>.ckpt 附加到原始训练命令后。

PyTorch Lightning Trainer

PTL Trainer 类控制整体训练循环,并提供许多有用的预定义标志。下面解释了一些有用的示例。 允许的标志完整列表可在 PTL 文档以及我们的 trainer configs 中找到。参见默认训练器配置 configs/trainer/default.yaml 以获取最有用的选项。

多 GPU 训练

只需传入 trainer.gpus=2 即可使用 2 个 GPU (图形处理器) 进行训练。

检查模型层

trainer.weights_summary=full 打印出模型的每一层及其参数计数。用于调试模型内部结构。

数据子采样

trainer.limit_{train,val}_batches={10,0.1} 仅在 10 个批次(所有批次的 0.1 比例)上进行训练(验证)。用于在不遍历所有数据的情况下测试训练循环。

WandB

使用 WandB (实验跟踪工具) 记录日志的功能已内置到此仓库中。 为了使用此功能,只需设置 WANDB_API_KEY 环境变量,并更改 configs/config.yamlwandb.project 属性(或在命令行上传递,例如 python -m train .... wandb.project=s4)。

设置 wandb=null 以关闭 WandB 日志记录。

生成

自回归(Autoregressive)生成可以使用 generate.py 脚本执行。 在使用此代码库训练模型后,该脚本可以通过两种方式使用。

选项 1:检查点路径

更灵活的选项需要训练好的 PyTorch Lightning 模型的检查点路径。 生成脚本接受与训练脚本相同的配置选项,还有一些额外的标志记录在 configs/generate.yaml 中。 使用 python -m train <train flags> 训练后,生成使用

python -m generate <train flags> checkpoint_path=<path/to/model.ckpt> <generation flags>

配置中的任何标志都可以被覆盖。

注意:此选项可与 .ckpt 检查点(PyTorch Lightning,包含 Trainer 信息)或 .pt 检查点(PyTorch,仅是模型状态字典)一起使用。

选项 2:实验路径

生成的第二个选项不需要再次传递训练标志,而是从 Hydra 实验文件夹读取配置,以及实验文件夹内的 PyTorch Lightning 检查点。

示例 1 (语言)

下载 WikiText-103 模型检查点,例如到 ./checkpoints/s4-wt103.pt。 此模型是使用命令 python -m train experiment=lm/s4-wt103 训练的。注意从配置中我们可以看到模型是使用长度为 8192 的感受野(Receptive field)训练的。

要生成,运行

python -m generate experiment=lm/s4-wt103 checkpoint_path=checkpoints/s4-wt103.pt n_samples=1 l_sample=16384 l_prefix=8192 decode=text

这将生成一个长度为 16384 的样本,以长度为 8192 的前缀为条件。

示例 2 (音频)

让我们在 SC09 数据集上训练一个小型 SaShiMi 模型。我们还可以减少训练和验证批次的数量以更快地获得检查点:

python -m train experiment=audio/sashimi-sc09 model.n_layers=2 trainer.limit_train_batches=0.1 trainer.limit_val_batches=0.1

第一个 Epoch (训练轮次) 完成后,会打印一条消息指示检查点保存的位置。

Epoch 0, global step 96: val/loss reached 3.71754 (best 3.71754), saving model to "<repository>/outputs/<date>/<time>/checkpoints/val/loss.ckpt"

选项 1:

python -m generate experiment=audio/sashimi-sc09 model.n_layers=2 checkpoint_path=<repository>/outputs/<date>/<time>/checkpoints/val/loss.ckpt n_samples=4 l_sample=16000

此选项重新定义完整配置,以便可以构建模型和数据集。

选项 2:

python -m generate experiment_path=<repository>/outputs/<date>/<time> checkpoint_path=checkpoints/val/loss.ckpt n_samples=4 l_sample=16000

此选项只需要 Hydra 实验文件夹的路径以及其中所需的检查点。

整体仓库结构

configs/         Config files for model, data pipeline, training loop, etc.
data/            Default location of raw data
extensions/      CUDA extensions (Cauchy and Vandermonde kernels)
src/             Main source code for models, datasets, etc.
  callbacks/     Training loop utilities (e.g. checkpointing)
  dataloaders/   Dataset and dataloader definitions
  models/        Model definitions
  tasks/         Encoder/decoder modules to interface between data and model backbone
  utils/
models/          Model-specific information (code, experiments, additional resources)
example.py       Example training script for using S4 externally
train.py         Training entrypoint for this repo
generate.py      Autoregressive generation script

引用

如果您使用此代码库,或发现我们的工作有价值,请引用 S4 和 其他相关论文

@inproceedings{gu2022efficiently,
  title={Efficiently Modeling Long Sequences with Structured State Spaces},
  author={Gu, Albert and Goel, Karan and R\'e, Christopher},
  booktitle={The International Conference on Learning Representations ({ICLR})},
  year={2022}
}

版本历史

v4.1.0
v4.0.0
v3.0.0
v2
v1

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架