aihwkit.simulator.presets.devices module

Device configurations presets for resistive processing units.

class aihwkit.simulator.presets.devices.CapacitorPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.005, dw_min_dtod=0.1, dw_min_std=0.3, enforce_consistency=True, lifetime=1000000.0, lifetime_dtod=0.3, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.06, w_max=1.0, w_max_dtod=0.07, w_min=-1.0, w_min_dtod=0.07, gamma_up=0.05, gamma_down=0.05, gamma_up_dtod=0.01, gamma_down_dtod=0.01, allow_increasing=False, mean_bound_reference=True, mult_noise=False, write_noise_std=0.0)

Bases: aihwkit.simulator.configs.devices.LinearStepDevice

Preset configuration for a single capacitor resistive processing unit based on linear step device.

Fit of the model LinearStepDevice to Li & al., VLSI, 2018

Here some capacitor leakage is assumed as well.

Caution

Capacitor leakage is applied only once per mini-batch and this the size of the leakage has to be adapted by the user as it depends not only on the size of the leak of the physical capacitor but also on the assumptions how much physical time is required for a full forward and backward cycle through the network (which depends on whether one assumes pipelining or not).

The parameter lifetime needs to be adjusted accordingly.

allow_increasing = False
as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.005
dw_min_dtod: float = 0.1
dw_min_std: float = 0.3
enforce_consistency = True
gamma_down: float = 0.05
gamma_down_dtod: float = 0.01
gamma_up: float = 0.05
gamma_up_dtod: float = 0.01
lifetime: float = 1000000.0
lifetime_dtod: float = 0.3
mean_bound_reference: bool = True
mult_noise: bool = False
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.06
w_max: float = 1.0
w_max_dtod: float = 0.07
w_min: float = -1.0
w_min_dtod: float = 0.07
write_noise_std: float = 0.0
class aihwkit.simulator.presets.devices.EcRamMOPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.00028214, dw_min_dtod=0.1, dw_min_std=2.0, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.01, w_max=1.1714, w_max_dtod=0.05, w_min=-0.8286, w_min_dtod=0.05, gamma_up=0.4152, gamma_down=0.7342, gamma_up_dtod=0.05, gamma_down_dtod=0.05, allow_increasing=False, mean_bound_reference=True, mult_noise=True, write_noise_std=0.0)

Bases: aihwkit.simulator.configs.devices.LinearStepDevice

Preset configuration for a single metal-oxide ECRAM resistive processing unit based on linear step device.

Based on data from Kim et al. IEDM, 2019

allow_increasing = False
as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.00028214
dw_min_dtod: float = 0.1
dw_min_std: float = 2.0
enforce_consistency = True
gamma_down: float = 0.7342
gamma_down_dtod: float = 0.05
gamma_up: float = 0.4152
gamma_up_dtod: float = 0.05
lifetime = 0.0
lifetime_dtod = 0.0
mean_bound_reference: bool = True
mult_noise: bool = True
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.01
w_max: float = 1.1714
w_max_dtod: float = 0.05
w_min: float = -0.8286
w_min_dtod: float = 0.05
write_noise_std: float = 0.0
class aihwkit.simulator.presets.devices.EcRamPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.002, dw_min_dtod=0.1, dw_min_std=0.3, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.01, w_max=1.1724, w_max_dtod=0.05, w_min=-0.8276, w_min_dtod=0.05, gamma_up=0.1153, gamma_down=0.5085, gamma_up_dtod=0.05, gamma_down_dtod=0.05, allow_increasing=False, mean_bound_reference=True, mult_noise=True, write_noise_std=0.0)

Bases: aihwkit.simulator.configs.devices.LinearStepDevice

Preset configuration for a single Lithium-based ECRAM resistive processing unit based on linear step device.

Fit of the model LinearStepDevice to Tang & al., IEDM, 2018

The range is shifted, so that the symmetry point is at zero.

allow_increasing = False
as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.002
dw_min_dtod: float = 0.1
dw_min_std: float = 0.3
enforce_consistency = True
gamma_down: float = 0.5085
gamma_down_dtod: float = 0.05
gamma_up: float = 0.1153
gamma_up_dtod: float = 0.05
lifetime = 0.0
lifetime_dtod = 0.0
mean_bound_reference: bool = True
mult_noise: bool = True
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.01
w_max: float = 1.1724
w_max_dtod: float = 0.05
w_min: float = -0.8276
w_min_dtod: float = 0.05
write_noise_std: float = 0.0
class aihwkit.simulator.presets.devices.GokmenVlasovPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.0016, dw_min_dtod=0.3, dw_min_std=0.3, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.01, w_max=1.0, w_max_dtod=0.3, w_min=-1.0, w_min_dtod=0.3)

Bases: aihwkit.simulator.configs.devices.ConstantStepDevice

Preset configuration using ConstantStepDevice.

Definitions are (largely) from the specifications listed in Gokmen & Vlasov, Front. Neurosci. 2016 (which includes a number of device-to-device and cycle-to-cycle variations, see PulsedDevice).

Note, however, that we use some of the algorithmic optimization of the follow-up papers as well and here scale everything to the weight range -1..1.

as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.0016
dw_min_dtod: float = 0.3
dw_min_std: float = 0.3
enforce_consistency = True
lifetime = 0.0
lifetime_dtod = 0.0
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.01
w_max: float = 1.0
w_max_dtod: float = 0.3
w_min: float = -1.0
w_min_dtod: float = 0.3
class aihwkit.simulator.presets.devices.IdealizedPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.0002, dw_min_dtod=0.3, dw_min_std=0.3, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.0, w_max=1.0, w_max_dtod=0.3, w_min=-1.0, w_min_dtod=0.3)

Bases: aihwkit.simulator.configs.devices.ConstantStepDevice

Preset configuration using an idealized device using ConstantStepDevice.

(On average) perfectly symmetric device with 10000 steps.

Definitions are from the specifications listed in Gokmen & Vlasov, Front. Neurosci. 2016 (which includes a number of device-to-device and cycle-to-cycle variations, see PulsedDevice), however, setting the device-to-device asymmetry term to zero and increasing the number of states by roughly 8 (to 10000 states).

This is the same device used for Rasch, Gokmen & Haensch, IEEE Design & Test, 2019.

as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.0002
dw_min_dtod: float = 0.3
dw_min_std: float = 0.3
enforce_consistency = True
lifetime = 0.0
lifetime_dtod = 0.0
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.0
w_max: float = 1.0
w_max_dtod: float = 0.3
w_min: float = -1.0
w_min_dtod: float = 0.3
class aihwkit.simulator.presets.devices.ReRamESPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.00135, dw_min_dtod=0.2, dw_min_std=5.0, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.259359, up_down_dtod=0.05, w_max=1.0, w_max_dtod=0.3, w_min=-1.0, w_min_dtod=0.3, A_up=-1.18445, A_down=-0.081404, gamma_up=5.0, gamma_down=5.0, a=-0.5, b=-0.5, write_noise_std=75.0)

Bases: aihwkit.simulator.configs.devices.ExpStepDevice

Preset configuration for a single RRAM analog resistive processing unit based on exp. step device.

Fit of the model ExpStepDevice to Gong & al., Nat. Commun., 2018.

A_down: float = -0.081404
A_up: float = -1.18445
a: float = -0.5
as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

b: float = -0.5
construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.00135
dw_min_dtod: float = 0.2
dw_min_std: float = 5.0
enforce_consistency = True
gamma_down: float = 5.0
gamma_up: float = 5.0
lifetime = 0.0
lifetime_dtod = 0.0
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.259359
up_down_dtod: float = 0.05
w_max: float = 1.0
w_max_dtod: float = 0.3
w_min: float = -1.0
w_min_dtod: float = 0.3
write_noise_std: float = 75.0
class aihwkit.simulator.presets.devices.ReRamSBPresetDevice(construction_seed=0, corrupt_devices_prob=0.0, corrupt_devices_range=1000, diffusion=0.0, diffusion_dtod=0.0, drift=<factory>, dw_min=0.002, dw_min_dtod=0.3, dw_min_std=3.75, enforce_consistency=True, lifetime=0.0, lifetime_dtod=0.0, perfect_bias=False, reset=0.01, reset_dtod=0.0, reset_std=0.01, up_down=0.0, up_down_dtod=0.01, w_max=1.25, w_max_dtod=0.24, w_min=-0.75, w_min_dtod=0.39999999999999997, mult_noise=False, write_noise_std=56)

Bases: aihwkit.simulator.configs.devices.SoftBoundsDevice

Preset configuration for a single ReRAM analog resistive processing unit based on soft bounds device.

Loose fit of the model SoftBoundsDevice to Gong & al., Nat. Commun., 2018.

Note

Here it is assumed that the devices have been calibrated to the symmetry point by subtracting a reference device (which is in this case not explicitly modeled). For a more accurate fit see ReRamESPresetDevice.

as_bindings()

Return a representation of this instance as a simulator bindings object.

Return type

aihwkit.simulator.rpu_base.devices.PulsedResistiveDeviceParameter

construction_seed = 0
corrupt_devices_prob = 0.0
corrupt_devices_range = 1000
diffusion = 0.0
diffusion_dtod = 0.0
dw_min: float = 0.002
dw_min_dtod: float = 0.3
dw_min_std: float = 3.75
enforce_consistency = True
lifetime = 0.0
lifetime_dtod = 0.0
mult_noise: bool = False
perfect_bias = False
requires_decay()

Return whether device has decay enabled.

Return type

bool

requires_diffusion()

Return whether device has diffusion enabled.

Return type

bool

reset = 0.01
reset_dtod = 0.0
reset_std = 0.01
up_down: float = 0.0
up_down_dtod: float = 0.01
w_max: float = 1.25
w_max_dtod: float = 0.24
w_min: float = -0.75
w_min_dtod: float = 0.39999999999999997
write_noise_std: float = 56