Page 363 - 《软件学报》2025年第4期
P. 363
俞诗航 等: 神经形态计算: 从脉冲神经网络到边缘部署 1769
否按预期工作, 在实际部署前发现和解决问题. 此外, 许多软件模拟器还提供性能和时序分析, 并评估硬件实现的
功耗和资源利用情况, 有助于达到更节能和高效的硬件实现. 选择 SNN 仿真模拟器有一些标准 [117] , 它理应是开放
的, 且易于调试和运行, 并能支持各种硬件. 下面介绍一些常见的 SNN 模拟器.
表 3 SNN 专用编程框架小结
框架名称 神经元模型 编码方案 事件驱动 训练方法
BindsNET IF, Izhikevich 秩序编码 不支持 STDP
SpikingJelly LIF 频率编码, 延迟编码, 相位编码 支持 ANN-to-SNN, STDP
SpykeTorch LIF 首脉冲触发时间编码, 秩序编码 不支持 STDP
[118]
NEST 支持具有不同生物学原理的神经元和突触模型, 提供了 50 多种神经元模型和 10 多种突触模型, 包
括 Izhikevich 和 H-H 等典型的脉冲神经元模型, 以及 STDP 学习规则及其各类变体, 同时允许在仿真过程中随时
检查和修改神经元和突触状态. NEST 由 C++实现, 并提供一个名为 PyNEST 的 Python 接口, 可以有效地从单核
电脑扩展到多节点超级计算机.
• 支持CPU多线程执行
Nengo [119] 是一款专注于神经认知仿真的模拟器, 支持包括 SNN 在内的各类神经网络模型. Nengo 由 Python
实现, 提供了一种灵活的方式来构建和模拟 SNN 模型, 支持 TensorFlow 框架扩展, 允许用户定义神经元类型、学
习规则和优化方法, 将大脑的认知功能映射到神经网络中.
[120]
NeMo 是一款充分发挥 GPU 的通用计算能力以仿真大规模 SNN 的模拟器. NeMo 实现了 Izhikevich 脉冲
神经元模型, 能够在不牺牲计算效率的情况下真实地模拟各种脉冲动态, 也能在并行流处理器上模拟具有传导延
迟的 SNN, 同时减少内存带宽需求.
GeNN [121] 是用于 SNN 仿真的软件工具包. GeNN 通过代码生成将神经元仿真的不同描述转换为统一的 C++
代码, 得到与英伟达 GPU 兼容的可执行文件, 从而在 CPU 或 GPU 上加速 SNN 仿真.
Brian 2 [122] 是使用 Python 编写的一款 SNN 开源模拟器. 它高度灵活、易于扩展, 方便用户使用微分方程定义
脉冲神经元和突触模型, 允许高效地模拟 SNN. Brian 2 使用自己的通用描述方法, 无需修改核心代码即可轻松生
成不同平台的代码, 具备强大的可扩展性.
CARLsim6 [123] 是 CARL-sim SNN 仿真平台的第 6 个版本, 该平台是首批利用 CUDA GPU 模拟大脑巨大并行
处理能力的开源仿真系统之一. 最新的 CARLsim6 支持当下的各类主流计算机和 GPU, 增加了可扩展性, 并纳入
了长期和短期突触可塑性, 能进行快速学习、网络重新连接和神经活动调节.
表 4 统计了主流 SNN 仿真软件的功能.
表 4 SNN 仿真软件功能统计
仿真工具 开源 GPU支持 编程语言 特点
• 适合动态关注神经系统的结构
C++
NEST 是 否 • 仿真速度快
Python
• 可利用本地网络中的多核计算机提高内存效率
Nengo 是 是 Python • 拥有仿真后端, 如Nengo FPGA、Nengo Loihi、Nengo SpiNNaker和Nengo OpenCL
• 专注于SNN的高级神经行为
• 支持CPU多线程执行
NeMo 是 是 C++ • 可模拟不同的神经元模型和硬件配置
• 可在支持CUDA的GPU上运行
• 支持所有主流操作系统
Brian 2 是 是 Python • 可在英伟达GPU上运行Brian 2脚本
• 可将性能提升数十倍至数百倍
• 提供易于使用的编程界面
C++
CARLsim6 是 是 • 为SNN提供方便的参数调节
Python
• 提供生物可信的C++实现, 在灵活性和性能之间取得平衡