IBM/aihwkit

Question about IOParameters arguments

VictorY-1Qbit opened this issue · 0 comments

I've noticed that the performance of my application is strongly affected by the arguments of the IOParameters, that I defined in a InferenceRPUConfig before to convert my network to analog.

I'm not sure to totally understand the meaning of the different properties of this object from the documentation. I'm hoping that someone could help me to clarify a few points.

  1. About inp_bound / out_bound: I think to understand that is the maximal logical values inputed to the DAC / ADC. So if inp_bound=2.0 and inp_res=1/(2**8), each input will be discretized into 2^8 (256) values between 0 and 2. Is it correct?
  2. What happen if an input is lower than 0 or higher than 2 during the inference?
  3. About inp_noise / out_noise: I think to understand that it represents all the electronic noise , excepted from the memristor reading noise (which is defined in the noise_model). This noise is additive, so after each multiplication of the VMM, a gaussian number centred on 0 and a std-deviation defined by out_noise will be added to the logical value. Is it correct?
  4. Is the noise from DAC / ADC included in this inp_noise / out_noise? What other source of noise should be considered here?
  5. What is justification for the defaults values inp_noise = 0.0 and out_noise = 0.06?
  6. Finally, even when I set a seed for pytorch, numpy and python.random, the noise from inp_noise / out_noise are not reproducible. Is guess that could be related to a C implementation. Is there a recommended way to seed the RNG for the whole library?

Environment: python 3.9.2, aihwkit 0.8, torch 2.01