Eon Systemsのfly-brainは、ショウジョウバエ成虫の脳の配線データを使い、神経活動の伝わり方を計算するプロジェクトです。土台はFlyWireのコネクトームと、Shiuらによるleaky integrate-and-fire(LIF)モデル。任意のニューロンを刺激したり活動を止めたりして、その先の発火時刻や発火率を調べます。
面白いのは、配線図を眺めるだけでなく、「この細胞の活動を変えたら、下流はどう応答するか」を試せること。ただし、脳全体の配線を使うことと、生きたハエの働きを丸ごと再現することは別です。
配線図に、発火のルールを与える
基礎となるLIFモデルでは、入力を受けたニューロンの膜電位が変化し、閾値に達すると発火します。その影響が接続先へ伝わる、という計算を繰り返します。
READMEにある操作は、指定した頻度のポアソン入力による活性化と、対象ニューロンに出入りするシナプス接続をゼロにする抑制です。出力を見ることで、刺激に応答する細胞や、経路を遮断したときの変化を調べられます。
現在のリポジトリはFlyWire v783を使用し、元論文の図を再現するためのv630も保存しています。論文の結果と手元の計算を比べるなら、モデル名だけでなくデータの版もそろえたいところです。
GPUの速さは、何を測った時間なのか
実装にはBrian2 CPU、Brian2CUDA、PyTorch、NEST GPU、GeNN、Brian2GeNNがあります。READMEにはRTX 4070での動作確認が記されていますが、それだけで、どの条件でも実時間より速いとは判断できません。
このリポジトリは、読み込みやコンパイルなどの準備時間と、シミュレーション時間を分けて記録します。発火データのParquet出力も、シミュレーションの計測区間の外です。さらに、発火の記録・取得・出力を無効にしたno-I/O条件のデータも別に公開しています。
つまり、比較するならGPU名だけでは足りません。計算する生物学的な時間、試行数、バックエンド、記録の有無、準備時間を含めるかを合わせる必要があります。ここでは公開資料を確認しており、GPU上での速度を独自に測定したわけではありません。
環境を整えたあと、小さく比較を始めるための指定は次の形です。
python main.py --brian2-cpu --pytorch --t_run 1 --n_run 1
これは生物学的な1秒間を、各バックエンドで1試行ずつ計算する指定です。出力の比較にはcode/compare_ground_truth.pyが用意され、Brian2 CPUを基準に、活動したニューロンの重なりや発火率の相関を調べます。ここでの基準はCPU実装であり、生体の測定値そのものではありません。
再現できる範囲を、論文まで戻って読む
基礎論文は、摂食開始と触角のグルーミングに関わる回路を調べ、モデルの予測を実験と照合しています。一方で、ニューロンの形態や受容体の動態、神経調節などは扱わず、基礎発火率をゼロと仮定しています。著者らも、発火率の絶対値より、条件を変えた際の大まかな差として読む立場です。
fly-brainを試すなら、まず刺激条件を固定し、バックエンドを変えて発火の傾向と計測時間を比べる。そのうえで、得られた差がモデルの仮定の中で何を意味するかを考える。「速く動く脳」という見出しより、この順序のほうが実装を読む手がかりになります。