Setting Values#

We often not only want to see whats happening during computation, but intervene and edit the flow of information.

In this example, we create a tensor of noise to add to the hidden states. We then add it, use the assigment = operator to update the tensors of .output[0][:] with these new noised values.

[1]:
from nnsight import LanguageModel
import torch

model = LanguageModel('openai-community/gpt2', device_map='cuda')

with model.trace('The Eiffel Tower is in the city of') as tracer:

    hidden_states_pre = model.transformer.h[-1].output[0].clone().save()

    noise = (0.001**0.5)*torch.randn(hidden_states_pre.shape)

    # model.transformer.h[-1].output = (hidden_states_pre + noise, model.transformer.h[-1].output[1])
    model.transformer.h[-1].output[0][:] = hidden_states_pre + noise

    hidden_states_post = model.transformer.h[-1].output[0].save()
/share/u/caden/.conda/envs/interp/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
You're using a GPT2TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.

We can see the change in the results:

[2]:
print(hidden_states_pre)
print(hidden_states_post)
tensor([[[ 0.0505, -0.1728, -0.1690,  ..., -1.0096,  0.1280, -1.0687],
         [ 8.7494,  2.9057,  5.3024,  ..., -8.0418,  1.2964, -2.8677],
         [ 0.2960,  4.6686, -3.6642,  ...,  0.2391, -2.6064,  3.2263],
         ...,
         [ 2.1537,  6.8917,  3.8651,  ...,  0.0588, -1.9866,  5.9188],
         [-0.4460,  7.4285, -9.3065,  ...,  2.0528, -2.7946,  0.5556],
         [ 6.6286,  1.7258,  4.7969,  ...,  7.6714,  3.0683,  2.0481]]],
       device='cuda:0', grad_fn=<CloneBackward0>)
tensor([[[-0.0244, -0.1430, -0.1384,  ..., -1.0185,  0.1173, -1.0855],
         [ 8.8112,  2.8995,  5.3000,  ..., -8.0057,  1.3378, -2.8778],
         [ 0.2780,  4.6427, -3.6233,  ...,  0.1378, -2.5877,  3.2030],
         ...,
         [ 2.1590,  6.9278,  3.8584,  ...,  0.0728, -2.0145,  5.9685],
         [-0.4962,  7.4435, -9.3371,  ...,  2.1299, -2.7784,  0.5379],
         [ 6.6941,  1.7279,  4.8105,  ...,  7.6403,  3.0599,  2.0637]]],
       device='cuda:0', grad_fn=<CopySlices>)