Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated drift compensation mechanism to use is_perfect=True when determining the reference readout #674

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

coreylammie
Copy link
Contributor

Description

Updated drift compensation mechanism to use is_perfect=True when determining the reference readout. Previously, all non-idealities (as set by the corresponding rpu_config) were modeled, resulting in sub-optimal drift compensation scales being computed in some scenarios, e.g., where the output noise is sufficiently large.

Signed-off-by: Corey Liam Lammie <Corey.Lammie@ibm.com>
@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

@coreylammie, the drift compensation is on purpose using the rpu config of the tile as this is the realistic situation. In reality, how can you achieve a perfect reference readout, as there always will be noise when reading the analogue devics? I don't think you should change this default behaviour as it would then make the simulation unrealistic and wrong.

@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

If you want perfect readout during drift compensation, then you should explicitly write a new drift compensation. This should be a special case as this behaviour is wrong in most natural cases.

@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

This PR will also invalidate the papers we have written using this standard drift where the correct way was used to estimate the drift compensation in a noisy manner. So please take this PR back. If you need a perfect compensation for some reasons, write a special drift compensation class by deriving from the default one.

@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

Also the implementation seems to permanently set the rpu config to perfect, which is then always using the perfect case, which is even wrong, if you only want to use a noise free reference. It will then use a completely noise free drift. That's completely wrong.

@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

Please don't change the default drift class in this manner. Use a special drift class if you need this special behaviour for some reasons.

@maljoras maljoras closed this Aug 7, 2024
@maljoras maljoras reopened this Aug 7, 2024
@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

I am about to close this PR. Please submit a new one where you modify your PR accordingly by deriving a new drift compensation class from the default class and not changing the behaviour of the default class. Also, as stated above, it seems that the rpu configuration is permanently changed which is wrong in any case.

@maljoras
Copy link
Collaborator

maljoras commented Aug 7, 2024

Btw, if you want the exact weights of a tile for the reference computation of your special drift compensation class, simply use tile.get_weights(realistic=False) instead of changing the forward read to is_perfect=True

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants