NEURON建模语言源到源编译器框架
项目描述
NMODL框架是NEURON建模语言(NMODL)的代码生成引擎。它使用现代编译器和代码生成技术设计,以
提供用于解析、分析和转换NMODL的模块化工具
提供易于使用的高级Python API
为包括CPU、GPU在内的现代计算架构生成优化代码
具有实现新模拟后端的灵活性
支持完整的NMODL规范
关于NMODL
像NEURON(https://www.neuron.yale.edu/neuron/)这样的模拟器使用NMODL作为领域特定语言(DSL)来描述广泛的膜和细胞内子模型。以下是一个在NMODL中指定的指数突触的示例
NEURON {
POINT_PROCESS ExpSyn
RANGE tau, e, i
NONSPECIFIC_CURRENT i
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(uS) = (microsiemens)
}
PARAMETER {
tau = 0.1 (ms) <1e-9,1e9>
e = 0 (mV)
}
ASSIGNED {
v (mV)
i (nA)
}
STATE {
g (uS)
}
INITIAL {
g = 0
}
BREAKPOINT {
SOLVE state METHOD cnexp
i = g*(v - e)
}
DERIVATIVE state {
g' = -g/tau
}
NET_RECEIVE(weight (uS)) {
g = g + weight
}
安装
有关从源构建NMODL的详细说明,请参阅INSTALL.rst。
尝试使用Docker使用NMODL
为了快速测试NMODL框架的分析功能,我们提供了一个docker镜像,其中包含NMODL框架Python库和功能齐全的Jupyter笔记本环境。安装docker和docker-compose后,您可以从终端拉取并运行NMODL镜像。
要直接从CLI尝试Python接口,您可以将docker镜像作为运行
docker run -it --entrypoint=/bin/sh bluebrain/nmodl
并尝试在本README后面讨论的NMODL Python API
$ python3 Python 3.6.8 (default, Apr 8 2019, 18:17:52) >>> from nmodl import dsl >>> import os >>> examples = dsl.list_examples() >>> nmodl_string = dsl.load_example(examples[-1]) ...
要尝试Jupyter笔记本,您可以下载docker compose文件并作为运行
wget "https://raw.githubusercontent.com/BlueBrain/nmodl/master/docker/docker-compose.yml"
DUID=$(id -u) DGID=$(id -g) HOSTNAME=$(hostname) docker-compose up
如果一切顺利,您应该在最后看到类似以下的状态消息
[I 09:49:53.923 NotebookApp] The Jupyter Notebook is running at: [I 09:49:53.923 NotebookApp] http://(4c8edabe52e1 or 127.0.0.1):8888/?token=a7902983bad430a11935 [I 09:49:53.923 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). To access the notebook, open this file in a browser: file:///root/.local/share/jupyter/runtime/nbserver-1-open.html Or copy and paste one of these URLs: http://(4c8edabe52e1 or 127.0.0.1):8888/?token=a7902983bad430a11935
基于上面的示例,您应该打开浏览器并导航到以下URL http://127.0.0.1:8888/?token=a7902983bad430a11935。
您可以在“examples”文件夹中打开和运行提供的所有示例笔记本。您也可以在“my_notebooks”中创建新的笔记本,这些笔记本将存储在当前工作目录的“notebooks”子文件夹中。
使用Python API
NMODL框架安装完毕后,您可以使用Python解析API加载NMOD文件
from nmodl import dsl
examples = dsl.list_examples()
nmodl_string = dsl.load_example(examples[-1])
driver = dsl.NmodlDriver()
modast = driver.parse_string(nmodl_string)
parse_file API返回输入NMOD文件的抽象语法树(AST)表示形式。可以通过将其转换为JSON形式来查看AST
>>> print (dsl.to_json(modast))
{
"Program": [
{
"NeuronBlock": [
{
"StatementBlock": [
{
"Suffix": [
{
"Name": [
{
"String": [
{
"name": "POINT_PROCESS"
}
...
JSON形式中的每个键都代表AST中的一个节点。您还可以使用可视化API查看AST的详细信息
from nmodl import ast ast.view(modast)
这将打开网页浏览器中的AST视图
NMODL框架中的AST可视化
中心节点Program代表整个MOD文件,其每个子节点代表输入NMODL文件中的块。请注意,如果您正在使用Docker镜像,这需要X转发。
一旦创建AST,就可以使用现有的访问者进行各种分析/优化。也可以轻松使用Python访问者API编写自己的自定义访问者。有关详细信息,请参阅Python API教程。
NMODL框架还允许我们将AST表示形式转换回NMODL形式
>>> print (dsl.to_nmodl(modast))
NEURON {
POINT_PROCESS ExpSyn
RANGE tau, e, i
NONSPECIFIC_CURRENT i
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(uS) = (microsiemens)
}
PARAMETER {
tau = 0.1 (ms) <1e-09,1000000000>
e = 0 (mV)
}
...
高级分析和代码生成
NMODL框架提供了丰富的模型内省和分析功能,使用各种访问者。以下是一个关于2015年发表在《Cell》上的大鼠新皮层柱微电路通道和突触的理论性能特性的例子(见此处)
NMODL框架的性能结果
要了解如何编写自己的内省和分析工具,请参阅本教程。
一旦执行分析和优化步骤,NMODL框架就可以为现代计算架构生成优化代码,包括CPU(Intel、AMD、ARM)和GPU(NVIDIA、AMD)平台。例如,实现了C++、OpenACC和OpenMP后端,可以在命令行中选择这些后端
$ nmodl expsyn.mod sympy --analytic
要了解更多有关代码生成后端的信息,请见此处。NMODL框架提供了许多选项(用于代码生成、优化步骤和ODE求解器),可以列出如下
$ nmodl -H NMODL : Source-to-Source Code Generation Framework [version] Usage: /path/<>/nmodl [OPTIONS] file... [SUBCOMMAND] Positionals: file TEXT:FILE ... REQUIRED One or more MOD files to process Options: -h,--help Print this help message and exit -H,--help-all Print this help message including all sub-commands --verbose=info Verbose logger output (trace, debug, info, warning, error, critical, off) -o,--output TEXT=. Directory for backend code output --scratch TEXT=tmp Directory for intermediate code output --units TEXT=/path/<>/nrnunits.lib Directory of units lib file Subcommands: host HOST/CPU code backends Options: --c C/C++ backend (true) acc Accelerator code backends Options: --oacc C/C++ backend with OpenACC (false) sympy SymPy based analysis and optimizations Options: --analytic Solve ODEs using SymPy analytic integration (false) --pade Pade approximation in SymPy analytic integration (false) --cse CSE (Common Subexpression Elimination) in SymPy analytic integration (false) --conductance Add CONDUCTANCE keyword in BREAKPOINT (false) passes Analyse/Optimization passes Options: --inline Perform inlining at NMODL level (false) --unroll Perform loop unroll at NMODL level (false) --const-folding Perform constant folding at NMODL level (false) --localize Convert RANGE variables to LOCAL (false) --global-to-range Convert GLOBAL variables to RANGE (false) --localize-verbatim Convert RANGE variables to LOCAL even if verbatim block exist (false) --local-rename Rename LOCAL variable if variable of same name exist in global scope (false) --verbatim-inline Inline even if verbatim block exist (false) --verbatim-rename Rename variables in verbatim block (true) --json-ast Write AST to JSON file (false) --nmodl-ast Write AST to NMODL file (false) --json-perf Write performance statistics to JSON file (false) --show-symtab Write symbol table to stdout (false) codegen Code generation options Options: --layout TEXT:{aos,soa}=soa Memory layout for code generation --datatype TEXT:{float,double}=soa Data type for floating point variables --force Force code generation even if there is any incompatibility --only-check-compatibility Check compatibility and return without generating code --opt-ionvar-copy Optimize copies of ion variables (false)
文档
我们正在编写用户文档,您可以找到当前草稿
引用
如果您想了解更多关于NMODL框架的信息,请参阅以下论文
Pramod Kumbhar,Omar Awile,Liam Keegan,Jorge Alonso,James King,Michael Hines和Felix Schürmann。2019年。用于NEURON建模语言的优化多平台源到源编译框架。在Eprint:arXiv:1905.02241
支持/贡献
示例/基准
用于测试NMODL框架性能和解析能力的基准目前正在迁移到GitHub。这些基准将很快在以下存储库中发布
资助与致谢
本软件的开发得到了瑞士联邦理工学院(École polytechnique fédérale de Lausanne,简称EPFL)下属的蓝色大脑项目(Blue Brain Project)的资金支持,该项目由瑞士政府科技学院理事会提供。此外,开发还得到了美国国立卫生研究院(NIH)的资助,项目编号R01NS11613(耶鲁大学),以及欧盟“地平线2020”研究与创新框架计划的具体协议号785907(人脑项目SGA2)。
版权所有 © 2017-2023 蓝色大脑项目,EPFL
项目详情
nmodl_nightly-0.6.330-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 89d43a0fc2195fabf4826e4b78011486f01f6a655cddad432e69c93cde146575 |
|
MD5 | c70d1589d69fb09a4843a2294df8ee66 |
|
BLAKE2b-256 | 6ca1ef12b5a1a4f5e2b8971ebd18cd4c70f89eaaf9585730d30a0c94301f0be5 |
nmodl_nightly-0.6.330-cp312-cp312-macosx_10_15_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 62803a7bb5d0e474753dbb1826d3288c563474446cc215183bdd04b42adbd03d |
|
MD5 | 79ace1adbfcd8d24397190f037aa9c93 |
|
BLAKE2b-256 | fd738efd56b98b2fa37b4afeae5d2e0c6dc7c0283d2696843e7afd481535c501 |
nmodl_nightly-0.6.330-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7731b634f119d84ef1abf7fa78d2b7673882a464278bfb1f1a0e41e591b1cb25 |
|
MD5 | dab4f80f408be56a9d47933de9214e3a |
|
BLAKE2b-256 | c654c14ed3ec125b512bd40f00b4f6fbd92504f6d005c1caf5ad0ccf41244907 |
哈希值:nmodl_nightly-0.6.330-cp311-cp311-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1b042aa2f8d630574845c734b819d6108c428337de42c4b6af5ce558be0cc35e |
|
MD5 | f40bc15da05d2252080b778c8d9b2f15 |
|
BLAKE2b-256 | f488fb46eb7536e4a05740b6829dc7329def88a676c6d57890dbb654b0d4c8f4 |
哈希值:nmodl_nightly-0.6.330-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b31f06a3b01dc6feca251389f9afe96c45cad222a936be8367faeed5f65fce5f |
|
MD5 | a72465eb41d2030dbbea5aba7f3de5df |
|
BLAKE2b-256 | 7ce55a1e58f308489aa546ecade5ca52abb9806ae96326bdf70a0a327a0fb326 |
哈希值:nmodl_nightly-0.6.330-cp310-cp310-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6f785b8b650846a0c184ae8cdbf3b2923d87703654ce8d702c08cd90eca4563a |
|
MD5 | ce4543f3c3bb18858999167633e15beb |
|
BLAKE2b-256 | f3737ed358591bd21ba7bbc4b3cf6c3fe7a7898186841d3f561a636400819054 |
哈希值:nmodl_nightly-0.6.330-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fd6f3a179a3c632683ec8e200df7990ee452068ee074cce8fa1312c4d51ea424 |
|
MD5 | cf390e8e49f1615de3da971d3b781fa4 |
|
BLAKE2b-256 | abac8331310d89cb6d698f622c3b1f6bef05573564b2a8f13f5746b5e3a368b7 |
哈希值:nmodl_nightly-0.6.330-cp39-cp39-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | da5a4b43b036cac6509f74c34965139edec6bdd9acfd53453f33d91c27add031 |
|
MD5 | 6e94a02cfa912d240820c246d68ed64a |
|
BLAKE2b-256 | c6ce1bf086a13d37473c60305ba166ecf225e48c756729b8f3c95c5039a544d4 |
哈希值:nmodl_nightly-0.6.330-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf034ff3c17b3c8d81b7776b77a8aa85bab3e497619ca717cdda9d59cac4de3b |
|
MD5 | d69f50134c6afe794083caaab7ab88c9 |
|
BLAKE2b-256 | 9b38753a104fdb27443b4d416817d87f863eeb706031682eee0565272e663a85 |
哈希值:nmodl_nightly-0.6.330-cp38-cp38-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cc5612408af6111a06533c701e59355cd0e415dc505c66b908013c81bde318dc |
|
MD5 | bfbf94784536c762ece5d2719b69027d |
|
BLAKE2b-256 | 21799c85c3cd508f6b2c2953933d5d484ed90773947e8804497c55a6c4349494 |