Source code for aihwkit.simulator.presets.web

# -*- coding: utf-8 -*-

# (C) Copyright 2020, 2021, 2022, 2023, 2024 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.

"""RPU configurations presets used for the composer interface."""

# pylint: disable=too-many-instance-attributes

from dataclasses import dataclass, field
from aihwkit.simulator.configs.configs import InferenceRPUConfig

from aihwkit.simulator.parameters import (
    IOParameters,
    WeightClipParameter,
    WeightModifierParameter,
    MappingParameter,
    BoundManagementType,
    NoiseManagementType,
    WeightNoiseType,
    WeightModifierType,
    WeightClipType,
)
from aihwkit.inference import (
    BaseDriftCompensation,
    BaseNoiseModel,
    GlobalDriftCompensation,
    PCMLikeNoiseModel,
)


[docs]@dataclass class WebComposerIOParameters(IOParameters): r"""Preset for the forward and backward pass parameters. The default values used for the web composer """ bound_management: BoundManagementType = BoundManagementType.ITERATIVE noise_management: NoiseManagementType = NoiseManagementType.ABS_MAX inp_res: float = 1.0 / (2**7 - 2) # 7 bit DAC. inp_sto_round: bool = False out_bound: float = 20.0 out_noise: float = 0.1 out_res: float = 1.0 / (2**9 - 2) # 9 bit ADC. w_noise: float = 0.0 w_noise_type: WeightNoiseType = WeightNoiseType.NONE
[docs]@dataclass class WebComposerWeightModifierParameter(WeightModifierParameter): r"""Preset for the WeightModifierParameter The default values used for the web composer """ type: WeightModifierType = WeightModifierType.ADD_NORMAL std_dev: float = 0.1
[docs]@dataclass class WebComposerWeightClipParameter(WeightClipParameter): """Parameter that clip the weights during hardware-aware training. The default values used for the web composer. """ fixed_value: float = 1.0 type: WeightClipType = WeightClipType.FIXED_VALUE
[docs]@dataclass class WebComposerMappingParameter(MappingParameter): """Parameter related to hardware design and the mapping of logical weight matrices to physical tiles. The default values used for the web composer. """ digital_bias: bool = True weight_scaling_omega: float = 1.0 weight_scaling_columnwise: bool = True learn_out_scaling: bool = True out_scaling_columnwise: bool = False max_input_size: int = 512 max_output_size: int = 512
[docs]@dataclass class WebComposerInferenceRPUConfig(InferenceRPUConfig): """Preset configuration used as default for the Inference Composer""" forward: IOParameters = field( default_factory=WebComposerIOParameters, metadata=dict(bindings_include=True) ) """Input-output parameter setting for the forward direction.""" noise_model: BaseNoiseModel = field(default_factory=PCMLikeNoiseModel) """Statistical noise model to be used during (realistic) inference.""" drift_compensation: BaseDriftCompensation = field(default_factory=GlobalDriftCompensation) """For compensating the drift during inference only.""" clip: WeightClipParameter = field(default_factory=WebComposerWeightClipParameter) """Parameter for weight clip.""" modifier: WeightModifierParameter = field(default_factory=WebComposerWeightModifierParameter) """Parameter for weight modifier.""" mapping: MappingParameter = field(default_factory=WebComposerMappingParameter) """Parameter related to mapping weights to tiles for supporting modules."""
[docs]@dataclass class OldWebComposerMappingParameter(WebComposerMappingParameter): """Parameter related to hardware design and the mapping of logical weight matrices to physical tiles. The default values used for the web composer. """ digital_bias: bool = False weight_scaling_omega: float = 1.0 weight_scaling_columnwise: bool = True learn_out_scaling: bool = False out_scaling_columnwise: bool = False max_input_size: int = 0 max_output_size: int = 0
[docs]@dataclass class OldWebComposerInferenceRPUConfig(WebComposerInferenceRPUConfig): """Preset configuration used as default for the Inference Composer""" mapping: MappingParameter = field(default_factory=OldWebComposerMappingParameter) """Parameter related to mapping weights to tiles for supporting modules."""