网络结构描述文件(IR)#

作者: Shawn & MamieZhu

网络结构描述文件(IR)文件中包含了模型的神经元簇、突触、仿真控制参数等信息,可以直接用于 Lynxi 神经形态芯片的部署。 IR文件使用 JSON 文件格式,该文件包括以下部分:

  1. population

这是一个包含所有定义神经元簇的列表 ([ ]), 支持多个神经元簇的定义。 每个单独的神经元簇都以字典格式({ })存在。 有关详细内容,请参阅 population

  1. projection

这是一个包含所有定义的突触连接的列表([ ]),其中每个突触连接都以字典格式({ })存在。 有关详细内容,请参阅 projection

  1. simulation

这是一个仿真控制参数的字典({ }),其中每个元素为键值对的方式存在。有关详细内容,请参阅 simulation

  1. 其它字段

这是一个包含网络统计信息的字典({ }),有关详细内容,请参阅 其它字段

population#

这是一个单一神经元簇的字典,其中包括参数字典,神经元的数量,神经元簇的名称,神经元簇的类名,神经元的索引等信息。JSON示例如下:

{
    "params": {
        "I_e": 500.0,
        "V_reset": -70.0,
        "V_th": -55.0,
        "tau_syn_ex": 2.0,
        "E_L": -70.0,
        "C_m": 250.0,
        "tau_m": 10.0,
        "V_m": -70.0,
        "tau_syn_in": 2.0
    },
    "name": "ExpLIF_0",
    "label": "ExpLIF_0",
    "neuron_number": 1,
    "pop_id": 0,
    "neuron_index": [
        1,
        1
    ],
    "pop_E/I_rate": 4,
    "E/I_type": "E",
    "neuron_type": "iaf_psc_exp",
    "rank_id": 0
}

下面的表格中解释了这些参数:

参数名

参数类型

描述

params

Dictionary,可选

默认为空字典。

name

string,必须

神经元簇类型, 默认值是类型值与下划线后跟一个数字的连接,例如 ExpLIF_0。

label

string,可选

神经元簇的显示名称。

neuron_number

int,必须

神经元数量, neuron_number = endNeuronID - startNeuronID + 1。

pop_id

int,必须

神经元簇的索引, >=0。

neuron_index

[startNeuronID, endNeuronID]

神经元在簇中的索引, startNeuronID >= 1, endNeuronID >= startNeuronID。

rank_id

int,必须

进程 id, >=0, 默认值是 0。

pop_E/I_rate

可选

未使用。

E/I_type

可选

未使用。

常用的随机分布包括正态分布、均匀分布和修剪正态分布。

正态分布:

{
  "distribution": "normal",
  "mean": 0.0,
  "std": 1.0
}

均匀分布:

{
  "distribution": "uniform",
  "min": 0.0,
  "max": 1.0
}

修剪正态分布:

{
  "distribution": "normal_clipped",
  "mean": 0.0,
  "std": 1.0,
  "max": 2.0,
  "min": 0.1
}

记录神经元簇#

支持 spike_recordermultimeterweight_recorder , 具有与神经元 JSON 结构相同的结构,但具有不同的 paramsneuron_type

脉冲记录器:

{
    "neuron_index": [
        800001,
        800001
    ],
    "params": {
        "label": "my_spike",
        "record_to": "ascii",
        "origin": 0.0,
        "start": 0.0,
        "stop": 3.40282e+38
    },
    "neuron_number": 1,
    "neuron_type": "spike_recorder",
    "pop_id": 3,
    "rank_id": 0
}

膜电位记录器:

{
    "neuron_index": [
        800001,
        800001
    ],
    "params": {
        "label": "my_multi",
        "record_to": "ascii",
        "record_from": ["V_m"],
        "interval": 1.0,
        "origin": 0.0,
        "start": 0.0,
        "stop": 3.40282e+38
    },
    "neuron_number": 1,
    "neuron_type": "multimeter",
    "pop_id": 3,
    "rank_id": 0
}

权重记录器:

{
    "neuron_index": [
        30003,
        30003
    ],
    "params": {
        "label": "weight_recorder",
        "record_to": "ascii",
        "start": 0.0,
        "stop": 10000.0
    },
    "neuron_number": 1,
    "neuron_type": "weight_recorder",
    "pop_id": 12,
    "rank_id": 0
}

生成器神经元簇#

支持 poisson_generatordc_generatorspike_generator, 具有与神经元 JSON 结构相同的结构,但具有不同的 paramsneuron_type

泊松生成器:

{
    "neuron_index": [
        800001,
        800001
    ],
    "params": {
        "rate":1000.0,
        "origin": 0.0,
        "start": 0.0,
        "stop": 3.40282e+38
    },
    "neuron_number": 1,
    "neuron_type": "poisson_generator",
    "pop_id": 5,
    "rank_id": 0
}

poisson_generator 的参数如下表所示:

参数

类型

描述

rate

float,必须

泊松源发射率(脉冲/秒),rate >= 0

origin

float,可选

默认值为0.0

start

float,可选

泊松过程的开始时间,默认值为0.0

stop

float,可选

泊松过程的结束时间,默认值为inf

DC生成器:

{
    "neuron_index": [
        800001,
        800001
    ],
    "params": {
        "amplitude": 100.0,
        "origin": 0.0,
        "start": 0.0,
        "stop": 3.40282e+38
    },
    "neuron_number": 1,
    "neuron_type": "dc_generator",
    "pop_id": 5,
    "rank_id": 0
}

dc_generator 的参数如下表所示:

参数

类型

描述

amplitude

float,必须

电流的幅值(pA),必须大于等于0

origin

float,可选

默认值为0.0

start

float,可选

泊松过程的起始时间,默认值为0.0

stop

float,可选

泊松过程的停止时间,默认值为inf

脉冲生成器:

{
    "neuron_index": [
        800001,
        800001
    ],
    "params": {
        "spike_times": [0.2, 0.3, 1.0, 2.0],
        "origin": 0.0,
        "start": 0.0,
        "stop": 3.40282e+38
    },
    "neuron_number": 1,
    "neuron_type": "spike_generator",
    "pop_id": 5,
    "rank_id": 0
}

spike_generator 的参数如下表所示:

参数

类型

描述

spike_times

list,必须

尖峰触发时间, spike_times[i] >= resolution

origin

float,可选

默认值为 0.0

start

float,可选

泊松开始时间,默认值为 0.0

stop

float,可选

泊松停止时间,默认值为 inf

projection#

该结构以字典格式存储了多个神经元簇之间突触连接的配置信息。一个单一的突触字典示例如下:

"2-0": {
    "rule": "fixed_total_number",
    "connNum": "100",
    "synaptic_type": "static_synapse",
    "weight": {
        "distribution": "normal",
        "max": 2.0,
        "min": 1.0
    },
    "delay": 0.2,
    "synapse_E/I_rate": [4, 2, 1],
    "E/I_balance": true
}

参数如下表所示:

参数

类型

描述

rule

string,必须

连接规则,包括固定总数、全对全、一对一、固定入度、固定出度

connNum

int,可选

当规则为固定总数、固定入度和固定出度时,必须设置 connNum

synaptic_type

float,可选

突触类型,默认为静态突触

weight

float,可选

突触权重,支持分布和常量

delay

float,可选

突触延迟,支持分布和常量

synapse_E/I_rate

list,可选

未使用

E/I_balance

bool,可选

未使用

连接规则参数如下表所示:

参数

类型

描述

fixed_total_number

string

固定连接数,必须设置 connNum,connNum > 0

all_to_all

string

全连接,连接数为源神经元簇数量 * 目标神经元簇数量

one_to_one

string

一对一连接,源神经元簇数量应等于目标神经元簇数量

fixed_indegree

string

固定入度连接,必须设置 connNum,connNum > 0

fixed_outdegree

string

固定出度连接,必须设置 connNum,connNum > 0

simulation#

包含仿真运行时的配置信息,表示为一个字典,其中包含一个主要的参数 sim_time ,表示以毫秒为单位的模拟时间。JSON 示例如下:

"simulation": {
    "sim": false,
    "sim_time": 1000.0,
    "resolution": 0.1,
    "rng_type": "mt19937_64",
    "rng_seed": 55,
    "local_num_threads": 4,
    "print_time": false,
    "data_path": "./",
    "com_type": "fp16",
    "neuronNum_per_chip": 1.0,
    "overwrite_files": true
}

参数如下表所示:

参数

类型

描述

sim

bool,可选

是否模拟使用 NEST golden

sim_time

float,可选

如果 sim 参数为 true,则 sim_time 必须大于等于0

resolution

bool,必须

默认值为 0.1

rng_type

string,必须

随机类型,默认为 “mt19937_64”

rng_seed

int,必须

随机种子,默认为 123

local_num_threads

int,必须

进程中的线程数,默认为 1

print_time

bool,必须

模拟时是否打印日志

data_path

string,可选

未使用

neuronNum_per_chip

int,必须

单个芯片中的神经元数量,默认为 1800000

overwrite_files

bool,必须

是否覆盖生成的文件,默认为 true

com_type

string,必须

“double” 或 “fp16”

其它字段#

包含网络统计参数。

JSON 示例如下:

{
    "total_pops_number": 2,
    "total_neuron_numbers": 3
}

参数如下表所示:

参数

类型

描述

total_pops_number

int,可选

神经元群体的总数

total_neuron_numbers

int,可选

神经元的总数

完整网络IR示例#

{
    "version": "0.0.1",
    "population": [
        {
            "params": {
                "I_e": 500.0,
                "V_reset": -70.0,
                "V_th": -55.0,
                "tau_syn_ex": 2.0,
                "E_L": -70.0,
                "C_m": 250.0,
                "tau_m": 10.0,
                "V_m": -70.0,
                "tau_syn_in": 2.0
            },
            "name": "ExpLIF_0",
            "label": "ExpLIF_0",
            "neuron_number": 1,
            "pop_id": 0,
            "neuron_index": [
                1,
                1
            ],
            "pop_E/I_rate": 4,
            "E/I_type": "E",
            "neuron_type": "iaf_psc_exp",
            "rank_id": 0
        },
        {
            "params": {
                "rate": 1700
            },
            "name": "PoissonGenerator_0",
            "label": "PoissonGenerator_0",
            "neuron_number": 1,
            "pop_id": 1,
            "neuron_index": [
                2,
                2
            ],
            "pop_E/I_rate": 4,
            "E/I_type": "E",
            "neuron_type": "poisson_generator",
            "rank_id": 0
        }
    ],
    "projection": {
        "1-0": {
            "weight": 1000.0,
            "delay": 1.0,
            "synaptic_type": "static_synapse",
            "rule": "fixed_total_number",
            "connNum": 1
        }
    },
    "simulation": {
        "sim": false,
        "sim_time": 1000.0,
        "resolution": 0.1,
        "rng_type": "mt19937_64",
        "rng_seed": 55,
        "local_num_threads": 4,
        "print_time": false,
        "data_path": "./",
        "com_type": "fp16",
        "neuronNum_per_chip": 1800000,
        "overwrite_files": true
    },
    "total_pops_number": 2,
    "total_neuron_numbers": 2,
    "voxel_type": 1,
    "mpi_size": 1
}