果蝇AI06-Mac部署实操
Mac 本地实操清单(Apple M4 / 16 GB / macOS 27)
本清单对应本机已确认环境:Apple M4(arm64)、16 GB RAM、conda(/opt/anaconda3)、git(homebrew)。
按 Step 顺序执行,每步都有验收标准。出问题时先看文末"排错"。
文章目录
- 果蝇AI06-Mac部署实操
-
- [Step 0 · 建立工作区与专用环境(10 分钟)](#Step 0 · 建立工作区与专用环境(10 分钟))
- [Step 1 · 在线打通 MaleCNS 数据查询(半小时,不下载大数据)](#Step 1 · 在线打通 MaleCNS 数据查询(半小时,不下载大数据))
- [Step 2 · 下载核心数据到本地(1.1 GB,一次即可)](#Step 2 · 下载核心数据到本地(1.1 GB,一次即可))
- [Step 3 · 本地加载连接图 + 20 行极简 LIF(第一次本地"通电")](#Step 3 · 本地加载连接图 + 20 行极简 LIF(第一次本地"通电"))
- [Step 4 · 跑通学术界标准实现:Shiu 模型(Brian2,FlyWire 雌性数据)](#Step 4 · 跑通学术界标准实现:Shiu 模型(Brian2,FlyWire 雌性数据))
- [Step 5(推荐)· Apple Silicon 加速路线:MLX 移植版(含 MaleCNS 数据包)](#Step 5(推荐)· Apple Silicon 加速路线:MLX 移植版(含 MaleCNS 数据包))
- [Step 6 · 把大脑接进任务(参考 fly-cartpole 模式)](#Step 6 · 把大脑接进任务(参考 fly-cartpole 模式))
- 磁盘/内存预算
- 排错速查
- 引用义务(发布任何结果时)

Step 0 · 建立工作区与专用环境(10 分钟)
bash
mkdir -p ~/flyai && cd ~/flyai
conda create -n flyai python=3.11.4 -y
conda activate flyai
pip install numpy pandas pyarrow matplotlib jupyter scipy
✅ 验收:python -c "import numpy, pandas, pyarrow; print('ok')" 无报错。
Step 1 · 在线打通 MaleCNS 数据查询(半小时,不下载大数据)
- 打开 https://neuprint.janelia.org → 右上角注册/登录(可用 Google 账号)→ Account 页面复制 API token。
- 安装客户端并查询:
bash
pip install neuprint-python
python
# query_malecns.py ------ 第一次"摸到"雄性果蝇大脑
from neuprint import Client, fetch_neurons, fetch_adjacencies
token = "把你的token粘贴到这里"
c = Client("https://neuprint.janelia.org", dataset="male-cns:v1.0", token=token)
# 1) 拉取一个下行神经元类型的注释与神经毡分布
neurons, roi_counts = fetch_neurons("DNge104")
print(neurons.head())
# 2) 拉取它的上游/下游连接
outgoing, _ = fetch_adjacencies("DNge104", None) # 它 → 谁
incoming, _ = fetch_adjacencies(None, "DNge104") # 谁 → 它
print(f"outgoing partners: {len(outgoing)}, incoming partners: {len(incoming)}")
bash
python query_malecns.py
✅ 验收:打印出 DNge104 的注释表和连接计数。
➕ 进阶(形态可视化):pip install "navis[all]",按官网 Download 页示例 fetch_skeletons(NeuronCriteria(type="DNge104")) 画骨架图。
Step 2 · 下载核心数据到本地(1.1 GB,一次即可)
官网下载页给出的对象存储路径(gs:// 前缀可换成 https://storage.googleapis.com/):
bash
mkdir -p ~/flyai/data && cd ~/flyai/data
BASE=https://storage.googleapis.com/flyem-male-cns/v1.0/connectome-data/flat-connectome
# 完整连接图(必需)
curl -L -O $BASE/connectome-weights-male-cns-v1.0-minconf-0.5.feather # 1.1 GB
# 神经元注释(必需)
curl -L -O $BASE/body-annotations-male-cns-v1.0-minconf-0.5.feather # 13 MB
# 递质预测(建议)
curl -L -O $BASE/body-neurotransmitters-male-cns-v1.0.feather # 42 MB
⚠️ 若 URL 失效(对象存储路径偶有调整),回到官方下载页 https://male-cns.janelia.org/download/ 复制最新链接,或使用
gcloud storage cp gs://flyem-male-cns/v1.0/connectome-data/flat-connectome/...。
✅ 验收:ls -lh 显示三个 feather 文件且大小与上表一致。
Step 3 · 本地加载连接图 + 20 行极简 LIF(第一次本地"通电")
python
# first_lif.py ------ 验证本地全脑仿真的最小原型
import numpy as np, pandas as pd
import scipy.sparse as sp
data_dir = "~/flyai/data"
W_df = pd.read_feather(f"{data_dir}/connectome-weights-male-cns-v1.0-minconf-0.5.feather")
ann = pd.read_feather(f"{data_dir}/body-annotations-male-cns-v1.0-minconf-0.5.feather")
print(f"突触行数: {len(W_df):,}, 神经元注释数: {len(ann):,}")
# ① 构建 突触前→突触后 的稀疏权重矩阵(线路,永不训练)
ids = np.unique(np.concatenate([W_df["body_pre"].values, W_df["body_post"].values]))
idx = {b: i for i, b in enumerate(ids)}
N = len(ids)
rows = W_df["body_pre"].map(idx).values
cols = W_df["body_post"].map(idx).values
W = sp.csr_matrix((W_df["weight"].values.astype(np.float32), (rows, cols)), shape=(N, N))
print(f"神经元 {N:,},稀疏度 {W.nnz / (N*N) * 100:.4f}%")
# ② 最小 LIF:膜电位衰减 + 阈值发放 + 稀疏传导
v = np.zeros(N, dtype=np.float32); spike = np.zeros(N, dtype=bool)
REST, THRESH, DECAY, SCALE = 0.0, 1.0, 0.85, 0.01
for t in range(50):
drive = np.zeros(N, dtype=np.float32)
if t < 5: # 把前 5 步当作"给一组感觉神经元通电"(示例:随机 100 个,正式实验按注释表选真实类型)
drive[np.random.choice(N, 100, replace=False)] = 5.0
v = v * DECAY + drive + (W.T @ spike.astype(np.float32)) * SCALE # 上游脉冲流入
spike = v > THRESH
v[spike] = REST
if t % 5 == 0: print(f"t={t:02d} 活跃神经元: {spike.sum()}")
✅ 验收:能看到刺激后活动沿连接图扩散(活跃数先升后稳定/回落)。
📌 这 20 行就是所有开源"果蝇数字脑"的共同内核;跑通它,你就完成了"部署"的本质。
Step 4 · 跑通学术界标准实现:Shiu 模型(Brian2,FlyWire 雌性数据)
目的:对照"教科书实现",校准你的动力学直觉。注意这是雌性 FlyWire 数据,与 Step 2 的 MaleCNS 不是一套。
bash
cd ~/flyai && git clone https://github.com/philshiu/Drosophila_brain_model.git
cd Drosophila_brain_model
conda env create -f environment.yml
conda activate <环境名见yml>
jupyter lab # 打开 example.ipynb 逐步运行
要点:
- v783 公开版需按 README 修改 config 字典(
Completeness_783.csv/Connectivity_783.parquet,从 FlyWire Codex 官方下载页获取)。 - 务必按 Brian2 官方文档配置 C++ 代码生成(性能差一个量级)。
- 本机 CPU 多核够用;
n_proc: -1用满所有核。
✅ 验收:能对指定 FlyWire ID 做激活/沉默,输出脉冲栅格图。
Step 5(推荐)· Apple Silicon 加速路线:MLX 移植版(含 MaleCNS 数据包)
bash
cd ~/flyai && git clone https://github.com/Kisame76/drosophila-brain-mlx.git
# 按该仓库 README 安装 mlx 及依赖(Apple Silicon 专用)
# 亮点:与 Brian2 参考实现做过对齐验证;自带度保持重连对照实验;upstream 兼容 run_exp 输出
备选:seohyunjun/mps-malecns-model(PyTorch MPS 后端原生跑 MaleCNS,含数据校验、按名刺激、3D 活动报告)。
✅ 验收:同一刺激条件下,MLX 版与 Step 4 的 Brian2 版输出趋势一致。
Step 6 · 把大脑接进任务(参考 fly-cartpole 模式)
git clone https://github.com/Curt-Park/fly-cartpole精读:MaleCNS 5,459 神经元飞行稳定回路 → CartPole,只调 5 个输入增益(275.6 → 499.9 步)。- 照抄其结构,把任务换成你想要的(Dino / Pong / 自定义)。
- 训练读出用最简单的先跑通:逻辑回归 / CEM,再上 REINFORCE/PPO。
- 每个实验强制带对照:随机重连图、打乱突触、MLP 基线。
进阶身体(可选):
pip install flygym(FlyGym 2.x,2026-03 新 API,M4 CPU 约实时 2 倍速;文档 https://neuromechfly.org;旧版已迁flygym-gymnasium)pip install git+https://github.com/TuragaLab/flybody.git(官方 RL 任务,python=3.10 conda 环境)
磁盘/内存预算
| 内容 | 大小 | 必要性 |
|---|---|---|
| 代码仓库(4-5 个) | < 2 GB | ✅ |
| MaleCNS 核心三件(Step 2) | ≈ 1.2 GB | ✅ |
| FlyWire v783 连接表(Shiu 用) | 约 2-4 GB | Step 4 时 |
| SWC 骨架 / 大表(syn-points 等) | 7-13 GB / 数百 TB | ❌ 别下 |
| 合计合理预算 | < 20 GB |
排错速查
| 症状 | 处理 |
|---|---|
| feather 读取报 schema 错 | 升级 pyarrow;确认文件下载完整(对比官网标注大小) |
| neuprint 401/403 | token 过期或未登录;重新在 neuPrint Account 页生成 |
| Brian2 编译失败 | 确认 Xcode Command Line Tools:xcode-select --install;按 Brian2 文档配 C++ 生成 |
| 内存吃紧 | 用 scipy.sparse 而非 dense;只加载 connectome-weights,别碰 syn-points(12.7 GB) |
| 分不清数据集 | 每个脚本头部写注释:# dataset: male-cns:v1.0 (雄性, 脑+VNC) 或 # dataset: fafb:v783 (雌性, 仅脑) |
引用义务(发布任何结果时)
- 数据:MaleCNS v1.0,CC-BY ------ 署名 FlyEM / HHMI Janelia、University of Cambridge、MRC LMB、Google Research;引用 Berg et al., Cell (2026)。
- 模型:沿用 Shiu et al. 2024 / 各开源仓库原许可证(多数 MIT/Apache,逐仓库确认)。