NEURON 혹은 NetPyNE (NEURON의 Wrapper) 에서는 Thread를 이용해 병렬화를 할 수 있다. GPU 기반에 비하면 매우 열악하긴 하지만, 아마 ODE 문제 때문에 쉽게 GPU로 전환되지 못하는 것 같고, 일부 Computation 만 GPU로 올려서 처리하는 형태로 접근하고 있는 것 같다. (CoreNEURON프로젝트: https://www.frontiersin.org/articles/10.3389/fninf.2019.00063/full)
2022년에는 NeuroGPU라고 해서 NEURON modeling을 GPU Hardware에서 돌릴 수 있게 하는 Wrapper 가 J Neurocience Methods (http://dx.doi.org/10.1016/j.jneumeth.2021.109400) 에 실리기도 했는데.. 잘 되는지는 모르겠다. 간단하게 봤을때는 우선 어느정도 수준의 Complexity에 대해서는 기존 NEURON 보다 좋았던 거 같긴 한데 추후에 해보기로 하자.
아무튼 이번에 모델을 수정하다 보니 발생한 문제가 있었다
...usable mindelay is 0 (or less than dt for fixed step method)
이런 에러가 나면서 OpenMPI가 뻗는 문제였는데, 처음에는 별 생각 없이 OpenMPI 문제인가 싶어서 (모델 수정 전에는 잘 됐고, MPI 관련된 에러가 밑에 더 나왔다.) MPI가 제대로 종료가 안되었나 생각하고 살펴봤었다.
그런데 사실상 문제는 Multithread 환경에서 Connectivity 설정에 관한 문제였다.
Stimulation을 주기 위해서 NetStim 을 VecStim으로 변경하는 과정에서 자극이 바로 들어가게 하기 위해 delay를 0 ms 으로 지정하였는데, 해당 부분이 문제되었다.
NetPyNE Wrapper에서는 NetStim을 Stimulation으로 줄수도 있고, Connection으로 줄수도 있는데, 기존에는 Stimulation으로 줬기 때문에 delay 0 ms가 문제없이 작동했는데, VecStim의 경우는 Connection으로만 줄 수 있는 상황이어서 변경하면서 문제가 발생.
해결방법은 2가지 였는데, 하나는 delay 를 최소 dt 이상으로 잡는 방법. 일반적인 connectivity 모델이었으면 이게 맞겠지만, 지금은 그럴 목적이 아니기 때문에 과감히 VecStim 을 버리고 PointProcess (IClamp)로 Stimulation Model를 각각 다 만들어주는 식으로 변경했다.
Leave a Reply