# -*- coding: utf-8 -*-
# (C) Copyright 2020, 2021 IBM. All Rights Reserved.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
# pylint: disable=too-many-lines
"""RPU configurations presets for resistive processing units."""
from dataclasses import dataclass, field
from aihwkit.simulator.configs.configs import (
SingleRPUConfig, UnitCellRPUConfig, DigitalRankUpdateRPUConfig
)
from aihwkit.simulator.configs.devices import (
PulsedDevice, TransferCompound, UnitCell, VectorUnitCell,
DigitalRankUpdateCell, MixedPrecisionCompound,
BufferedTransferCompound
)
from aihwkit.simulator.configs.utils import (
IOParameters, UpdateParameters, VectorUnitCellUpdatePolicy
)
from aihwkit.simulator.presets.devices import (
CapacitorPresetDevice, EcRamPresetDevice, EcRamMOPresetDevice, IdealizedPresetDevice,
ReRamESPresetDevice, ReRamSBPresetDevice, GokmenVlasovPresetDevice,
PCMPresetUnitCell
)
from aihwkit.simulator.presets.utils import (
PresetIOParameters, PresetUpdateParameters
)
# Single device configs.
[docs]@dataclass
class ReRamESPreset(SingleRPUConfig):
"""Preset configuration using a single ReRam device (based on ExpStep
model, see :class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`).
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=ReRamESPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class ReRamSBPreset(SingleRPUConfig):
"""Preset configuration using a single ReRam device (based on
SoftBounds model, see
:class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`).
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=ReRamSBPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class CapacitorPreset(SingleRPUConfig):
"""Preset configuration using a single capacitor device, see
:class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=CapacitorPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRamPreset(SingleRPUConfig):
"""Preset configuration using a single Lithium-based EcRAM device, see
:class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=EcRamPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRamMOPreset(SingleRPUConfig):
"""Preset configuration using a single metal-oxide EcRAM device, see
:class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=EcRamMOPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class IdealizedPreset(SingleRPUConfig):
"""Preset configuration using a single idealized device, see
:class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=IdealizedPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class GokmenVlasovPreset(SingleRPUConfig):
"""Preset configuration using a single device with constant update
step size, see
:class:`~aihwkit.simulator.presets.devices.GokmenVlasovPresetDevice`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: PulsedDevice = field(default_factory=GokmenVlasovPresetDevice)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class PCMPreset(UnitCellRPUConfig):
"""Preset configuration using a single pair of PCM devicec with refresh, see
:class:`~aihwkit.simulator.presets.devices.PCMPresetUnitCell`.
This preset uses standard SGD with fully parallel update on analog
with stochastic pulses.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=PCMPresetUnitCell)
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
# 2-device configs.
[docs]@dataclass
class ReRamES2Preset(UnitCellRPUConfig):
"""Preset configuration using two ReRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[ReRamESPresetDevice(), ReRamESPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class ReRamSB2Preset(UnitCellRPUConfig):
"""Preset configuration using two ReRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[ReRamSBPresetDevice(), ReRamSBPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class Capacitor2Preset(UnitCellRPUConfig):
"""Preset configuration using two Capacitor devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[CapacitorPresetDevice(), CapacitorPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRam2Preset(UnitCellRPUConfig):
"""Preset configuration using two Lithium-based EcRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[EcRamPresetDevice(), EcRamPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRamMO2Preset(UnitCellRPUConfig):
"""Preset configuration using two metal-oxide EcRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[EcRamMOPresetDevice(), EcRamMOPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class Idealized2Preset(UnitCellRPUConfig):
"""Preset configuration using two Idealized devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[IdealizedPresetDevice(), IdealizedPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
# 4-device configs.
[docs]@dataclass
class ReRamES4Preset(UnitCellRPUConfig):
"""Preset configuration using four ReRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[ReRamESPresetDevice(), ReRamESPresetDevice(),
ReRamESPresetDevice(), ReRamESPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class ReRamSB4Preset(UnitCellRPUConfig):
"""Preset configuration using four ReRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[ReRamSBPresetDevice(), ReRamSBPresetDevice(),
ReRamSBPresetDevice(), ReRamSBPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class Capacitor4Preset(UnitCellRPUConfig):
"""Preset configuration using four Capacitor devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[CapacitorPresetDevice(), CapacitorPresetDevice(),
CapacitorPresetDevice(), CapacitorPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRam4Preset(UnitCellRPUConfig):
"""Preset configuration using four Lithium-based EcRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[EcRamPresetDevice(), EcRamPresetDevice(),
EcRamPresetDevice(), EcRamPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class EcRamMO4Preset(UnitCellRPUConfig):
"""Preset configuration using four metal-oxide EcRam devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[EcRamMOPresetDevice(), EcRamMOPresetDevice(),
EcRamMOPresetDevice(), EcRamMOPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class Idealized4Preset(UnitCellRPUConfig):
"""Preset configuration using four Idealized devices per cross-point
(:class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`),
where both are updated with random selection policy for update.
See :class:`~aihwkit.simulator.configs.devices.VectorUnitCell` for
more details on multiple devices per cross-points.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(default_factory=lambda: VectorUnitCell(
unit_cell_devices=[IdealizedPresetDevice(), IdealizedPresetDevice(),
IdealizedPresetDevice(), IdealizedPresetDevice()],
update_policy=VectorUnitCellUpdatePolicy.SINGLE_RANDOM
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
# Tiki-taka configs.
[docs]@dataclass
class TikiTakaReRamESPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[ReRamESPresetDevice(), ReRamESPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TikiTakaReRamSBPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[ReRamSBPresetDevice(), ReRamSBPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TikiTakaCapacitorPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[CapacitorPresetDevice(), CapacitorPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TikiTakaEcRamPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[EcRamPresetDevice(), EcRamPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TikiTakaEcRamMOPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[EcRamMOPresetDevice(), EcRamMOPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TikiTakaIdealizedPreset(UnitCellRPUConfig):
"""Configuration using Tiki-taka with
:class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.TransferCompound`
for details on Tiki-taka-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: TransferCompound(
unit_cell_devices=[IdealizedPresetDevice(), IdealizedPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
# TTv2 configs.
[docs]@dataclass
class TTv2ReRamESPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[ReRamESPresetDevice(), ReRamESPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TTv2ReRamSBPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[ReRamSBPresetDevice(), ReRamSBPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TTv2CapacitorPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[CapacitorPresetDevice(), CapacitorPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TTv2EcRamPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[EcRamPresetDevice(), EcRamPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TTv2EcRamMOPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[EcRamMOPresetDevice(), EcRamMOPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class TTv2IdealizedPreset(UnitCellRPUConfig):
"""Configuration using TTv2 with
:class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`.
See :class:`~aihwkit.simulator.configs.devices.BufferedTransferCompound`
for details on TTv2-like optimizers.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: UnitCell = field(
default_factory=lambda: BufferedTransferCompound(
unit_cell_devices=[IdealizedPresetDevice(), IdealizedPresetDevice()],
transfer_forward=PresetIOParameters(),
transfer_update=PresetUpdateParameters(),
transfer_every=1.0,
units_in_mbatch=True,
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
# Mixed precision presets
[docs]@dataclass
class MixedPrecisionReRamESPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.ReRamESPresetDevice`
See
class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=ReRamESPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionReRamSBPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.ReRamSBPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=ReRamSBPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionCapacitorPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.CapacitorPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=CapacitorPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionEcRamPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.EcRamPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=EcRamPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionEcRamMOPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.EcRamMOPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=EcRamMOPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionIdealizedPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.IdealizedPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=IdealizedPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionGokmenVlasovPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.GokmenVlasovPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=GokmenVlasovPresetDevice(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)
[docs]@dataclass
class MixedPrecisionPCMPreset(DigitalRankUpdateRPUConfig):
"""Configuration using Mixed-precision with
class:`~aihwkit.simulator.presets.devices.PCMPresetDevice`.
See class:`~aihwkit.simulator.configs.devices.MixedPrecisionCompound`
for details on the mixed precision optimizer.
The default peripheral hardware
(:class:`~aihwkit.simulator.presets.utils.PresetIOParameters`) and
analog update
(:class:`~aihwkit.simulator.presets.utils.PresetUpdateParameters`)
configuration is used otherwise.
"""
device: DigitalRankUpdateCell = field(
default_factory=lambda: MixedPrecisionCompound(
device=PCMPresetUnitCell(),
))
forward: IOParameters = field(default_factory=PresetIOParameters)
backward: IOParameters = field(default_factory=PresetIOParameters)
update: UpdateParameters = field(default_factory=PresetUpdateParameters)