- 科研
- 高性能计算
【免费下载链接】fly-brain
Emulation of the Drosophila Fly brain: Brian2, Brian2CUDA, PyTorch, NEST GPU, and neuromorphic chips
想在 fly-brain 中复现 Nature 论文基准套件吗?本文带你用一条命令跑通--paper五轮实验,并彻底搞懂run-label如何管理 600 个 spike parquet 文件、断点续跑与结果校验。fly-brain 是基于 FlyWire 连接组(约 138k 神经元、500 万突触)的成年果蝇全脑 LIF 仿真基准,统一对比 Brian2、Brian2CUDA、PyTorch、NEST GPU、GeNN 与 Brian2GeNN 六大后端。
一、先搞懂:--paper 基准套件到底跑什么?
很多人第一次看到--paper参数就懵了。它其实是论文级别的"完整参数网格 + 重复轮次"预设,核心配置硬编码在 code/benchmark.py 中:
| 配置项 | 取值 | 含义 |
|---|---|---|
t_run | 0.1 / 1 / 10 / 100秒 | 4 档仿真时长(March 网格) |
n_run | 1 / 4 / 8 / 16 / 32 | 5 档独立试验数(批大小) |
| 轮数 | PAPER_ROUNDS = 5 | 同一网格重复 5 轮 |
| 默认后端 | cpu / gpu / pytorch / nestgpu / genn | 5 个主环境后端 |
也就是说,每个后端每轮跑4 × 5 = 20 个参数组合,5 轮下来单后端产出 100 个结果行;六大后端合并后就是论文数据集中的600 个 spike parquet 文件(每轮 120 个)。
💡 与完整基准
python main.py(t_run 含 1000 秒、单轮)不同,--paper时长上限是 100 秒、且强制 5 轮,专为论文可复现性设计。
二、一键安装步骤:准备好两个 conda 环境
复现前需要准备运行环境,入口在 main.py,环境定义在仓库根目录:
# 主环境:Brian2 / Brian2CUDA / PyTorch / GeNN(+ 系统级 NEST GPU) conda env create -f environment.yml conda activate brain-fly # Brian2GeNN 专用环境(Brian2 版本冲突,必须隔离) conda env create -f environment-brian2genn.yml conda activate brain-fly-brian2genn- 主环境 environment.yml 覆盖 5 个核心后端;
- environment-brian2genn.yml 单独隔离 Brian2GeNN,因为它把 Brian2 钉死在
<2.6,与 Brian2CUDA 的 Brian2 2.8.0 冲突; - NEST GPU 需从源码编译自定义
user_m1神经元模型,详见 README.md 的 "NEST GPU" 小节,编译源码在 scripts/nestgpu_source_files/。
三、最快配置方法:一条命令启动五轮实验
在brain-fly环境中执行:
python main.py --paper --run-label nature_2026_07这条命令会按轮次循环:每轮依次调用 5 个后端 runner(code/run_brian2_cuda.py、code/run_pytorch.py、code/run_nestgpu.py、code/run_genn.py),每完成一个参数组合就增量写入data/benchmark-results.csv,即使中途中断也不会丢数据。
把 Brian2GeNN 作为第 6 个后端"加跑"进同一个 label:
conda activate brain-fly-brian2genn python main.py --brian2genn --paper --run-label nature_2026_07⚠️ 注意:切换环境后追加的 Brian2GeNN 行会按
run_label + round与原有行合并到同一 CSV 和同一目录,无需手动搬运。
四、run-label 机制详解:结果是怎么组织的?
--run-label是整个复现流程的"目录钥匙",其实现位于 code/benchmark.py:
- 消毒处理:
sanitize_run_label()把非法字符替换为_,保证文件系统安全; - 目录分组:spike 输出落到
data/results/<label>/round_XX/,每轮 120 个文件; - CSV 去重键:带 label 的行以
(framework, n_run, t_run, experiment, run_label, round)为键保留历史行,而不像无 label 的一次性运行那样覆盖旧行; - 清单与校验:自动维护
manifest.csv和checksums.sha256。
以官方数据集 data/results/nature_2026_07/ 为例,结构如下:
data/results/nature_2026_07/ ├── manifest.csv # 600 行 spike 文件清单(含 schema 版本) ├── checksums.sha256 # 600 条 sha256 校验和 └── round_01/ … round_05/ # 每轮 120 个 parquet,如 brian2cpp_t1.0s_n1.parquet每行 spike parquet 的时间列统一为time_ms,并带trial、neuron_index、flywire_id、exp_name字段,六大后端共享同一 schema,这也是跨后端对比的基础。
五、中断了怎么办?断点续跑指南
五轮 × 六后端全量跑下来耗时很长(仅 Brian2 CPU 的n_run=32, t_run=100s单组就需约 1 小时)。main.py提供了两个参数配合续跑:
# 从第 3 轮开始,只再跑 3 轮 python main.py --paper --run-label nature_2026_07 --round-start 3 --rounds 3--round-start:指定起始轮号(见 main.py);--rounds:覆盖默认的 5 轮;- 由于 CSV 按 label + round 去重,重跑已有轮次会原地更新对应行,不会产生重复。
六、进阶技巧:--disable-spike-io 纯计时模式
论文中还有一组"无 I/O"对照数据:关闭 spike 探测与 parquet 输出,纯粹测量仿真速度:
python main.py --paper --rounds 1 --run-label nature_2026_07_noio --disable-spike-io官方对照结果在 data/results/nature_2026_07/no_io/(见 no_io/README.md),120/120 全部成功。结论摘要:
| 后端 | 仿真时间中位降幅 | 总时间中位降幅 |
|---|---|---|
| Brian2 CPU | 4.1% | 7.1% |
| Brian2CUDA | 11.2% | 13.5% |
| PyTorch CUDA | 9.6% | 7.9% |
| GeNN | 9.3% | 14.2% |
| Brian2GeNN | 37.4% | 2.4% |
原始数据见 no_io/timings.csv 与 no_io/timing_summary.csv。
七、结果校验:从 sha256 到地面真值对比
1. 校验 spike 包完整性
cd data/results/nature_2026_07 sha256sum -c checksums.sha2562. 对比 Brian2 CPU 地面真值
Brian2 (CPU) 实现了 Shiu et al.(Nature 2024)的标准 LIF 模型,被用作神经精度基准。直接指定 label 和轮次即可:
python code/compare_ground_truth.py --run-label nature_2026_07 --round 1脚本 code/compare_ground_truth.py 会计算活跃神经元 Jaccard 重叠度、逐神经元放电率相关系数与 spike 计数比,结果写入data/ground-truth-comparison.json。
3. 全后端两两对比
python code/compare_spike_outputs.py \ --run-label nature_2026_07 --round 1 \ --output-dir data/results/nature_2026_07/comparisonscode/compare_spike_outputs.py 产出pairwise_summary.csv、parity_rates.csv等文件;而 code/compare_backend_to_brian2.py 则用于论文支撑材料——把某个后端(如--backend brian2genn)与 Brian2 CPU 在全部 5 个轮次上做放电率一致性对比。
八、常见问题 FAQ
Q1:跑--paper一定要加--run-label吗?不是必须,但强烈建议。多轮运行不给 label 时,系统会用default_run_label()自动生成paper_YYYYmmdd_HHMMSS时间戳标签(见 code/benchmark.py),不方便跨轮对齐。
Q2:spike parquet 为什么没进 Git?600 个 parquet 体积过大,被有意 gitignore;仓库只提交 manifest.csv 和 checksums.sha256 作为元数据,完整数据包需从项目 README 说明的网盘下载后用校验和验证。
Q3:如何只看某一后端的五轮结果?在 data/benchmark-results.csv 中筛选run_label=nature_2026_07且backend_key匹配的行即可,例如brian2cpp、brian2cuda、pytorch、nestgpu、genn、brian2genn。
总结
复现 fly-brain 的 Nature 基准套件只需记住三步:备好两个 conda 环境 →python main.py --paper --run-label <标签>→ 用sha256sum -c和对比脚本验收。run-label + round的双重索引让 600 个 spike 文件各归其位,--round-start让长任务可随时续跑,这正是论文级可复现实验管理的最小完整方案。
- 科研
- 高性能计算
【免费下载链接】fly-brain
Emulation of the Drosophila Fly brain: Brian2, Brian2CUDA, PyTorch, NEST GPU, and neuromorphic chips
相关推荐
Gopeed:跨平台下载工具,从 HTTP 到磁力链接一个客户端全搞定
Gopeed:跨平台下载工具,从 HTTP 到磁力链接一个客户端全搞定 Gopeed 是一款用 Go 和 Flutter 构建的跨平台下载工具,开源免费,一个客
科研高性能计算Dopamine论文复现指南:从Nature DQN到Rainbow
Dopamine论文复现指南:从Nature DQN到Rainbow 你是否还在为复现强化学习经典论文而烦恼?本文将带你使用Dopamine框架,从零开始实现从
强化学习机器学习深度学习S4实验复现指南:如何重现论文中的关键结果
S4实验复现指南:如何重现论文中的关键结果 结构化状态空间序列模型(S4)作为近年来序列建模领域的重要突破,在长序列处理任务中展现出了卓越的性能。本指南将带你一
人工智能深度学习机器学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考