소프트웨어 계산물리 시뮬레이션 마지막 수정: 2026-08-16 04:27:51

1. 개요[편집]

NEURON
NEURON simulation environment
개발Michael Hines · N. T. Carnevale (Yale, Duke)
기원Hines의 CABLE 프로그램 (1984)
대상형태를 가진 뉴런의 구획 모형과 그 회로망
핵심 커널Hines 소거법 — 트리 희소계를 채움 없이 O(n)
모형 기술NMODL (→ C 컴파일) · hoc · Python
기본 적분후진 오일러 (dt = 0.025 ms), 옵션으로 CN·CVODE
병렬ParallelContext (MPI) · 스레드 · CoreNEURON
배포오픈소스 · neuron.yale.edu · 모형 저장소 ModelDB

NEURON은 수상돌기와 축삭의 실제 형태를 가진 뉴런의 전기 동역학을 푸는 시뮬레이션 환경으로, 마이클 하인스와 테드 카네베일이 1980년대부터 개발해 온 이 분야의 사실상 표준 소프트웨어다. 이름은 대문자로 쓴다.

이 문서는 소프트웨어와 그 안의 수치기법을 다룬다. 무엇을 푸는지 — 즉 케이블 방정식을 등전위 구획으로 이산화한 계 — 는 구획 모형 문서가, 막전류의 생물물리는 호지킨-헉슬리 모형 문서가 담당한다.

NEURON을 이해하는 가장 빠른 방법은 “신경용 CAE 패키지”라고 생각하는 것이다. 형상(재구성된 수상돌기 나무)을 읽어 들여 격자(구획)를 자르고, 재료 물성(채널 밀도)을 부여하고, 하중(전류 주입·시냅스 입력)을 걸고, 강성 희소계를 시간 전진시키고, 결과를 뽑는다. 전산유체역학 코드와 다른 점은 딱 두 가지다. 격자가 항상 트리라서 선형 해법이 O(n)O(n) 에 끝난다는 것, 그리고 재료 모델을 사용자가 도메인 언어로 새로 써서 컴파일해 붙인다는 것.

2. 하인스 소거법 — 트리라서 공짜[편집]

암시적 시간전진을 하면 매 스텝 AVn+1=b\mathbf{A}\mathbf{V}^{n+1}=\mathbf{b} 를 풀어야 한다. 뉴런의 형태는 트리이므로 모든 노드는 부모를 정확히 하나만 가지고, 구획 번호를 부모가 자식보다 앞서도록 매기면 잎에서 뿌리로 소거할 때 채움(fill-in)이 원리적으로 발생하지 않는다. 저장량과 연산량이 둘 다 O(n)O(n) 이고 상수까지 토머스 알고리즘에 가깝다. 자세한 유도는 구획 모형 문서 참고.

여기서 한 가지 흔한 오해를 짚고 갈 필요가 있다. 이 O(n)O(n)행렬이 대칭이라서가 아니라 그래프가 트리(루프가 없어서)라서 나온다. 축방향 결합 1/Rjk=1/Rkj1/R_{jk}=1/R_{kj} 자체는 대칭이지만, NEURON이 실제로 조립하는 행렬은 각 행을 구획 면적·정전용량으로 스케일하기 때문에 수치적으로 대칭이 아니다. 그럼에도 채움이 안 생기는 것은 순전히 희소 패턴의 문제다. 뒤집어 말하면 트리를 깨는 순간 특권이 사라진다 — 갭 정션, 세포외 전위장 동시 해석, 루프가 있는 회로가 그 예이며, 이때는 일반 희소행렬 해법으로 내려간다.

3. 시간 적분 — 무엇이 기본값이고 왜 그런가[편집]

구획 하나에 호지킨-헉슬리형 채널을 걸면 상태변수가 V,m,h,nV, m, h, n 넷이고, 게이트 시상수(0.1 ms급)와 막 시상수(10 ms급)가 두 자릿수 벌어져 계는 전형적인 강성 방정식이다. NEURON의 처방은 연산자 분리다.

  • 전압은 암시적으로 푼다. secondorder = 0 이 기본값이고 이때는 후진 오일러다. 무조건 안정하고, 급한 전위 변화에서 링잉이 없다.
  • 게이팅 변수는 전압을 고정하면 x=(xx)/τxx' = (x_\infty - x)/\tau_x 라는 선형 방정식이므로 지수 전파자로 정확히 푼다. NMODL의 cnexp 적분법이 이것이고, 지수 적분기의 신경판이다.
  • 2차 정확도가 필요하면 secondorder = 2 로 크랭크-니콜슨을 켠다. 하인스의 설계는 전압을 정수 스텝, 게이팅 변수를 반 스텝에 두는 엇갈림 배치여서, 비선형 반복 없이 크랭크-니콜슨법급 2차를 얻는다.

기본값이 1차인 것이 이상해 보이지만 이유가 있다. 크랭크-니콜슨은 Δt\Delta t 가 시상수보다 클 때 감쇠 없이 부호를 뒤집는 성질(A-안정이지만 L-안정이 아님)이 있어, 스파이크 상승기처럼 급한 구간에서 진동을 뱉을 수 있다. “안전한 1차가 기본, 2차는 사용자가 켠다” 는 것이 이 바닥의 보수적 관례다.1

가변 스텝도 있다. cvode.active(1) 이면 SUNDIALS의 CVODE(BDF + 뉴턴)로 갈아타 국소 오차 기준으로 스텝을 조절하고, 스파이크가 없는 구간을 크게 건너뛴다. 더 나아가 국소 가변 스텝(use_local_dt)은 세포마다 자기 시각을 따로 갖게 해서, 지금 발화 중인 세포만 잘게 밟고 조용한 세포는 놀게 만든다. 대가는 명확하다 — 모든 불연속(시냅스 이벤트, 전류 계단)을 이벤트로 미리 알려야 하고, 그러지 않으면 적분기가 불연속을 “급격한 변화”로 오인해 스텝을 무한정 줄이며 기어간다. 가변 시간 스텝 적분기를 하이브리드계에 붙일 때 늘 나오는 문제다.

4. 모형 기술 — 섹션, 세그먼트, 범위 변수[편집]

NEURON의 자료 모델은 CAE 도구와 미묘하게 다르고, 이게 처음 배울 때 제일 혼란스러운 부분이다.

  • 섹션(section)은 분지가 없는 케이블 한 토막이다. 형태의 논리적 단위이며 L(길이), diam(지름), Ra(축저항률), cm(비막용량)을 갖는다.
  • 세그먼트(segment)는 섹션을 nseg 개로 자른 계산 단위, 즉 실제 구획이다. 격자는 세그먼트고, 사용자가 다루는 것은 섹션이다.
  • 범위 변수(range variable)는 섹션을 따라 위치에 의존하는 양으로, 정규화 좌표 0x10 \le x \le 1 로 접근한다. soma.v(0.5) 는 체세포 한가운데의 막전위다.

이 분리 덕분에 형태를 건드리지 않고 격자만 다시 자르는 일이 한 줄로 된다. nseg 를 바꾸면 같은 형태 위에서 이산화만 촘촘해지므로 메시 독립성 연구를 그대로 할 수 있다. 자동 세분 규칙인 d_lambda 는 100 Hz 교류의 감쇠 길이를 기준으로 구획 수를 홀수로 정해 준다(자세한 근거는 구획 모형).

형태 자체는 대개 직접 그리지 않고 받아온다. NeuroMorpho.Org의 SWC 파일이나 Neurolucida 추적 파일을 Import3D 도구가 읽어 섹션 트리로 변환한다. 수천 개 재구성이 공개돼 있어서, 오늘날 “형태를 구한다”는 것은 대체로 “내려받는다”는 뜻이다.

5. NMODL — 채널을 선언하면 C가 나온다[편집]

NEURON의 진짜 설계적 성취는 여기 있다. 막 메커니즘을 하드코딩하지 않고, NMODL(NEURON Model Description Language)이라는 전용 언어로 선언하면 번역기가 C 코드를 뽑고 그것을 컴파일해 시뮬레이터에 링크한다(nrnivmodl). 사용자는 미분방정식을 수학 표기에 가깝게 적을 뿐이고, 야코비안 기여·전류 합산·이온 농도 부기·적분 루틴 호출은 전부 생성된다.

NEURON { SUFFIX kdr  USEION k READ ek WRITE ik  RANGE gbar }
STATE  { n }
BREAKPOINT { SOLVE states METHOD cnexp
             ik = gbar * n^4 * (v - ek) }
DERIVATIVE states { n' = (ninf(v) - n) / ntau(v) }

핵심은 SOLVE ... METHOD 한 줄이다. 여기서 무엇을 고르느냐로 수치적 성격이 결정된다.

METHOD대상성격
cnexpx=(xx)/τx' = (x_\infty - x)/\tau지수 해를 그대로 씀. 정확·무조건 안정
derivimplicit상태끼리 얽힌 비선형 ODE완전 암시적 + 뉴턴 반복. 강성에 강함
sparseKINETIC 블록(상태 전이 도식)반응 도식을 희소 선형계로 조립해 풂

KINETIC 블록이 있다는 것은 게이팅을 m3hm^3h 같은 곱이 아니라 마르코프 상태 사슬로 쓸 수 있다는 뜻이고, 약물의 상태 의존 결합 같은 것을 다루려면 사실상 필수다. TABLE 선언을 붙이면 α,β\alpha,\beta 를 전압 룩업 테이블로 미리 계산해 두는데, 프로파일러를 켜 보면 병목이 미분방정식이 아니라 exp() 인 경우가 흔하기 때문이다.

밀도 메커니즘(SUFFIX)과 점 과정(POINT_PROCESS)이 구분된다는 점도 중요하다. 전자는 단위 면적당 전류(mA/cm²), 후자는 절대 전류(nA)를 쓴다. 시냅스·전극은 점 과정이고, 이온 채널은 밀도다. 단위 혼동이 이 도구에서 가장 자주 나오는 사고이므로 modlunit 로 차원 검사를 돌리는 습관이 필요하다.

이 구조가 왜 중요한지는 반례를 생각하면 분명해진다. 채널 종류마다 솔버 소스를 고쳐야 했다면 이 분야는 진작에 멈췄을 것이다. 모형 기술과 실행 엔진을 분리해 둔 덕분에 논문에 새 채널이 하나 나오면 .mod 파일 하나가 추가될 뿐이고, 그 파일이 그대로 유통된다.2

6. 이벤트 전달계와 병렬화[편집]

스파이크는 미분방정식이 아니라 이벤트다. NEURON은 우선순위 큐 기반의 이벤트 전달계를 따로 두고, NetCon(역치 감지 + 지연 + 가중치)이 발신 세포와 수신 시냅스를 잇는다. 수신 쪽 NMODL의 NET_RECEIVE 블록이 이벤트를 받아 상태를 점프시킨다. 이 구조 덕분에 이벤트 구동 시뮬레이션과 연속 적분이 한 엔진 안에서 공존하고, 아예 미분방정식이 없는 ARTIFICIAL_CELL(적분-발화류)까지 같은 큐에 올릴 수 있다.

망 병렬화의 열쇠는 최소 시냅스 지연 dmind_{\min} 이다. 어떤 스파이크도 발생 후 dmind_{\min} 전에는 목적지에 영향을 못 주므로 프로세스들은 그 구간 동안 통신 없이 독립 전진한 뒤 한 번만 스파이크를 교환하면 된다. ParallelContext 가 gid로 세포를 프로세스에 배정하고 MPI 위에서 이 교환을 처리한다. 자연스러운 병렬 단위가 구획이 아니라 세포라는 점이 결정적인데, 하인스 소거 자체는 순차적 의존을 갖기 때문이다. 그래서 큰 망은 잘 확장되고 초정밀 단일 세포는 잘 안 된다.3 세포 하나를 여러 프로세스에 쪼개는 multisplit 기법이 따로 존재하는 이유다. 세포마다 비용이 크게 다르면 부하 분산이 곧바로 문제가 되고, gid 라운드로빈 배정만으로는 부족해진다.

CoreNEURON은 시뮬레이션 단계만 떼어내 다시 쓴 계산 엔진이다. 모형 구축은 NEURON이 하고, 자료구조를 배열 구조(SoA)로 재배치해 넘긴 뒤 실행만 CoreNEURON이 맡는다. 메모리 사용량이 크게 줄고 벡터화·GPU 컴퓨팅이 가능해진다. 대뇌 피질 마이크로회로 규모의 상세 모형이 슈퍼컴퓨터에서 돌아가는 것은 이 분리 덕분이다.

7. 생태계와 대안[편집]

NEURON 위에 얹힌 층이 꽤 두껍다. Python 인터페이스(from neuron import h)가 표준이 된 뒤로 NetPyNE(망 구축 프런트엔드), BluePyOpt(채널 전도도 최적설계식 적합), LFPy(세포외 전위 계산) 같은 도구가 붙었고, 발표된 모형은 대체로 ModelDB에 코드째 올라간다. 논문의 그림을 그대로 재현할 수 있다는 점에서 이 분야의 재현성 문화는 의외로 건강한 편이다.

역할 분담은 대략 이렇게 정리된다.

  • NEURON — 형태를 가진 세포와 중소 규모 회로. 채널 수준의 질문에 답할 때.
  • GENESIS / MOOSE — 같은 영역의 오랜 경쟁자. 객체 조립식 설계 계보.
  • Arbor — 같은 문제를 매니코어·GPU 시대에 맞게 다시 쓴 후발 주자. 세포 그룹 단위 배치와 부하 분산이 처음부터 설계에 들어가 있다.
  • NEST — 형태를 버린 점뉴런 수백만 개짜리 망 전용. 스파이킹 신경망의 주력.
  • Brian2 — 방정식을 문자열로 적으면 코드를 생성해 준다. 새 모형을 하루 만에 시험하는 데 압도적.

“형태가 답에 영향을 주는가”가 갈림길이다. 수상돌기 필터링·국소 스파이크·시냅스 가소성의 위치 의존성이 주제라면 NEURON이고, 그렇지 않다면 점뉴런 도구가 두세 자릿수 싸다.

8. 현업의 함정[편집]

  • celsius 기본값이 6.3 °C다. 오징어 축삭 실험 온도가 그대로 남아 있는 것으로, 포유류 모형을 돌리면서 이걸 안 바꾸면 q10q_{10} 보정이 통째로 틀어진다. 발화 패턴이 논문과 다르면 여기부터 본다.
  • 단위 체계가 혼종이다. Ra 는 Ω·cm, cm 은 µF/cm², L·diam 은 µm, 밀도 전류는 mA/cm², 점 과정 전류는 nA. 각각은 그 분야의 관례지만 한 모형 안에 섞여 있어서, 형태 파일 단위를 mm로 읽는 사고가 주기적으로 재발한다.
  • 초기화가 정상상태를 보장하지 않는다. finitialize(v_init) 는 각 메커니즘의 INITIAL 블록을 부를 뿐이라, 느린 상태변수가 들어 있으면 시작 직후 수백 ms 동안 표류(drift)한다. 자극을 주기 전에 충분히 오래 돌려 안정시키는 것이 국룰.
  • 결과가 도구마다 미묘하게 다르다. 원인은 대개 물리가 아니라 스파이크 시각 반올림, 시냅스 지연의 격자 정렬, 난수 스트림 배정이다. 검증 및 확인이 실제로 필요한 지점이 정확히 여기다.
  • cvode 를 켜면 빨라진다는 보장이 없다. 시냅스 이벤트가 촘촘한 대규모 망에서는 이벤트마다 적분기가 재시작되어 고정 스텝보다 느려지는 일이 흔하다. 가변 스텝이 이기는 곳은 세포 수가 적고 발화가 드문 문제다.

9. 관련 문서[편집]

10. Footnotes[편집]

  1. 이 보수성은 CFD가 정상상태 계산에서 1차 상류로 먼저 수렴시키고 고차로 갈아타는 것과 정확히 같은 정신이다. 분야가 달라도 “일단 안 터지는 것부터”라는 결론은 신기할 만큼 똑같이 나온다.

  2. CFD로 치면 난류 모델을 .mod 파일로 써서 던져 넣는 것과 같다. 사용자 정의 함수(UDF)를 컴파일해 붙이는 상용 코드의 관행과 발상이 같은데, NEURON 쪽은 그게 예외가 아니라 기본 경로라는 점이 다르다. 내장 채널조차 같은 언어로 쓰여 있다.

  3. “형태를 두 배로 정밀하게 넣었는데 코어를 두 배로 줘도 왜 안 빨라지죠?”의 답이 여기 있다. 세포 하나의 소거는 본질적으로 순차적이다. 이걸 모르고 단일 대형 세포 모형에 노드를 잔뜩 붙였다가 청구서만 두 배로 받는 일이 실제로 일어난다.