ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何在fly-brain中复现Nature论文基准套件?--paper五轮实验与run-label管理完全指南

如何在fly-brain中复现Nature论文基准套件?--paper五轮实验与run-label管理完全指南
  • 科研
  • 高性能计算

【免费下载链接】fly-brain

Emulation of the Drosophila Fly brain: Brian2, Brian2CUDA, PyTorch, NEST GPU, and neuromorphic chips

项目地址:https://gitcode.com/gh_mirrors/fl/fly-brain
点击查看免费下载

想在 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_run0.1 / 1 / 10 / 100秒4 档仿真时长(March 网格)
n_run1 / 4 / 8 / 16 / 325 档独立试验数(批大小)
轮数PAPER_ROUNDS = 5同一网格重复 5 轮
默认后端cpu / gpu / pytorch / nestgpu / genn5 个主环境后端

也就是说,每个后端每轮跑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:

  1. 消毒处理:sanitize_run_label()把非法字符替换为_,保证文件系统安全;
  2. 目录分组:spike 输出落到data/results/<label>/round_XX/,每轮 120 个文件;
  3. CSV 去重键:带 label 的行以(framework, n_run, t_run, experiment, run_label, round)为键保留历史行,而不像无 label 的一次性运行那样覆盖旧行;
  4. 清单与校验:自动维护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 CPU4.1%7.1%
Brian2CUDA11.2%13.5%
PyTorch CUDA9.6%7.9%
GeNN9.3%14.2%
Brian2GeNN37.4%2.4%

原始数据见 no_io/timings.csv 与 no_io/timing_summary.csv。

七、结果校验:从 sha256 到地面真值对比

1. 校验 spike 包完整性

cd data/results/nature_2026_07 sha256sum -c checksums.sha256

2. 对比 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/comparisons

code/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

项目地址:https://gitcode.com/gh_mirrors/fl/fly-brain
点击查看免费下载

相关推荐

上一篇:Qwen-Agent 怎么把大文档切成知识库?
下一篇:实测百万文本块搜索:Memvid如何实现毫秒级语义检索?

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进