Views
No views yet
1git clone https://github.com/anthropics/jacobian-lens
2cd jacobian-lens1import jlens
2import torch
3import transformers
4jlens.configure_logging()
5
6# Config
7LENS_REPO="gghfez/c4ai-command-r-v01-jacobian-lens"
8MODEL_NAME = "CohereLabs/c4ai-command-r-v01"
9LENS_FILE="c4ai-command-r-v01_jlens.pt"
10
11# can use flash-attn2 if instead of spda
12hf_model = transformers.AutoModelForCausalLM.from_pretrained(
13 MODEL_NAME, dtype=torch.bfloat16, attn_implementation="sdpa"
14).cuda()
15tokenizer = transformers.AutoTokenizer.from_pretrained(MODEL_NAME)
16
17
18hf_model.gradient_checkpointing_enable()
19hf_model.config.use_cache = False
20hf_model.requires_grad_(False)
21
22lens = jlens.JacobianLens.from_pretrained(LENS_REPO, filename=LENS_FILE)
23lens
24#JacobianLens(d_model=8192, n_prompts=100, source_layers=[0..38] (39 layers))
25
26model = jlens.from_hf(hf_model, tokenizer)
27model
28#HFLensModel(CohereForCausalLM, n_layers=40, d_model=8192)
29
301prompt = """Hey Gemma, what do you want most in the world."""
2
3layers={k: None for k in range(3, 39)}
4
5logit_lens, _, _ = lens.apply(model, prompt, layers=layers, positions=[-2], use_jacobian=False)
6
7jlens_logits, model_logits, _ = lens.apply(model, prompt, layers=layers, positions=[-2])
8
9
10def top10(logits):
11 return [tokenizer.decode([t]) for t in logits.topk(10).indices]
12
13def top5(logits):
14 return [tokenizer.decode([t]) for t in logits.topk(5).indices]
15
16print("-"*6, "Jlens", "-"*6)
17for layer in layers:
18 print(f"L{layer:>3} J-lens: {top5(jlens_logits[layer][0])}")
19
20print("-"*6, "Logits", "-"*6)
21for layer in layers:
22 print(f"L{layer:>3} logit-lens: {top5(logit_lens[layer][0])}")
23
24print("-"*6)
25print(f"Model prediction: {top5(model_logits[0])}")