Page 386 - 《软件学报》2025年第10期
P. 386

杨乐 等: BIVM: 类脑计算编译框架及其原型研究                                                      4783


                 生成的这两个应用的性能, 并与         NEST  与  SpikingJelly  框架进行对比  (性能对比见图  4).
                  4.3.1    Brunel 神经网络模拟
                    Brunel 神经网络是计算神经学领域中一类典型的网络形式, 包含兴奋性神经元组和抑制性神经元组, 组间按
                 照一定概率相连. 我们将       BIVM  与  NEST  框架进行性能对比.
                    如表  5  所示, 测试的  Brunel 神经网络包含大小分别为        8 000  和  2 000  的  Izhikevich  两个神经元组, 并以  10%  的
                 概率相互连接, 连接权重固定. Izhikevich     神经元组参数固定为        NEST  框架中的默认值, 但参数恒定电流         (i e ) 调整至
                 50 pA. 在此系列参数下, 神经元的平均发放率约为           100 Hz. 测试中时间步设定为     1 ms, 并运行  10 s (10 000 个时间步).

                                                表 5 Brunel 神经网络参数说明

                                网络规模与参数                                说明
                                  神经元规模                  兴奋性神经元组: 8 000, 抑制性神经元组: 2 000
                                   突触规模                                 10 7
                                  神经元类型                              Izhikevich
                                  神经元参数                a: 0.02, b: 0.2, c: −65.0, d: 8.0, i e : 50.0 pA, v th : 30.0 mV
                                   突触类型                               静态突触
                                   突触参数              兴奋性突触权重w: 0.005 pA, 抑制性突触权重w: −0.001 pA

                    本研究开展了消融测试, 对比了不同优化选项对                BIVM  执行时间的影响. 测试采用了如下的优化方法: 对神
                 经元组与突触组进行合并、对神经元更新操作使用                   SIMD  向量化、对脉冲传播操作使用不同的稀疏格式运算.
                 表  6  展示了消融测试结果. 其中, 对脉冲传播操作进行优化的加速效果最优, 连接矩阵转换为稀疏格式方法可以达
                 到  4.04  倍加速比  (72.406→17.896). 神经元组与突触组合并带来了       36.94%  的性能提升   (17.896→13.068), 而神经
                 元更新操作使用      SIMD  向量化带来了    4.98%  的性能提升   (13.068→12.448).

                                                表 6 Brunel 神经网络消融测试

                      神经元更新操作方法               元组合并               脉冲传播操作方法                  执行时间 (s)
                          标量计算                   ×                 发放状态稀疏                    72.406
                          标量计算                   ×            发放状态、连接矩阵均稀疏                   17.896
                          标量计算                   √            发放状态、连接矩阵均稀疏                   13.068
                        SIMD向量化                  √            发放状态、连接矩阵均稀疏                   12.448

                    最终, 我们对比了      BIVM  与  NEST  的网络模拟时间   (除去模型加载与编译部分). NEST         配置为   8  线程并行运
                 行, 其模拟运行时间为      29.369 s; BIVM  的模拟运行时间为    12.448 s, 性能是前者的  2.35  倍. 性能的差异主要来自我
                 们针对脉冲传播过程的稀疏性进行优化, 而              NEST  并没有对此做额外支持.
                  4.3.2    MNIST  分类任务
                    MNIST  是一个经典的数字分类任务          (参数设置见表     7), 我们对比了   BIVM  与  SpikingJelly  在  MNIST  上的性
                 能. MNIST  网络是一个双层     SNN  网络, 分为输入层与输出层; 输入层接受大小为            28×28  的图片转换得到的脉冲编
                 码作为输入. 脉冲编码使用泊松分布生成, 其能产生与输入值                   x 对应的并满足泊松分布的脉冲序列            (平均间隔   1/x
                 个时间步进行一次发放). 输出层包含           10  个  LIF  神经元, 分别对应  MNIST  任务中  10  种数字的分类, 最终会使用
                 Softmax  函数选择一段时间内输出层中发放次数最多的神经元而得到分类结果. 输入层与输出层之间使用静态突
                 触以全连接方式相连, 权重通过         SpikingJelly  框架训练得到, 分类精度为    92.4%.
                    针对  CPU  后端, 我们对比了    BIVM  与  SpikingJelly  在  MNIST  推理任务上的执行时间. 进行推理任务时, 首先
                 需要根据权重加载网络模型, 再以           1 ms 为时间步运行    0.1 s (100  时间步), 并统计输出层的累计发放次数得到结果
                 并确认准确性.
                    除去模型的加载以及预处理时间, SpikingJelly        处理一张图片的平均时间为          10.104 ms; BIVM  处理一张图片的
                 平均时间为    0.614 ms, 性能为前者的   16.45  倍. 产生此差距的原因一方面在于        SpikingJelly  基于  PyTorch  实现, 会在
                 运行时引入额外开销, 另一方面         SpikingJelly  并没有针对脉冲张量的稀疏性进行优化.
   381   382   383   384   385   386   387   388   389   390   391