ayh015 commited on
Commit
85b17bd
·
verified ·
1 Parent(s): 194bcc4

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +2 -0
  2. .gitignore +5 -0
  3. LLMs/qwen3-4b-base-sft-qwen3-8b/README.md +61 -0
  4. LLMs/qwen3-4b-base-sft-qwen3-8b/added_tokens.json +28 -0
  5. LLMs/qwen3-4b-base-sft-qwen3-8b/all_results.json +8 -0
  6. LLMs/qwen3-4b-base-sft-qwen3-8b/chat_template.jinja +89 -0
  7. LLMs/qwen3-4b-base-sft-qwen3-8b/config.json +30 -0
  8. LLMs/qwen3-4b-base-sft-qwen3-8b/generation_config.json +13 -0
  9. LLMs/qwen3-4b-base-sft-qwen3-8b/merges.txt +0 -0
  10. LLMs/qwen3-4b-base-sft-qwen3-8b/model-00001-of-00002.safetensors +3 -0
  11. LLMs/qwen3-4b-base-sft-qwen3-8b/model-00002-of-00002.safetensors +3 -0
  12. LLMs/qwen3-4b-base-sft-qwen3-8b/model.safetensors.index.json +406 -0
  13. LLMs/qwen3-4b-base-sft-qwen3-8b/special_tokens_map.json +31 -0
  14. LLMs/qwen3-4b-base-sft-qwen3-8b/tokenizer.json +3 -0
  15. LLMs/qwen3-4b-base-sft-qwen3-8b/tokenizer_config.json +240 -0
  16. LLMs/qwen3-4b-base-sft-qwen3-8b/train_results.json +8 -0
  17. LLMs/qwen3-4b-base-sft-qwen3-8b/trainer_log.jsonl +0 -0
  18. LLMs/qwen3-4b-base-sft-qwen3-8b/trainer_state.json +0 -0
  19. LLMs/qwen3-4b-base-sft-qwen3-8b/training_args.bin +3 -0
  20. LLMs/qwen3-4b-base-sft-qwen3-8b/training_loss.png +0 -0
  21. LLMs/qwen3-4b-base-sft-qwen3-8b/vocab.json +0 -0
  22. README.md +118 -0
  23. data/dapo-math-17k/dapo-math-17k.jsonl +3 -0
  24. math_jlens.egg-info/PKG-INFO +7 -0
  25. math_jlens.egg-info/SOURCES.txt +15 -0
  26. math_jlens.egg-info/dependency_links.txt +1 -0
  27. math_jlens.egg-info/entry_points.txt +2 -0
  28. math_jlens.egg-info/requires.txt +3 -0
  29. math_jlens.egg-info/top_level.txt +1 -0
  30. math_jlens/__init__.py +6 -0
  31. math_jlens/__pycache__/__init__.cpython-311.pyc +0 -0
  32. math_jlens/__pycache__/cli.cpython-311.pyc +0 -0
  33. math_jlens/__pycache__/corpus.cpython-311.pyc +0 -0
  34. math_jlens/__pycache__/explore.cpython-311.pyc +0 -0
  35. math_jlens/__pycache__/fitting.cpython-311.pyc +0 -0
  36. math_jlens/__pycache__/hooks.cpython-311.pyc +0 -0
  37. math_jlens/__pycache__/merge.cpython-311.pyc +0 -0
  38. math_jlens/__pycache__/model.cpython-311.pyc +0 -0
  39. math_jlens/cli.py +57 -0
  40. math_jlens/corpus.py +34 -0
  41. math_jlens/explore.py +495 -0
  42. math_jlens/fitting.py +160 -0
  43. math_jlens/hooks.py +40 -0
  44. math_jlens/merge.py +79 -0
  45. math_jlens/model.py +47 -0
  46. outputs/explorer-cache/seed-17-fit-20-sample-0.json +2058 -0
  47. outputs/multi-gpu-1000/lens-bf16.pt +3 -0
  48. outputs/multi-gpu-1000/shard-0/config.json +55 -0
  49. outputs/multi-gpu-1000/shard-0/fit-checkpoint-fp32.pt +3 -0
  50. outputs/multi-gpu-1000/shard-0/lens-bf16.pt +3 -0
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ LLMs/qwen3-4b-base-sft-qwen3-8b/tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ data/dapo-math-17k/dapo-math-17k.jsonl filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ __pycache__/
2
+ .pytest_cache/
3
+ *.egg-info/
4
+ outputs/
5
+
LLMs/qwen3-4b-base-sft-qwen3-8b/README.md ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: transformers
3
+ license: other
4
+ base_model: model_weights/qwen3-4b-base
5
+ tags:
6
+ - llama-factory
7
+ - full
8
+ - generated_from_trainer
9
+ model-index:
10
+ - name: qwen3-4b-base-sft-qwen3-8b
11
+ results: []
12
+ ---
13
+
14
+ <!-- This model card has been generated automatically according to the information the Trainer had access to. You
15
+ should probably proofread and complete it, then remove this comment. -->
16
+
17
+ # qwen3-4b-base-sft-qwen3-8b
18
+
19
+ This model is a fine-tuned version of [model_weights/qwen3-4b-base](https://huggingface.co/model_weights/qwen3-4b-base) on the openthoughts3_300k_qwen3-8b dataset.
20
+
21
+ ## Model description
22
+
23
+ More information needed
24
+
25
+ ## Intended uses & limitations
26
+
27
+ More information needed
28
+
29
+ ## Training and evaluation data
30
+
31
+ More information needed
32
+
33
+ ## Training procedure
34
+
35
+ ### Training hyperparameters
36
+
37
+ The following hyperparameters were used during training:
38
+ - learning_rate: 8e-05
39
+ - train_batch_size: 4
40
+ - eval_batch_size: 8
41
+ - seed: 42
42
+ - distributed_type: multi-GPU
43
+ - num_devices: 4
44
+ - gradient_accumulation_steps: 2
45
+ - total_train_batch_size: 32
46
+ - total_eval_batch_size: 32
47
+ - optimizer: Use adamw_torch with betas=(0.9,0.999) and epsilon=1e-08 and optimizer_args=No additional optimizer arguments
48
+ - lr_scheduler_type: cosine
49
+ - lr_scheduler_warmup_ratio: 0.1
50
+ - training_steps: 3000
51
+
52
+ ### Training results
53
+
54
+
55
+
56
+ ### Framework versions
57
+
58
+ - Transformers 4.52.4
59
+ - Pytorch 2.12.0+cu130
60
+ - Datasets 3.6.0
61
+ - Tokenizers 0.21.1
LLMs/qwen3-4b-base-sft-qwen3-8b/added_tokens.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|box_end|>": 151649,
9
+ "<|box_start|>": 151648,
10
+ "<|endoftext|>": 151643,
11
+ "<|file_sep|>": 151664,
12
+ "<|fim_middle|>": 151660,
13
+ "<|fim_pad|>": 151662,
14
+ "<|fim_prefix|>": 151659,
15
+ "<|fim_suffix|>": 151661,
16
+ "<|im_end|>": 151645,
17
+ "<|im_start|>": 151644,
18
+ "<|image_pad|>": 151655,
19
+ "<|object_ref_end|>": 151647,
20
+ "<|object_ref_start|>": 151646,
21
+ "<|quad_end|>": 151651,
22
+ "<|quad_start|>": 151650,
23
+ "<|repo_name|>": 151663,
24
+ "<|video_pad|>": 151656,
25
+ "<|vision_end|>": 151653,
26
+ "<|vision_pad|>": 151654,
27
+ "<|vision_start|>": 151652
28
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/all_results.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 0.34443168771526983,
3
+ "total_flos": 3.429011909561549e+19,
4
+ "train_loss": 0.27564545996983847,
5
+ "train_runtime": 45365.0148,
6
+ "train_samples_per_second": 2.116,
7
+ "train_steps_per_second": 0.066
8
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/chat_template.jinja ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- if tools %}
2
+ {{- '<|im_start|>system\n' }}
3
+ {%- if messages[0].role == 'system' %}
4
+ {{- messages[0].content + '\n\n' }}
5
+ {%- endif %}
6
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
7
+ {%- for tool in tools %}
8
+ {{- "\n" }}
9
+ {{- tool | tojson }}
10
+ {%- endfor %}
11
+ {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
12
+ {%- else %}
13
+ {%- if messages[0].role == 'system' %}
14
+ {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
15
+ {%- endif %}
16
+ {%- endif %}
17
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
18
+ {%- for message in messages[::-1] %}
19
+ {%- set index = (messages|length - 1) - loop.index0 %}
20
+ {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
21
+ {%- set ns.multi_step_tool = false %}
22
+ {%- set ns.last_query_index = index %}
23
+ {%- endif %}
24
+ {%- endfor %}
25
+ {%- for message in messages %}
26
+ {%- if message.content is string %}
27
+ {%- set content = message.content %}
28
+ {%- else %}
29
+ {%- set content = '' %}
30
+ {%- endif %}
31
+ {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
32
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
33
+ {%- elif message.role == "assistant" %}
34
+ {%- set reasoning_content = '' %}
35
+ {%- if message.reasoning_content is string %}
36
+ {%- set reasoning_content = message.reasoning_content %}
37
+ {%- else %}
38
+ {%- if '</think>' in content %}
39
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
40
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
41
+ {%- endif %}
42
+ {%- endif %}
43
+ {%- if loop.index0 > ns.last_query_index %}
44
+ {%- if loop.last or (not loop.last and reasoning_content) %}
45
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
46
+ {%- else %}
47
+ {{- '<|im_start|>' + message.role + '\n' + content }}
48
+ {%- endif %}
49
+ {%- else %}
50
+ {{- '<|im_start|>' + message.role + '\n' + content }}
51
+ {%- endif %}
52
+ {%- if message.tool_calls %}
53
+ {%- for tool_call in message.tool_calls %}
54
+ {%- if (loop.first and content) or (not loop.first) %}
55
+ {{- '\n' }}
56
+ {%- endif %}
57
+ {%- if tool_call.function %}
58
+ {%- set tool_call = tool_call.function %}
59
+ {%- endif %}
60
+ {{- '<tool_call>\n{"name": "' }}
61
+ {{- tool_call.name }}
62
+ {{- '", "arguments": ' }}
63
+ {%- if tool_call.arguments is string %}
64
+ {{- tool_call.arguments }}
65
+ {%- else %}
66
+ {{- tool_call.arguments | tojson }}
67
+ {%- endif %}
68
+ {{- '}\n</tool_call>' }}
69
+ {%- endfor %}
70
+ {%- endif %}
71
+ {{- '<|im_end|>\n' }}
72
+ {%- elif message.role == "tool" %}
73
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
74
+ {{- '<|im_start|>user' }}
75
+ {%- endif %}
76
+ {{- '\n<tool_response>\n' }}
77
+ {{- content }}
78
+ {{- '\n</tool_response>' }}
79
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
80
+ {{- '<|im_end|>\n' }}
81
+ {%- endif %}
82
+ {%- endif %}
83
+ {%- endfor %}
84
+ {%- if add_generation_prompt %}
85
+ {{- '<|im_start|>assistant\n' }}
86
+ {%- if enable_thinking is defined and enable_thinking is false %}
87
+ {{- '<think>\n\n</think>\n\n' }}
88
+ {%- endif %}
89
+ {%- endif %}
LLMs/qwen3-4b-base-sft-qwen3-8b/config.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Qwen3ForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 151643,
8
+ "eos_token_id": 151645,
9
+ "head_dim": 128,
10
+ "hidden_act": "silu",
11
+ "hidden_size": 2560,
12
+ "initializer_range": 0.02,
13
+ "intermediate_size": 9728,
14
+ "max_position_embeddings": 40960,
15
+ "max_window_layers": 36,
16
+ "model_type": "qwen3",
17
+ "num_attention_heads": 32,
18
+ "num_hidden_layers": 36,
19
+ "num_key_value_heads": 8,
20
+ "rms_norm_eps": 1e-06,
21
+ "rope_scaling": null,
22
+ "rope_theta": 1000000,
23
+ "sliding_window": null,
24
+ "tie_word_embeddings": true,
25
+ "torch_dtype": "bfloat16",
26
+ "transformers_version": "4.52.4",
27
+ "use_cache": false,
28
+ "use_sliding_window": false,
29
+ "vocab_size": 151936
30
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/generation_config.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 151643,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 151645,
6
+ 151643
7
+ ],
8
+ "pad_token_id": 151643,
9
+ "temperature": 0.6,
10
+ "top_k": 20,
11
+ "top_p": 0.95,
12
+ "transformers_version": "4.52.4"
13
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
LLMs/qwen3-4b-base-sft-qwen3-8b/model-00001-of-00002.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:00619761893181a1e70ec80551accdf1a17b173a4cc956de5d744e42239ddda5
3
+ size 15190896
LLMs/qwen3-4b-base-sft-qwen3-8b/model-00002-of-00002.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:591aed33a9c8e68474a30fd166f755fa3a348f6d6c1c1ed5e1c49e329ff04051
3
+ size 18464796
LLMs/qwen3-4b-base-sft-qwen3-8b/model.safetensors.index.json ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_size": 8822848512
4
+ },
5
+ "weight_map": {
6
+ "lm_head.weight": "model-00002-of-00002.safetensors",
7
+ "model.embed_tokens.weight": "model-00001-of-00002.safetensors",
8
+ "model.layers.0.input_layernorm.weight": "model-00001-of-00002.safetensors",
9
+ "model.layers.0.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
10
+ "model.layers.0.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
11
+ "model.layers.0.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
12
+ "model.layers.0.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
13
+ "model.layers.0.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
14
+ "model.layers.0.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
15
+ "model.layers.0.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
16
+ "model.layers.0.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
17
+ "model.layers.0.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
18
+ "model.layers.0.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
19
+ "model.layers.1.input_layernorm.weight": "model-00001-of-00002.safetensors",
20
+ "model.layers.1.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
21
+ "model.layers.1.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
22
+ "model.layers.1.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
23
+ "model.layers.1.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
24
+ "model.layers.1.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
25
+ "model.layers.1.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
26
+ "model.layers.1.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
27
+ "model.layers.1.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
28
+ "model.layers.1.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
29
+ "model.layers.1.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
30
+ "model.layers.10.input_layernorm.weight": "model-00001-of-00002.safetensors",
31
+ "model.layers.10.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
32
+ "model.layers.10.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
33
+ "model.layers.10.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
34
+ "model.layers.10.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
35
+ "model.layers.10.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
36
+ "model.layers.10.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
37
+ "model.layers.10.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
38
+ "model.layers.10.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
39
+ "model.layers.10.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
40
+ "model.layers.10.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
41
+ "model.layers.11.input_layernorm.weight": "model-00001-of-00002.safetensors",
42
+ "model.layers.11.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
43
+ "model.layers.11.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
44
+ "model.layers.11.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
45
+ "model.layers.11.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
46
+ "model.layers.11.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
47
+ "model.layers.11.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
48
+ "model.layers.11.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
49
+ "model.layers.11.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
50
+ "model.layers.11.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
51
+ "model.layers.11.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
52
+ "model.layers.12.input_layernorm.weight": "model-00001-of-00002.safetensors",
53
+ "model.layers.12.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
54
+ "model.layers.12.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
55
+ "model.layers.12.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
56
+ "model.layers.12.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
57
+ "model.layers.12.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
58
+ "model.layers.12.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
59
+ "model.layers.12.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
60
+ "model.layers.12.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
61
+ "model.layers.12.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
62
+ "model.layers.12.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
63
+ "model.layers.13.input_layernorm.weight": "model-00001-of-00002.safetensors",
64
+ "model.layers.13.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
65
+ "model.layers.13.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
66
+ "model.layers.13.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
67
+ "model.layers.13.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
68
+ "model.layers.13.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
69
+ "model.layers.13.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
70
+ "model.layers.13.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
71
+ "model.layers.13.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
72
+ "model.layers.13.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
73
+ "model.layers.13.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
74
+ "model.layers.14.input_layernorm.weight": "model-00001-of-00002.safetensors",
75
+ "model.layers.14.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
76
+ "model.layers.14.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
77
+ "model.layers.14.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
78
+ "model.layers.14.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
79
+ "model.layers.14.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
80
+ "model.layers.14.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
81
+ "model.layers.14.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
82
+ "model.layers.14.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
83
+ "model.layers.14.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
84
+ "model.layers.14.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
85
+ "model.layers.15.input_layernorm.weight": "model-00001-of-00002.safetensors",
86
+ "model.layers.15.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
87
+ "model.layers.15.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
88
+ "model.layers.15.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
89
+ "model.layers.15.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
90
+ "model.layers.15.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
91
+ "model.layers.15.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
92
+ "model.layers.15.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
93
+ "model.layers.15.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
94
+ "model.layers.15.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
95
+ "model.layers.15.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
96
+ "model.layers.16.input_layernorm.weight": "model-00001-of-00002.safetensors",
97
+ "model.layers.16.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
98
+ "model.layers.16.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
99
+ "model.layers.16.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
100
+ "model.layers.16.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
101
+ "model.layers.16.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
102
+ "model.layers.16.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
103
+ "model.layers.16.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
104
+ "model.layers.16.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
105
+ "model.layers.16.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
106
+ "model.layers.16.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
107
+ "model.layers.17.input_layernorm.weight": "model-00001-of-00002.safetensors",
108
+ "model.layers.17.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
109
+ "model.layers.17.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
110
+ "model.layers.17.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
111
+ "model.layers.17.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
112
+ "model.layers.17.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
113
+ "model.layers.17.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
114
+ "model.layers.17.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
115
+ "model.layers.17.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
116
+ "model.layers.17.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
117
+ "model.layers.17.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
118
+ "model.layers.18.input_layernorm.weight": "model-00001-of-00002.safetensors",
119
+ "model.layers.18.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
120
+ "model.layers.18.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
121
+ "model.layers.18.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
122
+ "model.layers.18.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
123
+ "model.layers.18.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
124
+ "model.layers.18.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
125
+ "model.layers.18.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
126
+ "model.layers.18.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
127
+ "model.layers.18.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
128
+ "model.layers.18.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
129
+ "model.layers.19.input_layernorm.weight": "model-00001-of-00002.safetensors",
130
+ "model.layers.19.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
131
+ "model.layers.19.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
132
+ "model.layers.19.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
133
+ "model.layers.19.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
134
+ "model.layers.19.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
135
+ "model.layers.19.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
136
+ "model.layers.19.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
137
+ "model.layers.19.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
138
+ "model.layers.19.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
139
+ "model.layers.19.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
140
+ "model.layers.2.input_layernorm.weight": "model-00001-of-00002.safetensors",
141
+ "model.layers.2.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
142
+ "model.layers.2.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
143
+ "model.layers.2.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
144
+ "model.layers.2.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
145
+ "model.layers.2.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
146
+ "model.layers.2.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
147
+ "model.layers.2.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
148
+ "model.layers.2.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
149
+ "model.layers.2.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
150
+ "model.layers.2.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
151
+ "model.layers.20.input_layernorm.weight": "model-00002-of-00002.safetensors",
152
+ "model.layers.20.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
153
+ "model.layers.20.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
154
+ "model.layers.20.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
155
+ "model.layers.20.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
156
+ "model.layers.20.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
157
+ "model.layers.20.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
158
+ "model.layers.20.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
159
+ "model.layers.20.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
160
+ "model.layers.20.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
161
+ "model.layers.20.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
162
+ "model.layers.21.input_layernorm.weight": "model-00002-of-00002.safetensors",
163
+ "model.layers.21.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
164
+ "model.layers.21.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
165
+ "model.layers.21.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
166
+ "model.layers.21.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
167
+ "model.layers.21.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
168
+ "model.layers.21.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
169
+ "model.layers.21.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
170
+ "model.layers.21.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
171
+ "model.layers.21.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
172
+ "model.layers.21.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
173
+ "model.layers.22.input_layernorm.weight": "model-00002-of-00002.safetensors",
174
+ "model.layers.22.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
175
+ "model.layers.22.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
176
+ "model.layers.22.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
177
+ "model.layers.22.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
178
+ "model.layers.22.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
179
+ "model.layers.22.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
180
+ "model.layers.22.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
181
+ "model.layers.22.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
182
+ "model.layers.22.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
183
+ "model.layers.22.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
184
+ "model.layers.23.input_layernorm.weight": "model-00002-of-00002.safetensors",
185
+ "model.layers.23.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
186
+ "model.layers.23.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
187
+ "model.layers.23.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
188
+ "model.layers.23.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
189
+ "model.layers.23.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
190
+ "model.layers.23.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
191
+ "model.layers.23.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
192
+ "model.layers.23.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
193
+ "model.layers.23.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
194
+ "model.layers.23.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
195
+ "model.layers.24.input_layernorm.weight": "model-00002-of-00002.safetensors",
196
+ "model.layers.24.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
197
+ "model.layers.24.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
198
+ "model.layers.24.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
199
+ "model.layers.24.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
200
+ "model.layers.24.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
201
+ "model.layers.24.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
202
+ "model.layers.24.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
203
+ "model.layers.24.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
204
+ "model.layers.24.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
205
+ "model.layers.24.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
206
+ "model.layers.25.input_layernorm.weight": "model-00002-of-00002.safetensors",
207
+ "model.layers.25.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
208
+ "model.layers.25.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
209
+ "model.layers.25.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
210
+ "model.layers.25.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
211
+ "model.layers.25.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
212
+ "model.layers.25.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
213
+ "model.layers.25.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
214
+ "model.layers.25.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
215
+ "model.layers.25.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
216
+ "model.layers.25.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
217
+ "model.layers.26.input_layernorm.weight": "model-00002-of-00002.safetensors",
218
+ "model.layers.26.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
219
+ "model.layers.26.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
220
+ "model.layers.26.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
221
+ "model.layers.26.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
222
+ "model.layers.26.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
223
+ "model.layers.26.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
224
+ "model.layers.26.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
225
+ "model.layers.26.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
226
+ "model.layers.26.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
227
+ "model.layers.26.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
228
+ "model.layers.27.input_layernorm.weight": "model-00002-of-00002.safetensors",
229
+ "model.layers.27.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
230
+ "model.layers.27.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
231
+ "model.layers.27.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
232
+ "model.layers.27.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
233
+ "model.layers.27.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
234
+ "model.layers.27.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
235
+ "model.layers.27.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
236
+ "model.layers.27.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
237
+ "model.layers.27.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
238
+ "model.layers.27.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
239
+ "model.layers.28.input_layernorm.weight": "model-00002-of-00002.safetensors",
240
+ "model.layers.28.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
241
+ "model.layers.28.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
242
+ "model.layers.28.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
243
+ "model.layers.28.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
244
+ "model.layers.28.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
245
+ "model.layers.28.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
246
+ "model.layers.28.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
247
+ "model.layers.28.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
248
+ "model.layers.28.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
249
+ "model.layers.28.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
250
+ "model.layers.29.input_layernorm.weight": "model-00002-of-00002.safetensors",
251
+ "model.layers.29.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
252
+ "model.layers.29.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
253
+ "model.layers.29.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
254
+ "model.layers.29.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
255
+ "model.layers.29.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
256
+ "model.layers.29.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
257
+ "model.layers.29.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
258
+ "model.layers.29.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
259
+ "model.layers.29.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
260
+ "model.layers.29.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
261
+ "model.layers.3.input_layernorm.weight": "model-00001-of-00002.safetensors",
262
+ "model.layers.3.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
263
+ "model.layers.3.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
264
+ "model.layers.3.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
265
+ "model.layers.3.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
266
+ "model.layers.3.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
267
+ "model.layers.3.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
268
+ "model.layers.3.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
269
+ "model.layers.3.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
270
+ "model.layers.3.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
271
+ "model.layers.3.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
272
+ "model.layers.30.input_layernorm.weight": "model-00002-of-00002.safetensors",
273
+ "model.layers.30.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
274
+ "model.layers.30.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
275
+ "model.layers.30.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
276
+ "model.layers.30.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
277
+ "model.layers.30.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
278
+ "model.layers.30.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
279
+ "model.layers.30.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
280
+ "model.layers.30.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
281
+ "model.layers.30.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
282
+ "model.layers.30.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
283
+ "model.layers.31.input_layernorm.weight": "model-00002-of-00002.safetensors",
284
+ "model.layers.31.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
285
+ "model.layers.31.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
286
+ "model.layers.31.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
287
+ "model.layers.31.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
288
+ "model.layers.31.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
289
+ "model.layers.31.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
290
+ "model.layers.31.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
291
+ "model.layers.31.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
292
+ "model.layers.31.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
293
+ "model.layers.31.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
294
+ "model.layers.32.input_layernorm.weight": "model-00002-of-00002.safetensors",
295
+ "model.layers.32.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
296
+ "model.layers.32.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
297
+ "model.layers.32.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
298
+ "model.layers.32.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
299
+ "model.layers.32.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
300
+ "model.layers.32.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
301
+ "model.layers.32.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
302
+ "model.layers.32.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
303
+ "model.layers.32.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
304
+ "model.layers.32.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
305
+ "model.layers.33.input_layernorm.weight": "model-00002-of-00002.safetensors",
306
+ "model.layers.33.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
307
+ "model.layers.33.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
308
+ "model.layers.33.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
309
+ "model.layers.33.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
310
+ "model.layers.33.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
311
+ "model.layers.33.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
312
+ "model.layers.33.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
313
+ "model.layers.33.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
314
+ "model.layers.33.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
315
+ "model.layers.33.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
316
+ "model.layers.34.input_layernorm.weight": "model-00002-of-00002.safetensors",
317
+ "model.layers.34.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
318
+ "model.layers.34.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
319
+ "model.layers.34.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
320
+ "model.layers.34.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
321
+ "model.layers.34.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
322
+ "model.layers.34.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
323
+ "model.layers.34.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
324
+ "model.layers.34.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
325
+ "model.layers.34.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
326
+ "model.layers.34.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
327
+ "model.layers.35.input_layernorm.weight": "model-00002-of-00002.safetensors",
328
+ "model.layers.35.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
329
+ "model.layers.35.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
330
+ "model.layers.35.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
331
+ "model.layers.35.post_attention_layernorm.weight": "model-00002-of-00002.safetensors",
332
+ "model.layers.35.self_attn.k_norm.weight": "model-00002-of-00002.safetensors",
333
+ "model.layers.35.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
334
+ "model.layers.35.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
335
+ "model.layers.35.self_attn.q_norm.weight": "model-00002-of-00002.safetensors",
336
+ "model.layers.35.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
337
+ "model.layers.35.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
338
+ "model.layers.4.input_layernorm.weight": "model-00001-of-00002.safetensors",
339
+ "model.layers.4.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
340
+ "model.layers.4.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
341
+ "model.layers.4.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
342
+ "model.layers.4.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
343
+ "model.layers.4.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
344
+ "model.layers.4.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
345
+ "model.layers.4.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
346
+ "model.layers.4.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
347
+ "model.layers.4.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
348
+ "model.layers.4.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
349
+ "model.layers.5.input_layernorm.weight": "model-00001-of-00002.safetensors",
350
+ "model.layers.5.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
351
+ "model.layers.5.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
352
+ "model.layers.5.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
353
+ "model.layers.5.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
354
+ "model.layers.5.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
355
+ "model.layers.5.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
356
+ "model.layers.5.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
357
+ "model.layers.5.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
358
+ "model.layers.5.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
359
+ "model.layers.5.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
360
+ "model.layers.6.input_layernorm.weight": "model-00001-of-00002.safetensors",
361
+ "model.layers.6.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
362
+ "model.layers.6.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
363
+ "model.layers.6.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
364
+ "model.layers.6.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
365
+ "model.layers.6.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
366
+ "model.layers.6.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
367
+ "model.layers.6.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
368
+ "model.layers.6.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
369
+ "model.layers.6.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
370
+ "model.layers.6.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
371
+ "model.layers.7.input_layernorm.weight": "model-00001-of-00002.safetensors",
372
+ "model.layers.7.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
373
+ "model.layers.7.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
374
+ "model.layers.7.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
375
+ "model.layers.7.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
376
+ "model.layers.7.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
377
+ "model.layers.7.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
378
+ "model.layers.7.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
379
+ "model.layers.7.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
380
+ "model.layers.7.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
381
+ "model.layers.7.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
382
+ "model.layers.8.input_layernorm.weight": "model-00001-of-00002.safetensors",
383
+ "model.layers.8.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
384
+ "model.layers.8.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
385
+ "model.layers.8.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
386
+ "model.layers.8.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
387
+ "model.layers.8.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
388
+ "model.layers.8.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
389
+ "model.layers.8.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
390
+ "model.layers.8.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
391
+ "model.layers.8.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
392
+ "model.layers.8.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
393
+ "model.layers.9.input_layernorm.weight": "model-00001-of-00002.safetensors",
394
+ "model.layers.9.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
395
+ "model.layers.9.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
396
+ "model.layers.9.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
397
+ "model.layers.9.post_attention_layernorm.weight": "model-00001-of-00002.safetensors",
398
+ "model.layers.9.self_attn.k_norm.weight": "model-00001-of-00002.safetensors",
399
+ "model.layers.9.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
400
+ "model.layers.9.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
401
+ "model.layers.9.self_attn.q_norm.weight": "model-00001-of-00002.safetensors",
402
+ "model.layers.9.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
403
+ "model.layers.9.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
404
+ "model.norm.weight": "model-00002-of-00002.safetensors"
405
+ }
406
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
3
+ size 11422654
LLMs/qwen3-4b-base-sft-qwen3-8b/tokenizer_config.json ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ },
181
+ "151665": {
182
+ "content": "<tool_response>",
183
+ "lstrip": false,
184
+ "normalized": false,
185
+ "rstrip": false,
186
+ "single_word": false,
187
+ "special": false
188
+ },
189
+ "151666": {
190
+ "content": "</tool_response>",
191
+ "lstrip": false,
192
+ "normalized": false,
193
+ "rstrip": false,
194
+ "single_word": false,
195
+ "special": false
196
+ },
197
+ "151667": {
198
+ "content": "<think>",
199
+ "lstrip": false,
200
+ "normalized": false,
201
+ "rstrip": false,
202
+ "single_word": false,
203
+ "special": false
204
+ },
205
+ "151668": {
206
+ "content": "</think>",
207
+ "lstrip": false,
208
+ "normalized": false,
209
+ "rstrip": false,
210
+ "single_word": false,
211
+ "special": false
212
+ }
213
+ },
214
+ "additional_special_tokens": [
215
+ "<|im_start|>",
216
+ "<|im_end|>",
217
+ "<|object_ref_start|>",
218
+ "<|object_ref_end|>",
219
+ "<|box_start|>",
220
+ "<|box_end|>",
221
+ "<|quad_start|>",
222
+ "<|quad_end|>",
223
+ "<|vision_start|>",
224
+ "<|vision_end|>",
225
+ "<|vision_pad|>",
226
+ "<|image_pad|>",
227
+ "<|video_pad|>"
228
+ ],
229
+ "bos_token": null,
230
+ "clean_up_tokenization_spaces": false,
231
+ "eos_token": "<|im_end|>",
232
+ "errors": "replace",
233
+ "extra_special_tokens": {},
234
+ "model_max_length": 131072,
235
+ "pad_token": "<|endoftext|>",
236
+ "padding_side": "right",
237
+ "split_special_tokens": false,
238
+ "tokenizer_class": "Qwen2Tokenizer",
239
+ "unk_token": null
240
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/train_results.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 0.34443168771526983,
3
+ "total_flos": 3.429011909561549e+19,
4
+ "train_loss": 0.27564545996983847,
5
+ "train_runtime": 45365.0148,
6
+ "train_samples_per_second": 2.116,
7
+ "train_steps_per_second": 0.066
8
+ }
LLMs/qwen3-4b-base-sft-qwen3-8b/trainer_log.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
LLMs/qwen3-4b-base-sft-qwen3-8b/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
LLMs/qwen3-4b-base-sft-qwen3-8b/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b28ccff420c215e9d7eaa03851e14301ec0e1720a9cca5e39fab81383ec4e4a7
3
+ size 7377
LLMs/qwen3-4b-base-sft-qwen3-8b/training_loss.png ADDED
LLMs/qwen3-4b-base-sft-qwen3-8b/vocab.json ADDED
The diff for this file is too large to render. See raw diff
 
README.md ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # DAPO Math Jacobian matrices
2
+
3
+ Fits averaged Jacobian transport matrices from Anthropic's Jacobian Lens
4
+ method on a local Qwen checkpoint and DAPO Math prompts.
5
+
6
+ For block output `l` and target block output `L`:
7
+
8
+ ```text
9
+ J_l = E_prompt,source-position,future-target-position[d h_L / d h_l]
10
+ ```
11
+
12
+ The estimator follows Anthropic's Apache-2.0
13
+ [`jacobian-lens`](https://github.com/anthropics/jacobian-lens) reference code.
14
+
15
+ ## Layer convention
16
+
17
+ Qwen3-4B has 36 transformer blocks indexed `0..35`. The default target is the
18
+ output of block 35, and matrices are fitted for block outputs `0..34`. The
19
+ target-to-itself map is exactly identity and is included as matrix 35, giving
20
+ one exported matrix for every transformer-block output. The embedding boundary
21
+ is not included in this first version.
22
+
23
+ ## Install and smoke fit
24
+
25
+ ```bash
26
+ python -m pip install -e .
27
+ fit-jacobians \
28
+ --model LLMs/qwen3-4b-base-sft-qwen3-8b \
29
+ --data data/dapo-math-17k/dapo-math-17k.jsonl \
30
+ --num-prompts 20 \
31
+ --dim-batch 8 \
32
+ --output-dir outputs/smoke-20
33
+ ```
34
+
35
+ The resumable checkpoint keeps FP32 sums. `lens-bf16.pt` contains the final
36
+ BF16 means. Increase `--dim-batch` only if GPU memory permits.
37
+
38
+ For the main fit, change `--num-prompts` to `1000` and preferably set
39
+ `--checkpoint-every 10`.
40
+
41
+ ## Multiple GPUs
42
+
43
+ The multi-GPU launcher fits disjoint prompt shards with one complete model
44
+ replica per GPU, then merges the FP32 sums exactly before converting to BF16:
45
+
46
+ ```bash
47
+ GPUS=0,1,2,3 \
48
+ NUM_PROMPTS=1000 \
49
+ OUTPUT_DIR=outputs/main-1000 \
50
+ bash scripts/fit_multi_gpu.sh
51
+ ```
52
+
53
+ For two GPUs and the default 20-prompt smoke test:
54
+
55
+ ```bash
56
+ GPUS=0,1 bash scripts/fit_multi_gpu.sh
57
+ ```
58
+
59
+ Optional variables include `DIM_BATCH`, `MAX_SEQ_LEN`, `CHECKPOINT_EVERY`,
60
+ `MODEL_PATH`, `DATA_PATH`, `SEED`, and `PYTHON_BIN`. Each process sees its
61
+ assigned physical GPU as `cuda:0`. Failed shards retain their checkpoints, so
62
+ running the same command resumes them rather than restarting.
63
+
64
+ This first stage uses question text only. Prompt-plus-rollout windows require a
65
+ separate frozen rollout corpus; adding that corpus is the next stage and does
66
+ not change the Jacobian estimator.
67
+
68
+ ## Interactive sanity check
69
+
70
+ Use held-out samples after the fitting range. For a lens fitted with the first
71
+ 20 seed-17 shuffled prompts:
72
+
73
+ ```bash
74
+ python -m math_jlens.explore \
75
+ --model LLMs/qwen3-4b-base-sft-qwen3-8b \
76
+ --data data/dapo-math-17k/dapo-math-17k.jsonl \
77
+ --lens outputs/multi-gpu-smoke-20/lens-bf16.pt \
78
+ --fit-count 20 \
79
+ --seed 17 \
80
+ --sample-index 0 \
81
+ --device cuda:0
82
+ ```
83
+
84
+ The explorer generates one deterministic solution, caches it, performs a
85
+ teacher-forced residual capture, and opens a prompt. Useful commands:
86
+
87
+ ```text
88
+ tokens [start] [end] show token positions (P=prompt, R=response)
89
+ inspect POSITION [TOP_K] top J-lens tokens across every layer
90
+ compare POSITION LAYER compare J-lens against ordinary logit lens
91
+ trace "TOKEN TEXT" [POSITION] show token ranks across layers
92
+ save START END [LAYER|all] [TOP_K] [FILE]
93
+ export original and J-lens tokens to text
94
+ answer trace the first gold-answer token before output
95
+ problem show the complete DAPO problem
96
+ output show the complete generated solution
97
+ result show extracted answer, ground truth, and match
98
+ info show sample, problem, output, and result together
99
+ sample INDEX load another held-out sample
100
+ next load the next held-out sample
101
+ quit
102
+ ```
103
+
104
+ At activation position `t`, the readout predicts token `t+1`; the interface
105
+ always prints both tokens to prevent an off-by-one interpretation.
106
+
107
+ Examples of text export:
108
+
109
+ ```text
110
+ save 200 220 all layers, top 5, automatic filename
111
+ save 200 220 18 layer 18 only, top 5
112
+ save 200 220 all 10 all layers, top 10
113
+ save 200 220 18 10 report.txt layer 18, top 10, explicit filename
114
+ ```
115
+
116
+ `END` is exclusive. Automatic files are written under
117
+ `outputs/jlens-exports/` and include the original token, next predicted token,
118
+ token IDs, mapped J-lens tokens, ranks, and logits.
data/dapo-math-17k/dapo-math-17k.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc9c39c2aa19177abe9464741e121cf4cac90fd25484ef3cdf86535101e3a5b6
3
+ size 10490834
math_jlens.egg-info/PKG-INFO ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: math-jlens
3
+ Version: 0.1.0
4
+ Requires-Python: >=3.11
5
+ Requires-Dist: torch>=2.6
6
+ Requires-Dist: transformers>=4.53
7
+ Requires-Dist: tqdm>=4.67
math_jlens.egg-info/SOURCES.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ README.md
2
+ pyproject.toml
3
+ math_jlens/__init__.py
4
+ math_jlens/cli.py
5
+ math_jlens/corpus.py
6
+ math_jlens/fitting.py
7
+ math_jlens/hooks.py
8
+ math_jlens/model.py
9
+ math_jlens.egg-info/PKG-INFO
10
+ math_jlens.egg-info/SOURCES.txt
11
+ math_jlens.egg-info/dependency_links.txt
12
+ math_jlens.egg-info/entry_points.txt
13
+ math_jlens.egg-info/requires.txt
14
+ math_jlens.egg-info/top_level.txt
15
+ tests/test_fitting.py
math_jlens.egg-info/dependency_links.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
math_jlens.egg-info/entry_points.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [console_scripts]
2
+ fit-jacobians = math_jlens.cli:main
math_jlens.egg-info/requires.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ torch>=2.6
2
+ transformers>=4.53
3
+ tqdm>=4.67
math_jlens.egg-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ math_jlens
math_jlens/__init__.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ """Math-domain Jacobian lens fitting."""
2
+
3
+ from .fitting import fit, jacobian_for_tokens
4
+
5
+ __all__ = ["fit", "jacobian_for_tokens"]
6
+
math_jlens/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (332 Bytes). View file
 
math_jlens/__pycache__/cli.cpython-311.pyc ADDED
Binary file (4.14 kB). View file
 
math_jlens/__pycache__/corpus.cpython-311.pyc ADDED
Binary file (2.98 kB). View file
 
math_jlens/__pycache__/explore.cpython-311.pyc ADDED
Binary file (34.6 kB). View file
 
math_jlens/__pycache__/fitting.cpython-311.pyc ADDED
Binary file (10.9 kB). View file
 
math_jlens/__pycache__/hooks.cpython-311.pyc ADDED
Binary file (2.88 kB). View file
 
math_jlens/__pycache__/merge.cpython-311.pyc ADDED
Binary file (5.19 kB). View file
 
math_jlens/__pycache__/model.cpython-311.pyc ADDED
Binary file (3.21 kB). View file
 
math_jlens/cli.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Command-line entry point for fitting DAPO Jacobians."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import json
7
+ from pathlib import Path
8
+
9
+ import torch
10
+
11
+ from .corpus import load_dapo_prompts
12
+ from .fitting import fit
13
+ from .model import load_qwen
14
+
15
+
16
+ def build_parser() -> argparse.ArgumentParser:
17
+ command = argparse.ArgumentParser(description=__doc__)
18
+ command.add_argument("--model", required=True)
19
+ command.add_argument("--data", required=True)
20
+ command.add_argument("--output-dir", default="outputs/jacobians")
21
+ command.add_argument("--num-prompts", type=int, default=20)
22
+ command.add_argument("--offset", type=int, default=0)
23
+ command.add_argument("--seed", type=int, default=17)
24
+ command.add_argument("--max-seq-len", type=int, default=128)
25
+ command.add_argument("--skip-first", type=int, default=16)
26
+ command.add_argument("--dim-batch", type=int, default=8)
27
+ command.add_argument("--target-layer", type=int)
28
+ command.add_argument("--checkpoint-every", type=int, default=1)
29
+ command.add_argument("--device", default="cuda")
30
+ command.add_argument("--no-resume", action="store_true")
31
+ return command
32
+
33
+
34
+ def main() -> None:
35
+ args = build_parser().parse_args()
36
+ output = Path(args.output_dir)
37
+ output.mkdir(parents=True, exist_ok=True)
38
+ prompts = load_dapo_prompts(args.data, count=args.num_prompts, seed=args.seed, offset=args.offset)
39
+ model = load_qwen(args.model, device=args.device, dtype=torch.bfloat16)
40
+ target = model.n_layers - 1 if args.target_layer is None else args.target_layer
41
+ configuration = vars(args) | {
42
+ "resolved_target_layer": target, "source_layers": list(range(target)),
43
+ "model_layers": model.n_layers, "d_model": model.d_model,
44
+ }
45
+ (output / "config.json").write_text(json.dumps(configuration, indent=2), encoding="utf-8")
46
+ fit(
47
+ model, prompts, output_path=str(output / "lens-bf16.pt"),
48
+ checkpoint_path=str(output / "fit-checkpoint-fp32.pt"), target_layer=target,
49
+ max_seq_len=args.max_seq_len, dim_batch=args.dim_batch,
50
+ skip_first=args.skip_first, checkpoint_every=args.checkpoint_every,
51
+ resume=not args.no_resume, export_dtype=torch.bfloat16,
52
+ )
53
+
54
+
55
+ if __name__ == "__main__":
56
+ main()
57
+
math_jlens/corpus.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Deterministic sampling from the DAPO Math JSONL corpus."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import random
7
+ from pathlib import Path
8
+
9
+
10
+ def _prompt_text(record: dict) -> str:
11
+ prompt = record.get("prompt")
12
+ if isinstance(prompt, str):
13
+ return prompt
14
+ if isinstance(prompt, list):
15
+ parts = [m["content"] for m in prompt if isinstance(m, dict) and isinstance(m.get("content"), str)]
16
+ if parts:
17
+ return "\n".join(parts)
18
+ raise ValueError("record has no supported prompt field")
19
+
20
+
21
+ def load_dapo_prompts(path: str, *, count: int, seed: int, offset: int = 0) -> list[str]:
22
+ records: list[str] = []
23
+ with Path(path).open(encoding="utf-8") as handle:
24
+ for line_number, line in enumerate(handle, 1):
25
+ try:
26
+ records.append(_prompt_text(json.loads(line)))
27
+ except (json.JSONDecodeError, ValueError) as exc:
28
+ raise ValueError(f"invalid DAPO record on line {line_number}: {exc}") from exc
29
+ random.Random(seed).shuffle(records)
30
+ selected = records[offset:offset + count]
31
+ if len(selected) != count:
32
+ raise ValueError(f"requested {count} prompts at offset {offset}, only {len(selected)} available")
33
+ return selected
34
+
math_jlens/explore.py ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Interactive, on-demand J-lens explorer for held-out DAPO Math samples."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import json
7
+ import random
8
+ import re
9
+ import shlex
10
+ from dataclasses import dataclass
11
+ from pathlib import Path
12
+
13
+ import torch
14
+
15
+ from .model import load_qwen
16
+
17
+
18
+ def extract_boxed(text: str) -> str | None:
19
+ """Return the content of the last balanced ``\\boxed{...}``."""
20
+ marker = r"\boxed{"
21
+ start = text.rfind(marker)
22
+ if start < 0:
23
+ return None
24
+ content_start = start + len(marker)
25
+ depth = 1
26
+ for index in range(content_start, len(text)):
27
+ if text[index] == "{":
28
+ depth += 1
29
+ elif text[index] == "}":
30
+ depth -= 1
31
+ if depth == 0:
32
+ return text[content_start:index]
33
+ return None
34
+
35
+
36
+ def normalize_answer(answer: str | None) -> str | None:
37
+ if answer is None:
38
+ return None
39
+ value = answer.strip().strip("$")
40
+ value = re.sub(r"\\(?:,|!|;|:|quad|qquad)", "", value)
41
+ value = value.replace(" ", "").replace(",", "")
42
+ return value
43
+
44
+
45
+ def response_answer(text: str) -> str | None:
46
+ boxed = extract_boxed(text)
47
+ if boxed is not None:
48
+ return boxed
49
+ matches = re.findall(r"(?im)^\s*Answer\s*:\s*(.+?)\s*$", text)
50
+ return matches[-1] if matches else None
51
+
52
+
53
+ @dataclass(frozen=True)
54
+ class DapoSample:
55
+ original_index: int
56
+ messages: list[dict]
57
+ label: str
58
+
59
+
60
+ def load_held_out_sample(path: str, *, seed: int, fit_count: int, sample_index: int) -> DapoSample:
61
+ records: list[tuple[int, dict]] = []
62
+ with Path(path).open(encoding="utf-8") as handle:
63
+ for index, line in enumerate(handle):
64
+ records.append((index, json.loads(line)))
65
+ random.Random(seed).shuffle(records)
66
+ held_out_index = fit_count + sample_index
67
+ if not 0 <= held_out_index < len(records):
68
+ raise IndexError(f"held-out sample {sample_index} is outside the dataset")
69
+ original_index, record = records[held_out_index]
70
+ prompt = record["prompt"]
71
+ messages = prompt if isinstance(prompt, list) else [{"role": "user", "content": prompt}]
72
+ return DapoSample(original_index, messages, str(record["label"]))
73
+
74
+
75
+ def find_last_subsequence(sequence: list[int], pattern: list[int]) -> int | None:
76
+ if not pattern or len(pattern) > len(sequence):
77
+ return None
78
+ for start in range(len(sequence) - len(pattern), -1, -1):
79
+ if sequence[start:start + len(pattern)] == pattern:
80
+ return start
81
+ return None
82
+
83
+
84
+ class Explorer:
85
+ def __init__(self, args: argparse.Namespace) -> None:
86
+ self.args = args
87
+ self.adapter = load_qwen(args.model, device=args.device, dtype=torch.bfloat16)
88
+ self.model = self.adapter.model
89
+ self.tokenizer = self.adapter.tokenizer
90
+ lens_state = torch.load(args.lens, map_location="cpu", weights_only=True)
91
+ if lens_state["d_model"] != self.adapter.d_model:
92
+ raise ValueError(
93
+ f"lens width {lens_state['d_model']} does not match model width {self.adapter.d_model}"
94
+ )
95
+ self.layer_numbers = sorted(lens_state["J"])
96
+ self.jacobians = {
97
+ int(layer): matrix.to(args.device)
98
+ for layer, matrix in lens_state["J"].items()
99
+ }
100
+ self.cache_dir = Path(args.cache_dir)
101
+ self.cache_dir.mkdir(parents=True, exist_ok=True)
102
+ self.activations: dict[int, torch.Tensor] = {}
103
+ self.sample: DapoSample | None = None
104
+ self.full_ids: torch.Tensor | None = None
105
+ self.prompt_length = 0
106
+ self.response_text = ""
107
+ self.current_position = 0
108
+ self.load_sample(args.sample_index)
109
+
110
+ def _cache_path(self, sample_index: int) -> Path:
111
+ return self.cache_dir / f"seed-{self.args.seed}-fit-{self.args.fit_count}-sample-{sample_index}.json"
112
+
113
+ def _chat_prompt_ids(self, messages: list[dict]) -> torch.Tensor:
114
+ ids = self.tokenizer.apply_chat_template(
115
+ messages,
116
+ tokenize=True,
117
+ add_generation_prompt=True,
118
+ return_tensors="pt",
119
+ )
120
+ return ids.to(self.args.device)
121
+
122
+ @torch.inference_mode()
123
+ def _generate(self, sample: DapoSample) -> tuple[list[int], str]:
124
+ prompt_ids = self._chat_prompt_ids(sample.messages)
125
+ attention_mask = torch.ones_like(prompt_ids)
126
+ generated = self.model.generate(
127
+ input_ids=prompt_ids,
128
+ attention_mask=attention_mask,
129
+ do_sample=False,
130
+ max_new_tokens=self.args.max_new_tokens,
131
+ use_cache=True,
132
+ pad_token_id=self.tokenizer.eos_token_id,
133
+ )
134
+ response_ids = generated[0, prompt_ids.shape[1]:].tolist()
135
+ response = self.tokenizer.decode(response_ids, skip_special_tokens=True)
136
+ return response_ids, response
137
+
138
+ def _load_or_generate(self, sample_index: int, sample: DapoSample) -> tuple[list[int], str]:
139
+ path = self._cache_path(sample_index)
140
+ if path.exists() and not self.args.regenerate:
141
+ cached = json.loads(path.read_text(encoding="utf-8"))
142
+ if cached["original_index"] != sample.original_index:
143
+ raise ValueError(f"cache identity mismatch at {path}")
144
+ return cached["response_ids"], cached["response_text"]
145
+ response_ids, response = self._generate(sample)
146
+ path.write_text(
147
+ json.dumps(
148
+ {
149
+ "sample_index": sample_index,
150
+ "original_index": sample.original_index,
151
+ "label": sample.label,
152
+ "response_ids": response_ids,
153
+ "response_text": response,
154
+ "max_new_tokens": self.args.max_new_tokens,
155
+ "do_sample": False,
156
+ },
157
+ ensure_ascii=False,
158
+ indent=2,
159
+ ),
160
+ encoding="utf-8",
161
+ )
162
+ return response_ids, response
163
+
164
+ @torch.inference_mode()
165
+ def _capture(self, full_ids: torch.Tensor) -> None:
166
+ self.activations.clear()
167
+ handles = []
168
+ for layer, block in enumerate(self.adapter.layers):
169
+ def capture(_module, _inputs, output, layer=layer):
170
+ tensor = output if torch.is_tensor(output) else output[0]
171
+ self.activations[layer] = tensor[0].detach()
172
+ handles.append(block.register_forward_hook(capture))
173
+ try:
174
+ self.adapter.forward(full_ids)
175
+ finally:
176
+ for handle in handles:
177
+ handle.remove()
178
+
179
+ def load_sample(self, sample_index: int) -> None:
180
+ sample = load_held_out_sample(
181
+ self.args.data,
182
+ seed=self.args.seed,
183
+ fit_count=self.args.fit_count,
184
+ sample_index=sample_index,
185
+ )
186
+ prompt_ids = self._chat_prompt_ids(sample.messages)
187
+ response_ids, response = self._load_or_generate(sample_index, sample)
188
+ full_ids = torch.cat(
189
+ [prompt_ids, torch.tensor([response_ids], device=self.args.device)], dim=1
190
+ )
191
+ self._capture(full_ids)
192
+ self.args.sample_index = sample_index
193
+ self.sample = sample
194
+ self.full_ids = full_ids[0]
195
+ self.prompt_length = prompt_ids.shape[1]
196
+ self.response_text = response
197
+ self.current_position = max(0, self.prompt_length - 1)
198
+ print(
199
+ f"Loaded held-out sample {sample_index} (dataset row {sample.original_index})\n"
200
+ f"prompt_tokens={self.prompt_length} response_tokens={len(response_ids)} "
201
+ f"total_tokens={len(self.full_ids)}"
202
+ )
203
+ self.print_result()
204
+
205
+ def problem_text(self) -> str:
206
+ assert self.sample is not None
207
+ parts = []
208
+ for message in self.sample.messages:
209
+ role = str(message.get("role", "unknown")).upper()
210
+ content = str(message.get("content", ""))
211
+ parts.append(f"[{role}]\n{content}")
212
+ return "\n\n".join(parts)
213
+
214
+ def print_problem(self) -> None:
215
+ print("=== Problem ===")
216
+ print(self.problem_text())
217
+
218
+ def print_output(self) -> None:
219
+ print("=== Model output ===")
220
+ print(self.response_text)
221
+
222
+ def print_result(self) -> None:
223
+ assert self.sample is not None
224
+ predicted = response_answer(self.response_text)
225
+ normalized_prediction = normalize_answer(predicted)
226
+ normalized_gold = normalize_answer(self.sample.label)
227
+ correct = normalized_prediction == normalized_gold
228
+ print("=== Answers ===")
229
+ print(f"Extracted: {predicted!r}")
230
+ print(f"Ground truth: {self.sample.label!r}")
231
+ print(f"Correct: {correct}")
232
+
233
+ def print_info(self) -> None:
234
+ assert self.sample is not None
235
+ print(
236
+ f"=== Sample ===\nheld-out index: {self.args.sample_index}\n"
237
+ f"dataset row: {self.sample.original_index}"
238
+ )
239
+ self.print_problem()
240
+ self.print_output()
241
+ self.print_result()
242
+
243
+ def _check_position(self, position: int) -> int:
244
+ assert self.full_ids is not None
245
+ if position < 0:
246
+ position += len(self.full_ids)
247
+ if not 0 <= position < len(self.full_ids) - 1:
248
+ raise ValueError(f"position must be in [0, {len(self.full_ids) - 2}]")
249
+ return position
250
+
251
+ @torch.inference_mode()
252
+ def logits(self, layer: int, position: int, *, use_jacobian: bool = True) -> torch.Tensor:
253
+ residual = self.activations[layer][position]
254
+ if use_jacobian:
255
+ residual = residual @ self.jacobians[layer].T
256
+ residual = self.adapter.decoder.norm(residual)
257
+ return self.model.lm_head(residual).float()
258
+
259
+ def token_label(self, token_id: int) -> str:
260
+ return repr(self.tokenizer.decode([int(token_id)]))
261
+
262
+ def print_tokens(self, start: int | None = None, end: int | None = None) -> None:
263
+ assert self.full_ids is not None
264
+ if start is None:
265
+ start = self.prompt_length
266
+ if end is None:
267
+ end = min(len(self.full_ids), start + 80)
268
+ start = max(0, start)
269
+ end = min(len(self.full_ids), end)
270
+ for position in range(start, end):
271
+ marker = ">" if position == self.current_position else " "
272
+ region = "R" if position >= self.prompt_length else "P"
273
+ print(f"{marker} {position:5d} {region} {self.token_label(self.full_ids[position])}")
274
+
275
+ def inspect(self, position: int, top_k: int = 5) -> None:
276
+ position = self._check_position(position)
277
+ self.current_position = position
278
+ assert self.full_ids is not None
279
+ print(
280
+ f"position={position} current={self.token_label(self.full_ids[position])} "
281
+ f"predicts={self.token_label(self.full_ids[position + 1])}"
282
+ )
283
+ for layer in self.layer_numbers:
284
+ logits = self.logits(layer, position)
285
+ values, ids = logits.topk(top_k)
286
+ decoded = " ".join(
287
+ f"{self.token_label(token_id)}({value:.2f})"
288
+ for token_id, value in zip(ids.tolist(), values.tolist(), strict=True)
289
+ )
290
+ print(f"L{layer:02d} J: {decoded}")
291
+
292
+ def compare(self, position: int, layer: int, top_k: int = 10) -> None:
293
+ position = self._check_position(position)
294
+ if layer not in self.layer_numbers:
295
+ raise ValueError(f"layer must be one of {self.layer_numbers}")
296
+ for name, enabled in (("J-lens", True), ("logit", False)):
297
+ values, ids = self.logits(layer, position, use_jacobian=enabled).topk(top_k)
298
+ decoded = " ".join(
299
+ f"{self.token_label(token_id)}({value:.2f})"
300
+ for token_id, value in zip(ids.tolist(), values.tolist(), strict=True)
301
+ )
302
+ print(f"{name:7s}: {decoded}")
303
+
304
+ @torch.inference_mode()
305
+ def save_interval(
306
+ self,
307
+ start: int,
308
+ end: int,
309
+ layer: int | None = None,
310
+ top_k: int = 5,
311
+ output_path: str | None = None,
312
+ ) -> Path:
313
+ """Export original tokens and their J-lens mappings for ``[start, end)``."""
314
+ assert self.full_ids is not None and self.sample is not None
315
+ if start < 0 or end <= start or end > len(self.full_ids) - 1:
316
+ raise ValueError(
317
+ f"require 0 <= START < END <= {len(self.full_ids) - 1}; "
318
+ "END is exclusive"
319
+ )
320
+ if top_k < 1:
321
+ raise ValueError("TOP_K must be positive")
322
+ layers = self.layer_numbers if layer is None else [layer]
323
+ if any(item not in self.layer_numbers for item in layers):
324
+ raise ValueError(f"layer must be one of {self.layer_numbers}, or 'all'")
325
+
326
+ layer_label = "all" if layer is None else str(layer)
327
+ if output_path is None:
328
+ output = Path(self.args.export_dir) / (
329
+ f"sample-{self.args.sample_index}-tokens-{start}-{end}-layer-{layer_label}.txt"
330
+ )
331
+ else:
332
+ output = Path(output_path)
333
+ output.parent.mkdir(parents=True, exist_ok=True)
334
+
335
+ lines = [
336
+ "J-lens token interval export",
337
+ f"held_out_sample: {self.args.sample_index}",
338
+ f"dataset_row: {self.sample.original_index}",
339
+ f"ground_truth: {self.sample.label!r}",
340
+ f"token_interval: [{start}, {end})",
341
+ f"layers: {layer_label}",
342
+ f"top_k: {top_k}",
343
+ "convention: activation at position t predicts token at t+1",
344
+ "",
345
+ ]
346
+ for position in range(start, end):
347
+ current_id = int(self.full_ids[position])
348
+ next_id = int(self.full_ids[position + 1])
349
+ region = "response" if position >= self.prompt_length else "prompt"
350
+ lines.extend(
351
+ [
352
+ f"POSITION {position} ({region})",
353
+ f" original: id={current_id} token={self.token_label(current_id)}",
354
+ f" predicts: id={next_id} token={self.token_label(next_id)}",
355
+ ]
356
+ )
357
+ for layer_number in layers:
358
+ values, ids = self.logits(layer_number, position).topk(top_k)
359
+ mapped = " | ".join(
360
+ f"rank={rank} id={token_id} token={self.token_label(token_id)} logit={value:.4f}"
361
+ for rank, (token_id, value) in enumerate(
362
+ zip(ids.tolist(), values.tolist(), strict=True), start=1
363
+ )
364
+ )
365
+ lines.append(f" L{layer_number:02d}: {mapped}")
366
+ lines.append("")
367
+ output.write_text("\n".join(lines), encoding="utf-8")
368
+ print(f"saved {end - start} positions × {len(layers)} layers to {output}")
369
+ return output
370
+
371
+ def _token_ids(self, text: str) -> list[int]:
372
+ return self.tokenizer.encode(text, add_special_tokens=False)
373
+
374
+ def trace(self, text: str, position: int | None = None) -> None:
375
+ position = self.current_position if position is None else self._check_position(position)
376
+ ids = self._token_ids(text)
377
+ if not ids:
378
+ raise ValueError("text tokenized to no tokens")
379
+ print(f"trace text={text!r} ids={ids} at position={position}")
380
+ for layer in self.layer_numbers:
381
+ logits = self.logits(layer, position)
382
+ details = []
383
+ for token_id in ids:
384
+ rank = 1 + int((logits > logits[token_id]).sum().item())
385
+ details.append(f"{self.token_label(token_id)} rank={rank} logit={logits[token_id]:.2f}")
386
+ print(f"L{layer:02d}: {'; '.join(details)}")
387
+
388
+ def answer_trace(self) -> None:
389
+ assert self.sample is not None and self.full_ids is not None
390
+ full_list = self.full_ids.tolist()
391
+ candidates = [self.sample.label, " " + self.sample.label]
392
+ match = None
393
+ matched_ids = None
394
+ for candidate in candidates:
395
+ ids = self._token_ids(candidate)
396
+ found = find_last_subsequence(full_list[self.prompt_length:], ids)
397
+ if found is not None:
398
+ match = self.prompt_length + found
399
+ matched_ids = ids
400
+ break
401
+ if match is None or matched_ids is None:
402
+ print(f"Gold answer {self.sample.label!r} was not found as a token sequence in the response")
403
+ return
404
+ activation_position = match - 1
405
+ print(
406
+ f"gold answer starts at token position {match}; inspecting position "
407
+ f"{activation_position}, which predicts its first token"
408
+ )
409
+ self.trace(self.tokenizer.decode([matched_ids[0]]), activation_position)
410
+
411
+ def repl(self) -> None:
412
+ print("Type 'help' for commands.")
413
+ while True:
414
+ try:
415
+ raw = input("jlens> ").strip()
416
+ if not raw:
417
+ continue
418
+ parts = shlex.split(raw)
419
+ command, values = parts[0].lower(), parts[1:]
420
+ if command in {"quit", "exit", "q"}:
421
+ return
422
+ if command == "help":
423
+ print(
424
+ "tokens [start] [end]\ninspect POSITION [TOP_K]\n"
425
+ "compare POSITION LAYER [TOP_K]\ntrace TEXT [POSITION]\n"
426
+ "save START END [LAYER|all] [TOP_K] [FILE]\n"
427
+ "problem\noutput\nresult\ninfo\nanswer\n"
428
+ "sample INDEX\nnext\nquit"
429
+ )
430
+ elif command == "tokens":
431
+ self.print_tokens(*(int(value) for value in values))
432
+ elif command == "inspect":
433
+ self.inspect(int(values[0]), int(values[1]) if len(values) > 1 else 5)
434
+ elif command == "compare":
435
+ self.compare(int(values[0]), int(values[1]), int(values[2]) if len(values) > 2 else 10)
436
+ elif command == "trace":
437
+ self.trace(values[0], int(values[1]) if len(values) > 1 else None)
438
+ elif command == "save":
439
+ if len(values) < 2:
440
+ raise ValueError(
441
+ "usage: save START END [LAYER|all] [TOP_K] [FILE]"
442
+ )
443
+ chosen_layer = None
444
+ if len(values) > 2 and values[2].lower() != "all":
445
+ chosen_layer = int(values[2])
446
+ chosen_top_k = int(values[3]) if len(values) > 3 else 5
447
+ chosen_file = values[4] if len(values) > 4 else None
448
+ self.save_interval(
449
+ int(values[0]), int(values[1]), chosen_layer,
450
+ chosen_top_k, chosen_file,
451
+ )
452
+ elif command == "answer":
453
+ self.answer_trace()
454
+ elif command == "problem":
455
+ self.print_problem()
456
+ elif command == "output":
457
+ self.print_output()
458
+ elif command == "result":
459
+ self.print_result()
460
+ elif command == "sample":
461
+ self.load_sample(int(values[0]))
462
+ elif command == "next":
463
+ self.load_sample(self.args.sample_index + 1)
464
+ elif command == "info":
465
+ self.print_info()
466
+ else:
467
+ print(f"unknown command: {command}")
468
+ except (IndexError, ValueError) as exc:
469
+ print(f"error: {exc}")
470
+ except KeyboardInterrupt:
471
+ print("\nUse 'quit' to exit.")
472
+
473
+
474
+ def build_parser() -> argparse.ArgumentParser:
475
+ parser = argparse.ArgumentParser(description=__doc__)
476
+ parser.add_argument("--model", required=True)
477
+ parser.add_argument("--data", required=True)
478
+ parser.add_argument("--lens", required=True)
479
+ parser.add_argument("--fit-count", type=int, required=True)
480
+ parser.add_argument("--seed", type=int, default=17)
481
+ parser.add_argument("--sample-index", type=int, default=0)
482
+ parser.add_argument("--device", default="cuda:0")
483
+ parser.add_argument("--max-new-tokens", type=int, default=2048)
484
+ parser.add_argument("--cache-dir", default="outputs/explorer-cache")
485
+ parser.add_argument("--export-dir", default="outputs/jlens-exports")
486
+ parser.add_argument("--regenerate", action="store_true")
487
+ return parser
488
+
489
+
490
+ def main() -> None:
491
+ Explorer(build_parser().parse_args()).repl()
492
+
493
+
494
+ if __name__ == "__main__":
495
+ main()
math_jlens/fitting.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Averaged input-output Jacobian estimator.
2
+
3
+ This matches Anthropic's released Jacobian Lens estimator (Apache-2.0): each
4
+ cotangent row is injected at every valid target position, and source-position
5
+ gradients are averaged. ``dim_batch`` rows are computed in parallel.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import math
11
+ import os
12
+ from collections.abc import Sequence
13
+ from pathlib import Path
14
+
15
+ import torch
16
+ from tqdm import tqdm
17
+
18
+ from .hooks import ActivationRecorder
19
+
20
+
21
+ def valid_position_mask(seq_len: int, skip_first: int = 16) -> torch.Tensor:
22
+ if skip_first < 0:
23
+ raise ValueError("skip_first must be nonnegative")
24
+ mask = torch.zeros(seq_len, dtype=torch.bool)
25
+ mask[skip_first:seq_len - 1] = True
26
+ if not mask.any():
27
+ raise ValueError(f"sequence length {seq_len} leaves no positions after skip_first={skip_first}")
28
+ return mask
29
+
30
+
31
+ def jacobian_for_tokens(
32
+ model,
33
+ input_ids: torch.Tensor,
34
+ *,
35
+ source_layers: Sequence[int],
36
+ target_layer: int,
37
+ dim_batch: int = 8,
38
+ skip_first: int = 16,
39
+ ) -> tuple[dict[int, torch.Tensor], int]:
40
+ """Return per-prompt FP32 CPU Jacobians and valid-position count."""
41
+ sources = sorted(set(source_layers))
42
+ if not sources or sources[0] < 0 or sources[-1] >= target_layer:
43
+ raise ValueError("source layers must be nonempty and below target_layer")
44
+ if target_layer >= model.n_layers:
45
+ raise ValueError("target_layer is outside the model")
46
+ if dim_batch < 1:
47
+ raise ValueError("dim_batch must be positive")
48
+
49
+ width = model.d_model
50
+ mask = valid_position_mask(input_ids.shape[1], skip_first)
51
+ jacobians = {layer: torch.zeros(width, width, dtype=torch.float32) for layer in sources}
52
+ passes = math.ceil(width / dim_batch)
53
+
54
+ with ActivationRecorder(model.layers, at=[*sources, target_layer], start_graph_at=sources[0]) as recorder, torch.enable_grad():
55
+ model.forward(input_ids.expand(dim_batch, -1))
56
+ target = recorder.activations[target_layer]
57
+ source_activations = [recorder.activations[layer] for layer in sources]
58
+ positions = mask.nonzero(as_tuple=True)[0].to(target.device)
59
+ batch_indices = torch.arange(dim_batch, device=target.device)
60
+ cotangent = torch.zeros_like(target)
61
+
62
+ for pass_index, start in enumerate(range(0, width, dim_batch)):
63
+ row_count = min(dim_batch, width - start)
64
+ cotangent.zero_()
65
+ cotangent[
66
+ batch_indices[:row_count, None], positions[None, :],
67
+ start + batch_indices[:row_count, None],
68
+ ] = 1
69
+ gradients = torch.autograd.grad(
70
+ outputs=target, inputs=source_activations, grad_outputs=cotangent,
71
+ retain_graph=pass_index < passes - 1,
72
+ )
73
+ for layer, gradient in zip(sources, gradients, strict=True):
74
+ local_positions = positions.to(gradient.device)
75
+ rows = gradient[:row_count, local_positions, :].float().mean(dim=1)
76
+ jacobians[layer][start:start + row_count] = rows.cpu()
77
+ return jacobians, int(mask.sum())
78
+
79
+
80
+ def _atomic_save(state: dict, path: Path) -> None:
81
+ path.parent.mkdir(parents=True, exist_ok=True)
82
+ temporary = path.with_suffix(path.suffix + f".tmp.{os.getpid()}")
83
+ torch.save(state, temporary)
84
+ os.replace(temporary, path)
85
+
86
+
87
+ def fit(
88
+ model,
89
+ prompts: Sequence[str],
90
+ *,
91
+ output_path: str,
92
+ checkpoint_path: str,
93
+ source_layers: Sequence[int] | None = None,
94
+ target_layer: int | None = None,
95
+ max_seq_len: int = 128,
96
+ dim_batch: int = 8,
97
+ skip_first: int = 16,
98
+ checkpoint_every: int = 1,
99
+ resume: bool = True,
100
+ export_dtype: torch.dtype = torch.bfloat16,
101
+ ) -> dict:
102
+ """Fit, checkpoint FP32 sums, and export BF16 averaged matrices."""
103
+ target = model.n_layers - 1 if target_layer is None else target_layer
104
+ sources = list(range(target)) if source_layers is None else sorted(set(source_layers))
105
+ checkpoint = Path(checkpoint_path)
106
+ metadata_keys = ("source_layers", "target_layer", "d_model", "max_seq_len", "skip_first")
107
+ expected = (sources, target, model.d_model, max_seq_len, skip_first)
108
+
109
+ if resume and checkpoint.exists():
110
+ state = torch.load(checkpoint, map_location="cpu", weights_only=True)
111
+ actual = tuple(state[key] for key in metadata_keys)
112
+ if actual != expected:
113
+ raise ValueError(f"checkpoint configuration mismatch: {actual} != {expected}")
114
+ else:
115
+ state = {
116
+ "jacobian_sum": {layer: torch.zeros(model.d_model, model.d_model, dtype=torch.float32) for layer in sources},
117
+ "n_done": 0, "next_index": 0, "source_layers": sources,
118
+ "target_layer": target, "d_model": model.d_model,
119
+ "max_seq_len": max_seq_len, "skip_first": skip_first,
120
+ }
121
+
122
+ progress = tqdm(range(state["next_index"], len(prompts)), desc="fitting prompts")
123
+ for index in progress:
124
+ input_ids = model.encode(prompts[index], max_seq_len)
125
+ try:
126
+ per_prompt, n_valid = jacobian_for_tokens(
127
+ model, input_ids, source_layers=sources, target_layer=target,
128
+ dim_batch=dim_batch, skip_first=skip_first,
129
+ )
130
+ except ValueError as exc:
131
+ progress.write(f"skipping prompt {index}: {exc}")
132
+ state["next_index"] = index + 1
133
+ continue
134
+ for layer in sources:
135
+ state["jacobian_sum"][layer].add_(per_prompt[layer])
136
+ state["n_done"] += 1
137
+ state["next_index"] = index + 1
138
+ progress.set_postfix(valid=n_valid, completed=state["n_done"])
139
+ if checkpoint_every and state["n_done"] % checkpoint_every == 0:
140
+ _atomic_save(state, checkpoint)
141
+
142
+ _atomic_save(state, checkpoint)
143
+ if state["n_done"] == 0:
144
+ raise ValueError("no usable prompts were fitted")
145
+ exported = {
146
+ layer: (total / state["n_done"]).to(export_dtype)
147
+ for layer, total in state["jacobian_sum"].items()
148
+ }
149
+ # The transport from the target block output to itself is exactly identity.
150
+ # Include it so consumers have one matrix for every block-output boundary.
151
+ exported[target] = torch.eye(model.d_model, dtype=export_dtype)
152
+ result = {
153
+ "J": exported,
154
+ "n_prompts": state["n_done"], "source_layers": sources,
155
+ "target_layer": target, "d_model": model.d_model,
156
+ "max_seq_len": max_seq_len, "skip_first": skip_first,
157
+ "dtype": str(export_dtype), "target_is_identity": True,
158
+ }
159
+ _atomic_save(result, Path(output_path))
160
+ return result
math_jlens/hooks.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Forward hooks for residual-stream block outputs.
2
+
3
+ The estimator follows Anthropic's Apache-2.0 Jacobian Lens reference method:
4
+ https://github.com/anthropics/jacobian-lens
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import Iterable, Sequence
10
+
11
+ import torch
12
+ from torch import nn
13
+
14
+
15
+ class ActivationRecorder:
16
+ def __init__(self, blocks: Sequence[nn.Module], at: Iterable[int], *, start_graph_at: int) -> None:
17
+ self.blocks = blocks
18
+ self.indices = sorted(set(at) | {start_graph_at})
19
+ self.start_graph_at = start_graph_at
20
+ self.activations: dict[int, torch.Tensor] = {}
21
+ self.handles: list[torch.utils.hooks.RemovableHandle] = []
22
+
23
+ def _hook(self, index: int):
24
+ def record(_module, _inputs, output) -> None:
25
+ tensor = output if torch.is_tensor(output) else output[0]
26
+ if index == self.start_graph_at:
27
+ tensor.requires_grad_(True)
28
+ self.activations[index] = tensor
29
+ return record
30
+
31
+ def __enter__(self) -> "ActivationRecorder":
32
+ for index in self.indices:
33
+ self.handles.append(self.blocks[index].register_forward_hook(self._hook(index)))
34
+ return self
35
+
36
+ def __exit__(self, *_exc) -> None:
37
+ for handle in self.handles:
38
+ handle.remove()
39
+ self.handles.clear()
40
+
math_jlens/merge.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Merge data-parallel FP32 fitting checkpoints into one BF16 lens."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ from pathlib import Path
7
+
8
+ import torch
9
+
10
+ from .fitting import _atomic_save
11
+
12
+
13
+ METADATA_KEYS = (
14
+ "source_layers",
15
+ "target_layer",
16
+ "d_model",
17
+ "max_seq_len",
18
+ "skip_first",
19
+ )
20
+
21
+
22
+ def merge_checkpoints(paths: list[str], output_path: str) -> dict:
23
+ if not paths:
24
+ raise ValueError("at least one checkpoint is required")
25
+ first = torch.load(paths[0], map_location="cpu", weights_only=True)
26
+ reference = tuple(first[key] for key in METADATA_KEYS)
27
+ if first["n_done"] <= 0:
28
+ raise ValueError("every shard must contain at least one completed prompt")
29
+ sources = first["source_layers"]
30
+ target = first["target_layer"]
31
+ d_model = first["d_model"]
32
+ totals = {layer: tensor.clone() for layer, tensor in first["jacobian_sum"].items()}
33
+ shard_counts = [first["n_done"]]
34
+ del first
35
+
36
+ for path in paths[1:]:
37
+ state = torch.load(path, map_location="cpu", weights_only=True)
38
+ metadata = tuple(state[key] for key in METADATA_KEYS)
39
+ if metadata != reference:
40
+ raise ValueError(f"checkpoint metadata mismatch in {path}: {metadata} != {reference}")
41
+ if state["n_done"] <= 0:
42
+ raise ValueError("every shard must contain at least one completed prompt")
43
+ for layer in sources:
44
+ totals[layer].add_(state["jacobian_sum"][layer])
45
+ shard_counts.append(state["n_done"])
46
+ del state
47
+
48
+ total_prompts = sum(shard_counts)
49
+ means = {layer: (total / total_prompts).to(torch.bfloat16) for layer, total in totals.items()}
50
+ means[target] = torch.eye(d_model, dtype=torch.bfloat16)
51
+
52
+ result = {
53
+ "J": means,
54
+ "n_prompts": total_prompts,
55
+ "source_layers": sources,
56
+ "target_layer": target,
57
+ "d_model": d_model,
58
+ "max_seq_len": reference[3],
59
+ "skip_first": reference[4],
60
+ "dtype": str(torch.bfloat16),
61
+ "target_is_identity": True,
62
+ "merged_from": [str(Path(path)) for path in paths],
63
+ "shard_prompt_counts": shard_counts,
64
+ }
65
+ _atomic_save(result, Path(output_path))
66
+ return result
67
+
68
+
69
+ def main() -> None:
70
+ parser = argparse.ArgumentParser(description=__doc__)
71
+ parser.add_argument("--checkpoints", nargs="+", required=True)
72
+ parser.add_argument("--output", required=True)
73
+ args = parser.parse_args()
74
+ result = merge_checkpoints(args.checkpoints, args.output)
75
+ print(f"merged {len(args.checkpoints)} shards and {result['n_prompts']} prompts into {args.output}")
76
+
77
+
78
+ if __name__ == "__main__":
79
+ main()
math_jlens/model.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Minimal Hugging Face adapter for Qwen decoder-only models."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ import torch
8
+ from torch import nn
9
+
10
+
11
+ class QwenLensModel:
12
+ def __init__(self, model: nn.Module, tokenizer: Any) -> None:
13
+ self.model = model
14
+ self.tokenizer = tokenizer
15
+ self.decoder = model.model
16
+ self.layers = self.decoder.layers
17
+ self.n_layers = len(self.layers)
18
+ self.d_model = model.config.hidden_size
19
+ model.eval()
20
+ for parameter in model.parameters():
21
+ parameter.requires_grad_(False)
22
+
23
+ @property
24
+ def input_device(self) -> torch.device:
25
+ return self.decoder.embed_tokens.weight.device
26
+
27
+ def forward(self, input_ids: torch.Tensor) -> Any:
28
+ return self.decoder(input_ids=input_ids, use_cache=False)
29
+
30
+ def encode(self, text: str, max_length: int) -> torch.Tensor:
31
+ encoded = self.tokenizer(
32
+ text, return_tensors="pt", truncation=True, max_length=max_length,
33
+ add_special_tokens=True,
34
+ )
35
+ return encoded.input_ids.to(self.input_device)
36
+
37
+
38
+ def load_qwen(model_path: str, *, device: str, dtype: torch.dtype) -> QwenLensModel:
39
+ """Load a complete local checkpoint without network requests."""
40
+ from transformers import AutoModelForCausalLM, AutoTokenizer
41
+
42
+ tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
43
+ model = AutoModelForCausalLM.from_pretrained(
44
+ model_path, local_files_only=True, torch_dtype=dtype
45
+ ).to(device)
46
+ return QwenLensModel(model, tokenizer)
47
+
outputs/explorer-cache/seed-17-fit-20-sample-0.json ADDED
@@ -0,0 +1,2058 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "sample_index": 0,
3
+ "original_index": 8040,
4
+ "label": "31",
5
+ "response_ids": [
6
+ 151667,
7
+ 198,
8
+ 32313,
9
+ 11,
10
+ 773,
11
+ 358,
12
+ 1184,
13
+ 311,
14
+ 11625,
15
+ 419,
16
+ 1849,
17
+ 315,
18
+ 37906,
19
+ 448,
20
+ 2326,
21
+ 7332,
22
+ 856,
23
+ 11,
24
+ 379,
25
+ 11,
26
+ 1147,
27
+ 13,
28
+ 2009,
29
+ 315,
30
+ 1105,
31
+ 525,
32
+ 6785,
33
+ 1931,
34
+ 5109,
35
+ 13,
36
+ 576,
37
+ 37906,
38
+ 525,
39
+ 1447,
40
+ 16,
41
+ 13,
42
+ 400,
43
+ 856,
44
+ 7021,
45
+ 61,
46
+ 17,
47
+ 488,
48
+ 379,
49
+ 89,
50
+ 488,
51
+ 1147,
52
+ 61,
53
+ 17,
54
+ 8,
55
+ 284,
56
+ 220,
57
+ 18,
58
+ 88,
59
+ 488,
60
+ 220,
61
+ 16,
62
+ 15,
63
+ 89,
64
+ 24437,
65
+ 17,
66
+ 13,
67
+ 400,
68
+ 379,
69
+ 13174,
70
+ 61,
71
+ 17,
72
+ 488,
73
+ 71322,
74
+ 488,
75
+ 856,
76
+ 61,
77
+ 17,
78
+ 8,
79
+ 284,
80
+ 220,
81
+ 17,
82
+ 16,
83
+ 89,
84
+ 488,
85
+ 220,
86
+ 17,
87
+ 19,
88
+ 87,
89
+ 24437,
90
+ 18,
91
+ 13,
92
+ 400,
93
+ 1147,
94
+ 2075,
95
+ 61,
96
+ 17,
97
+ 488,
98
+ 30784,
99
+ 488,
100
+ 379,
101
+ 61,
102
+ 17,
103
+ 8,
104
+ 284,
105
+ 220,
106
+ 22,
107
+ 87,
108
+ 488,
109
+ 220,
110
+ 17,
111
+ 23,
112
+ 88,
113
+ 84500,
114
+ 3036,
115
+ 279,
116
+ 5795,
117
+ 374,
118
+ 311,
119
+ 1477,
120
+ 400,
121
+ 30784,
122
+ 488,
123
+ 379,
124
+ 89,
125
+ 488,
126
+ 71322,
127
+ 400,
128
+ 382,
129
+ 80022,
130
+ 11,
131
+ 1493,
132
+ 37906,
133
+ 1401,
134
+ 5020,
135
+ 54343,
136
+ 11,
137
+ 714,
138
+ 807,
139
+ 7629,
140
+ 944,
141
+ 6896,
142
+ 54343,
143
+ 13,
144
+ 8886,
145
+ 23606,
146
+ 702,
147
+ 264,
148
+ 76002,
149
+ 58441,
150
+ 315,
151
+ 7332,
152
+ 13,
153
+ 10696,
154
+ 1052,
155
+ 594,
156
+ 264,
157
+ 1616,
158
+ 311,
159
+ 32194,
160
+ 429,
161
+ 45120,
162
+ 30,
163
+ 6771,
164
+ 752,
165
+ 1744,
166
+ 382,
167
+ 5338,
168
+ 11,
169
+ 1077,
170
+ 752,
171
+ 5185,
172
+ 429,
173
+ 1817,
174
+ 23606,
175
+ 702,
176
+ 264,
177
+ 79151,
178
+ 4647,
179
+ 304,
180
+ 279,
181
+ 2115,
182
+ 24413,
183
+ 3108,
184
+ 320,
185
+ 43,
186
+ 11961,
187
+ 8,
188
+ 323,
189
+ 13482,
190
+ 3793,
191
+ 389,
192
+ 279,
193
+ 1290,
194
+ 24413,
195
+ 3108,
196
+ 320,
197
+ 49,
198
+ 11961,
199
+ 568,
200
+ 576,
201
+ 79151,
202
+ 3793,
203
+ 525,
204
+ 315,
205
+ 279,
206
+ 1352,
207
+ 400,
208
+ 264,
209
+ 61,
210
+ 17,
211
+ 488,
212
+ 668,
213
+ 488,
214
+ 293,
215
+ 61,
216
+ 17,
217
+ 400,
218
+ 11,
219
+ 892,
220
+ 374,
221
+ 264,
222
+ 4185,
223
+ 7493,
224
+ 304,
225
+ 54343,
226
+ 37906,
227
+ 13,
228
+ 10696,
229
+ 358,
230
+ 646,
231
+ 28143,
232
+ 1493,
233
+ 37906,
234
+ 16925,
235
+ 1939,
236
+ 92014,
237
+ 11,
238
+ 7196,
239
+ 358,
240
+ 646,
241
+ 9658,
242
+ 1045,
243
+ 11341,
244
+ 1948,
245
+ 856,
246
+ 11,
247
+ 379,
248
+ 11,
249
+ 1147,
250
+ 30,
251
+ 1752,
252
+ 3110,
253
+ 11,
254
+ 22477,
255
+ 429,
256
+ 856,
257
+ 11,
258
+ 379,
259
+ 11,
260
+ 1147,
261
+ 525,
262
+ 54172,
263
+ 311,
264
+ 1045,
265
+ 18021,
266
+ 13,
267
+ 6771,
268
+ 752,
269
+ 1430,
270
+ 311,
271
+ 9658,
272
+ 429,
273
+ 856,
274
+ 284,
275
+ 595,
276
+ 353,
277
+ 264,
278
+ 11,
279
+ 379,
280
+ 284,
281
+ 595,
282
+ 353,
283
+ 293,
284
+ 11,
285
+ 1147,
286
+ 284,
287
+ 595,
288
+ 353,
289
+ 272,
290
+ 11,
291
+ 1380,
292
+ 264,
293
+ 11,
294
+ 293,
295
+ 11,
296
+ 272,
297
+ 525,
298
+ 18021,
299
+ 323,
300
+ 595,
301
+ 374,
302
+ 264,
303
+ 6785,
304
+ 1931,
305
+ 1372,
306
+ 13,
307
+ 5005,
308
+ 11,
309
+ 31334,
310
+ 10607,
311
+ 1119,
312
+ 279,
313
+ 37906,
314
+ 11,
315
+ 7196,
316
+ 358,
317
+ 646,
318
+ 1477,
319
+ 264,
320
+ 5025,
321
+ 1948,
322
+ 264,
323
+ 11,
324
+ 293,
325
+ 11,
326
+ 272,
327
+ 1939,
328
+ 3983,
329
+ 1573,
330
+ 29002,
331
+ 1119,
332
+ 429,
333
+ 11,
334
+ 1077,
335
+ 752,
336
+ 1779,
337
+ 421,
338
+ 1052,
339
+ 594,
340
+ 264,
341
+ 48968,
342
+ 476,
343
+ 33686,
344
+ 429,
345
+ 646,
346
+ 39721,
347
+ 279,
348
+ 37906,
349
+ 13,
350
+ 6771,
351
+ 752,
352
+ 1401,
353
+ 518,
354
+ 279,
355
+ 37906,
356
+ 1549,
357
+ 1447,
358
+ 24509,
359
+ 367,
360
+ 220,
361
+ 16,
362
+ 25,
363
+ 400,
364
+ 856,
365
+ 7021,
366
+ 61,
367
+ 17,
368
+ 488,
369
+ 379,
370
+ 89,
371
+ 488,
372
+ 1147,
373
+ 61,
374
+ 17,
375
+ 8,
376
+ 284,
377
+ 220,
378
+ 18,
379
+ 88,
380
+ 488,
381
+ 220,
382
+ 16,
383
+ 15,
384
+ 89,
385
+ 84500,
386
+ 24509,
387
+ 367,
388
+ 220,
389
+ 17,
390
+ 25,
391
+ 400,
392
+ 379,
393
+ 13174,
394
+ 61,
395
+ 17,
396
+ 488,
397
+ 71322,
398
+ 488,
399
+ 856,
400
+ 61,
401
+ 17,
402
+ 8,
403
+ 284,
404
+ 220,
405
+ 17,
406
+ 16,
407
+ 89,
408
+ 488,
409
+ 220,
410
+ 17,
411
+ 19,
412
+ 87,
413
+ 84500,
414
+ 24509,
415
+ 367,
416
+ 220,
417
+ 18,
418
+ 25,
419
+ 400,
420
+ 1147,
421
+ 2075,
422
+ 61,
423
+ 17,
424
+ 488,
425
+ 30784,
426
+ 488,
427
+ 379,
428
+ 61,
429
+ 17,
430
+ 8,
431
+ 284,
432
+ 220,
433
+ 22,
434
+ 87,
435
+ 488,
436
+ 220,
437
+ 17,
438
+ 23,
439
+ 88,
440
+ 84500,
441
+ 22464,
442
+ 518,
443
+ 279,
444
+ 36829,
445
+ 389,
446
+ 279,
447
+ 73832,
448
+ 25,
449
+ 220,
450
+ 18,
451
+ 11,
452
+ 220,
453
+ 16,
454
+ 15,
455
+ 26,
456
+ 220,
457
+ 17,
458
+ 16,
459
+ 11,
460
+ 220,
461
+ 17,
462
+ 19,
463
+ 26,
464
+ 220,
465
+ 22,
466
+ 11,
467
+ 220,
468
+ 17,
469
+ 23,
470
+ 13,
471
+ 13824,
472
+ 11,
473
+ 220,
474
+ 17,
475
+ 16,
476
+ 323,
477
+ 220,
478
+ 17,
479
+ 19,
480
+ 614,
481
+ 264,
482
+ 4185,
483
+ 8168,
484
+ 315,
485
+ 220,
486
+ 18,
487
+ 11,
488
+ 220,
489
+ 22,
490
+ 323,
491
+ 220,
492
+ 17,
493
+ 23,
494
+ 614,
495
+ 264,
496
+ 4185,
497
+ 8168,
498
+ 315,
499
+ 220,
500
+ 22,
501
+ 13,
502
+ 10696,
503
+ 1052,
504
+ 594,
505
+ 264,
506
+ 5383,
507
+ 1588,
508
+ 1939,
509
+ 92014,
510
+ 11,
511
+ 7196,
512
+ 358,
513
+ 646,
514
+ 21749,
515
+ 279,
516
+ 37906,
517
+ 553,
518
+ 2494,
519
+ 30,
520
+ 6771,
521
+ 752,
522
+ 1779,
523
+ 279,
524
+ 36829,
525
+ 1549,
526
+ 13,
527
+ 1752,
528
+ 3110,
529
+ 11,
530
+ 23606,
531
+ 220,
532
+ 17,
533
+ 702,
534
+ 220,
535
+ 17,
536
+ 16,
537
+ 89,
538
+ 488,
539
+ 220,
540
+ 17,
541
+ 19,
542
+ 87,
543
+ 13,
544
+ 1416,
545
+ 358,
546
+ 8168,
547
+ 220,
548
+ 18,
549
+ 11,
550
+ 432,
551
+ 594,
552
+ 220,
553
+ 18,
554
+ 6599,
555
+ 22,
556
+ 89,
557
+ 488,
558
+ 220,
559
+ 23,
560
+ 87,
561
+ 568,
562
+ 34239,
563
+ 11,
564
+ 23606,
565
+ 220,
566
+ 18,
567
+ 702,
568
+ 220,
569
+ 22,
570
+ 87,
571
+ 488,
572
+ 220,
573
+ 17,
574
+ 23,
575
+ 88,
576
+ 11,
577
+ 892,
578
+ 374,
579
+ 220,
580
+ 22,
581
+ 6599,
582
+ 87,
583
+ 488,
584
+ 220,
585
+ 19,
586
+ 88,
587
+ 568,
588
+ 84670,
589
+ 220,
590
+ 16,
591
+ 702,
592
+ 220,
593
+ 18,
594
+ 88,
595
+ 488,
596
+ 220,
597
+ 16,
598
+ 15,
599
+ 89,
600
+ 13,
601
+ 2806,
602
+ 2704,
603
+ 421,
604
+ 429,
605
+ 8609,
606
+ 3602,
607
+ 382,
608
+ 92014,
609
+ 11,
610
+ 7196,
611
+ 358,
612
+ 646,
613
+ 2908,
614
+ 41238,
615
+ 1948,
616
+ 37906,
617
+ 30,
618
+ 6771,
619
+ 752,
620
+ 1744,
621
+ 13,
622
+ 6771,
623
+ 752,
624
+ 78064,
625
+ 279,
626
+ 37906,
627
+ 438,
628
+ 33122,
629
+ 16,
630
+ 11,
631
+ 33122,
632
+ 17,
633
+ 11,
634
+ 33122,
635
+ 18,
636
+ 382,
637
+ 10061,
638
+ 752,
639
+ 1430,
640
+ 311,
641
+ 3158,
642
+ 1817,
643
+ 23606,
644
+ 304,
645
+ 3793,
646
+ 315,
647
+ 7332,
648
+ 13,
649
+ 6771,
650
+ 752,
651
+ 1744,
652
+ 911,
653
+ 3204,
654
+ 93650,
655
+ 13,
656
+ 1752,
657
+ 3110,
658
+ 11,
659
+ 7196,
660
+ 358,
661
+ 646,
662
+ 3158,
663
+ 856,
664
+ 11,
665
+ 379,
666
+ 11,
667
+ 1147,
668
+ 304,
669
+ 3793,
670
+ 315,
671
+ 1817,
672
+ 1008,
673
+ 1939,
674
+ 92014,
675
+ 11,
676
+ 7196,
677
+ 358,
678
+ 646,
679
+ 2908,
680
+ 279,
681
+ 41238,
682
+ 315,
683
+ 279,
684
+ 37906,
685
+ 13,
686
+ 1752,
687
+ 3110,
688
+ 11,
689
+ 421,
690
+ 358,
691
+ 1896,
692
+ 33122,
693
+ 16,
694
+ 17779,
695
+ 553,
696
+ 33122,
697
+ 17,
698
+ 476,
699
+ 2494,
700
+ 1075,
701
+ 429,
702
+ 13,
703
+ 1988,
704
+ 2474,
705
+ 807,
706
+ 525,
707
+ 2155,
708
+ 37906,
709
+ 11,
710
+ 7196,
711
+ 537,
712
+ 30339,
713
+ 382,
714
+ 92014,
715
+ 11,
716
+ 7196,
717
+ 358,
718
+ 646,
719
+ 9658,
720
+ 429,
721
+ 7332,
722
+ 525,
723
+ 304,
724
+ 1045,
725
+ 21117,
726
+ 13,
727
+ 6771,
728
+ 752,
729
+ 1430,
730
+ 311,
731
+ 9658,
732
+ 429,
733
+ 856,
734
+ 11,
735
+ 379,
736
+ 11,
737
+ 1147,
738
+ 525,
739
+ 54172,
740
+ 311,
741
+ 1045,
742
+ 5109,
743
+ 13,
744
+ 6771,
745
+ 752,
746
+ 1744,
747
+ 911,
748
+ 279,
749
+ 36829,
750
+ 304,
751
+ 279,
752
+ 73832,
753
+ 13,
754
+ 1752,
755
+ 3110,
756
+ 11,
757
+ 304,
758
+ 23606,
759
+ 220,
760
+ 16,
761
+ 11,
762
+ 279,
763
+ 73832,
764
+ 374,
765
+ 220,
766
+ 18,
767
+ 88,
768
+ 488,
769
+ 220,
770
+ 16,
771
+ 15,
772
+ 89,
773
+ 13,
774
+ 758,
775
+ 23606,
776
+ 220,
777
+ 17,
778
+ 11,
779
+ 432,
780
+ 594,
781
+ 220,
782
+ 17,
783
+ 16,
784
+ 89,
785
+ 488,
786
+ 220,
787
+ 17,
788
+ 19,
789
+ 87,
790
+ 13,
791
+ 758,
792
+ 23606,
793
+ 220,
794
+ 18,
795
+ 11,
796
+ 432,
797
+ 594,
798
+ 220,
799
+ 22,
800
+ 87,
801
+ 488,
802
+ 220,
803
+ 17,
804
+ 23,
805
+ 88,
806
+ 13,
807
+ 6771,
808
+ 752,
809
+ 5185,
810
+ 429,
811
+ 220,
812
+ 17,
813
+ 16,
814
+ 89,
815
+ 488,
816
+ 220,
817
+ 17,
818
+ 19,
819
+ 87,
820
+ 646,
821
+ 387,
822
+ 5326,
823
+ 438,
824
+ 220,
825
+ 18,
826
+ 6599,
827
+ 22,
828
+ 89,
829
+ 488,
830
+ 220,
831
+ 23,
832
+ 87,
833
+ 701,
834
+ 323,
835
+ 220,
836
+ 22,
837
+ 87,
838
+ 488,
839
+ 220,
840
+ 17,
841
+ 23,
842
+ 88,
843
+ 374,
844
+ 220,
845
+ 22,
846
+ 6599,
847
+ 87,
848
+ 488,
849
+ 220,
850
+ 19,
851
+ 88,
852
+ 568,
853
+ 34239,
854
+ 11,
855
+ 23606,
856
+ 220,
857
+ 16,
858
+ 374,
859
+ 220,
860
+ 18,
861
+ 88,
862
+ 488,
863
+ 220,
864
+ 16,
865
+ 15,
866
+ 89,
867
+ 13,
868
+ 10696,
869
+ 1052,
870
+ 594,
871
+ 264,
872
+ 1616,
873
+ 311,
874
+ 28143,
875
+ 1493,
876
+ 1939,
877
+ 92014,
878
+ 11,
879
+ 7196,
880
+ 358,
881
+ 646,
882
+ 1744,
883
+ 315,
884
+ 279,
885
+ 37906,
886
+ 438,
887
+ 13482,
888
+ 37906,
889
+ 304,
890
+ 3793,
891
+ 315,
892
+ 7332,
893
+ 30,
894
+ 13824,
895
+ 11,
896
+ 902,
897
+ 11,
898
+ 1576,
899
+ 279,
900
+ 444,
901
+ 11961,
902
+ 374,
903
+ 79151,
904
+ 13,
905
+ 2055,
906
+ 807,
907
+ 525,
908
+ 73998,
909
+ 37906,
910
+ 382,
911
+ 92014,
912
+ 11,
913
+ 7196,
914
+ 358,
915
+ 646,
916
+ 2908,
917
+ 31334,
918
+ 10607,
919
+ 7332,
920
+ 13,
921
+ 6771,
922
+ 752,
923
+ 1744,
924
+ 13,
925
+ 6771,
926
+ 752,
927
+ 78064,
928
+ 328,
929
+ 284,
930
+ 30784,
931
+ 488,
932
+ 379,
933
+ 89,
934
+ 488,
935
+ 71322,
936
+ 11,
937
+ 892,
938
+ 374,
939
+ 279,
940
+ 12194,
941
+ 582,
942
+ 1184,
943
+ 311,
944
+ 1477,
945
+ 13,
946
+ 10696,
947
+ 358,
948
+ 646,
949
+ 1477,
950
+ 23393,
951
+ 15860,
952
+ 328,
953
+ 1939,
954
+ 92014,
955
+ 11,
956
+ 7196,
957
+ 358,
958
+ 646,
959
+ 2908,
960
+ 279,
961
+ 37906,
962
+ 438,
963
+ 11017,
964
+ 13,
965
+ 6771,
966
+ 752,
967
+ 5185,
968
+ 429,
969
+ 279,
970
+ 79151,
971
+ 3793,
972
+ 389,
973
+ 279,
974
+ 444,
975
+ 11961,
976
+ 525,
977
+ 4428,
978
+ 311,
979
+ 279,
980
+ 7493,
981
+ 369,
982
+ 279,
983
+ 9334,
984
+ 315,
985
+ 279,
986
+ 2629,
987
+ 476,
988
+ 2494,
989
+ 770,
990
+ 13,
991
+ 13824,
992
+ 11,
993
+ 369,
994
+ 3110,
995
+ 11,
996
+ 400,
997
+ 379,
998
+ 61,
999
+ 17,
1000
+ 488,
1001
+ 379,
1002
+ 89,
1003
+ 488,
1004
+ 1147,
1005
+ 61,
1006
+ 17,
1007
+ 284,
1008
+ 1124,
1009
+ 37018,
1010
+ 90,
1011
+ 18,
1012
+ 15170,
1013
+ 19,
1014
+ 25547,
1015
+ 88,
1016
+ 488,
1017
+ 1147,
1018
+ 29776,
1019
+ 17,
1020
+ 488,
1021
+ 1124,
1022
+ 37018,
1023
+ 90,
1024
+ 16,
1025
+ 15170,
1026
+ 19,
1027
+ 25547,
1028
+ 88,
1029
+ 481,
1030
+ 1147,
1031
+ 29776,
1032
+ 17,
1033
+ 400,
1034
+ 11,
1035
+ 714,
1036
+ 537,
1037
+ 2704,
1038
+ 421,
1039
+ 429,
1040
+ 8609,
1041
+ 1588,
1042
+ 382,
1043
+ 92014,
1044
+ 11,
1045
+ 7196,
1046
+ 358,
1047
+ 646,
1048
+ 1744,
1049
+ 315,
1050
+ 279,
1051
+ 37906,
1052
+ 438,
1053
+ 1447,
1054
+ 2461,
1055
+ 23606,
1056
+ 220,
1057
+ 16,
1058
+ 25,
1059
+ 400,
1060
+ 856,
1061
+ 7021,
1062
+ 61,
1063
+ 17,
1064
+ 488,
1065
+ 379,
1066
+ 89,
1067
+ 488,
1068
+ 1147,
1069
+ 61,
1070
+ 17,
1071
+ 8,
1072
+ 481,
1073
+ 220,
1074
+ 18,
1075
+ 88,
1076
+ 481,
1077
+ 220,
1078
+ 16,
1079
+ 15,
1080
+ 89,
1081
+ 284,
1082
+ 220,
1083
+ 15,
1084
+ 84500,
1085
+ 67691,
1086
+ 369,
1087
+ 3800,
1088
+ 13,
1089
+ 10696,
1090
+ 358,
1091
+ 646,
1092
+ 1744,
1093
+ 315,
1094
+ 419,
1095
+ 438,
1096
+ 264,
1097
+ 1849,
1098
+ 1380,
1099
+ 1817,
1100
+ 23606,
1101
+ 374,
1102
+ 264,
1103
+ 10601,
1104
+ 315,
1105
+ 7332,
1106
+ 13,
1107
+ 1988,
1108
+ 21828,
1109
+ 1741,
1110
+ 264,
1111
+ 1849,
1112
+ 4977,
1113
+ 16965,
1114
+ 382,
1115
+ 92014,
1116
+ 11,
1117
+ 7196,
1118
+ 358,
1119
+ 646,
1120
+ 9658,
1121
+ 429,
1122
+ 7332,
1123
+ 525,
1124
+ 25780,
1125
+ 30,
1126
+ 6771,
1127
+ 752,
1128
+ 1779,
1129
+ 421,
1130
+ 429,
1131
+ 594,
1132
+ 3204,
1133
+ 13,
1134
+ 6771,
1135
+ 752,
1136
+ 1430,
1137
+ 311,
1138
+ 1490,
1139
+ 421,
1140
+ 1052,
1141
+ 525,
1142
+ 7546,
1143
+ 9904,
1144
+ 13,
1145
+ 6771,
1146
+ 752,
1147
+ 22477,
1148
+ 429,
1149
+ 856,
1150
+ 11,
1151
+ 379,
1152
+ 11,
1153
+ 1147,
1154
+ 525,
1155
+ 25780,
1156
+ 13,
1157
+ 6771,
1158
+ 752,
1159
+ 1779,
1160
+ 23606,
1161
+ 220,
1162
+ 18,
1163
+ 25,
1164
+ 1147,
1165
+ 2075,
1166
+ 29456,
1167
+ 488,
1168
+ 30784,
1169
+ 488,
1170
+ 379,
1171
+ 29456,
1172
+ 8,
1173
+ 284,
1174
+ 220,
1175
+ 22,
1176
+ 87,
1177
+ 488,
1178
+ 220,
1179
+ 17,
1180
+ 23,
1181
+ 88,
1182
+ 13,
1183
+ 6771,
1184
+ 752,
1185
+ 5185,
1186
+ 429,
1187
+ 220,
1188
+ 22,
1189
+ 87,
1190
+ 488,
1191
+ 220,
1192
+ 17,
1193
+ 23,
1194
+ 88,
1195
+ 284,
1196
+ 220,
1197
+ 22,
1198
+ 2075,
1199
+ 488,
1200
+ 220,
1201
+ 19,
1202
+ 88,
1203
+ 568,
1204
+ 2055,
1205
+ 1147,
1206
+ 64828,
1207
+ 220,
1208
+ 22,
1209
+ 2075,
1210
+ 488,
1211
+ 220,
1212
+ 19,
1213
+ 88,
1214
+ 568,
1215
+ 34239,
1216
+ 11,
1217
+ 23606,
1218
+ 220,
1219
+ 17,
1220
+ 25,
1221
+ 379,
1222
+ 13174,
1223
+ 29456,
1224
+ 488,
1225
+ 71322,
1226
+ 488,
1227
+ 856,
1228
+ 29456,
1229
+ 8,
1230
+ 284,
1231
+ 220,
1232
+ 17,
1233
+ 16,
1234
+ 89,
1235
+ 488,
1236
+ 220,
1237
+ 17,
1238
+ 19,
1239
+ 87,
1240
+ 13,
1241
+ 6771,
1242
+ 752,
1243
+ 5185,
1244
+ 429,
1245
+ 220,
1246
+ 17,
1247
+ 16,
1248
+ 89,
1249
+ 488,
1250
+ 220,
1251
+ 17,
1252
+ 19,
1253
+ 87,
1254
+ 284,
1255
+ 220,
1256
+ 18,
1257
+ 7,
1258
+ 22,
1259
+ 89,
1260
+ 488,
1261
+ 220,
1262
+ 23,
1263
+ 87,
1264
+ 568,
1265
+ 2055,
1266
+ 379,
1267
+ 64828,
1268
+ 220,
1269
+ 18,
1270
+ 7,
1271
+ 22,
1272
+ 89,
1273
+ 488,
1274
+ 220,
1275
+ 23,
1276
+ 87,
1277
+ 568,
1278
+ 34239,
1279
+ 11,
1280
+ 23606,
1281
+ 220,
1282
+ 16,
1283
+ 25,
1284
+ 856,
1285
+ 7021,
1286
+ 29456,
1287
+ 488,
1288
+ 379,
1289
+ 89,
1290
+ 488,
1291
+ 1147,
1292
+ 29456,
1293
+ 8,
1294
+ 284,
1295
+ 220,
1296
+ 18,
1297
+ 88,
1298
+ 488,
1299
+ 220,
1300
+ 16,
1301
+ 15,
1302
+ 89,
1303
+ 13,
1304
+ 2055,
1305
+ 856,
1306
+ 64828,
1307
+ 220,
1308
+ 18,
1309
+ 88,
1310
+ 488,
1311
+ 220,
1312
+ 16,
1313
+ 15,
1314
+ 89,
1315
+ 382,
1316
+ 3983,
1317
+ 2474,
1318
+ 856,
1319
+ 11,
1320
+ 379,
1321
+ 11,
1322
+ 1147,
1323
+ 525,
1324
+ 6785,
1325
+ 25780,
1326
+ 11,
1327
+ 7196,
1328
+ 582,
1329
+ 646,
1330
+ 1477,
1331
+ 1045,
1332
+ 4300,
1333
+ 13,
1334
+ 4354,
1335
+ 11,
1336
+ 2474,
1337
+ 279,
1338
+ 3491,
1339
+ 2727,
1340
+ 807,
1341
+ 525,
1342
+ 6785,
1343
+ 1931,
1344
+ 5109,
1345
+ 11,
1346
+ 537,
1347
+ 14312,
1348
+ 25780,
1349
+ 11,
1350
+ 773,
1351
+ 7196,
1352
+ 419,
1353
+ 5486,
1354
+ 374,
1355
+ 2238,
1356
+ 56996,
1357
+ 13,
1358
+ 1988,
1359
+ 7196,
1360
+ 1052,
1361
+ 594,
1362
+ 264,
1363
+ 6291,
1364
+ 448,
1365
+ 7546,
1366
+ 2750,
1367
+ 30,
1368
+ 6771,
1369
+ 752,
1370
+ 1430,
1371
+ 311,
1372
+ 1490,
1373
+ 382,
1374
+ 92014,
1375
+ 11,
1376
+ 7196,
1377
+ 358,
1378
+ 646,
1379
+ 1401,
1380
+ 369,
1381
+ 41238,
1382
+ 1948,
1383
+ 7332,
1384
+ 13,
1385
+ 6771,
1386
+ 752,
1387
+ 22477,
1388
+ 429,
1389
+ 1052,
1390
+ 374,
1391
+ 264,
1392
+ 11341,
1393
+ 1948,
1394
+ 856,
1395
+ 11,
1396
+ 379,
1397
+ 11,
1398
+ 1147,
1399
+ 13,
1400
+ 6771,
1401
+ 752,
1402
+ 9658,
1403
+ 429,
1404
+ 856,
1405
+ 284,
1406
+ 264,
1407
+ 11,
1408
+ 379,
1409
+ 284,
1410
+ 293,
1411
+ 11,
1412
+ 1147,
1413
+ 284,
1414
+ 272,
1415
+ 11,
1416
+ 323,
1417
+ 1430,
1418
+ 311,
1419
+ 1477,
1420
+ 41238,
1421
+ 13,
1422
+ 6771,
1423
+ 752,
1424
+ 1744,
1425
+ 382,
1426
+ 92014,
1427
+ 11,
1428
+ 7196,
1429
+ 358,
1430
+ 646,
1431
+ 2908,
1432
+ 49702,
1433
+ 37906,
1434
+ 13,
1435
+ 1752,
1436
+ 3110,
1437
+ 11,
1438
+ 1896,
1439
+ 23606,
1440
+ 220,
1441
+ 16,
1442
+ 323,
1443
+ 23606,
1444
+ 220,
1445
+ 18,
1446
+ 13,
1447
+ 6771,
1448
+ 752,
1449
+ 1490,
1450
+ 1447,
1451
+ 24509,
1452
+ 367,
1453
+ 220,
1454
+ 16,
1455
+ 25,
1456
+ 856,
1457
+ 7021,
1458
+ 29456,
1459
+ 488,
1460
+ 379,
1461
+ 89,
1462
+ 488,
1463
+ 1147,
1464
+ 29456,
1465
+ 8,
1466
+ 284,
1467
+ 220,
1468
+ 18,
1469
+ 88,
1470
+ 488,
1471
+ 220,
1472
+ 16,
1473
+ 15,
1474
+ 89,
1475
+ 271,
1476
+ 24509,
1477
+ 367,
1478
+ 220,
1479
+ 18,
1480
+ 25,
1481
+ 1147,
1482
+ 2075,
1483
+ 29456,
1484
+ 488,
1485
+ 30784,
1486
+ 488,
1487
+ 379,
1488
+ 29456,
1489
+ 8,
1490
+ 284,
1491
+ 220,
1492
+ 22,
1493
+ 87,
1494
+ 488,
1495
+ 220,
1496
+ 17,
1497
+ 23,
1498
+ 88,
1499
+ 271,
1500
+ 2679,
1501
+ 358,
1502
+ 21749,
1503
+ 23606,
1504
+ 220,
1505
+ 16,
1506
+ 553,
1507
+ 23606,
1508
+ 220,
1509
+ 18,
1510
+ 11,
1511
+ 358,
1512
+ 633,
1513
+ 1447,
1514
+ 58,
1515
+ 856,
1516
+ 7021,
1517
+ 29456,
1518
+ 488,
1519
+ 379,
1520
+ 89,
1521
+ 488,
1522
+ 1147,
1523
+ 29456,
1524
+ 8,
1525
+ 2279,
1526
+ 608,
1527
+ 508,
1528
+ 1147,
1529
+ 2075,
1530
+ 29456,
1531
+ 488,
1532
+ 30784,
1533
+ 488,
1534
+ 379,
1535
+ 29456,
1536
+ 8,
1537
+ 2279,
1538
+ 284,
1539
+ 320,
1540
+ 18,
1541
+ 88,
1542
+ 488,
1543
+ 220,
1544
+ 16,
1545
+ 15,
1546
+ 89,
1547
+ 24254,
1548
+ 22,
1549
+ 87,
1550
+ 488,
1551
+ 220,
1552
+ 17,
1553
+ 23,
1554
+ 88,
1555
+ 692,
1556
+ 50,
1557
+ 70206,
1558
+ 63533,
1559
+ 323,
1560
+ 46912,
1561
+ 1447,
1562
+ 5415,
1563
+ 3108,
1564
+ 25,
1565
+ 508,
1566
+ 87,
1567
+ 31082,
1568
+ 60,
1569
+ 353,
1570
+ 508,
1571
+ 320,
1572
+ 88,
1573
+ 29456,
1574
+ 488,
1575
+ 379,
1576
+ 89,
1577
+ 488,
1578
+ 1147,
1579
+ 29456,
1580
+ 8,
1581
+ 608,
1582
+ 320,
1583
+ 87,
1584
+ 29456,
1585
+ 488,
1586
+ 30784,
1587
+ 488,
1588
+ 379,
1589
+ 29456,
1590
+ 8,
1591
+ 10444,
1592
+ 5979,
1593
+ 3108,
1594
+ 25,
1595
+ 508,
1596
+ 18,
1597
+ 88,
1598
+ 488,
1599
+ 220,
1600
+ 16,
1601
+ 15,
1602
+ 89,
1603
+ 9769,
1604
+ 58,
1605
+ 22,
1606
+ 87,
1607
+ 488,
1608
+ 220,
1609
+ 17,
1610
+ 23,
1611
+ 88,
1612
+ 60,
1613
+ 284,
1614
+ 508,
1615
+ 18,
1616
+ 88,
1617
+ 488,
1618
+ 220,
1619
+ 16,
1620
+ 15,
1621
+ 89,
1622
+ 9769,
1623
+ 58,
1624
+ 22,
1625
+ 2075,
1626
+ 488,
1627
+ 220,
1628
+ 19,
1629
+ 88,
1630
+ 27771,
1631
+ 80022,
1632
+ 11,
1633
+ 537,
1634
+ 2704,
1635
+ 421,
1636
+ 10950,
1637
+ 3602,
1638
+ 13,
1639
+ 10696,
1640
+ 358,
1641
+ 646,
1642
+ 9658,
1643
+ 1045,
1644
+ 11341,
1645
+ 1948,
1646
+ 7332,
1647
+ 13,
1648
+ 6771,
1649
+ 752,
1650
+ 22477,
1651
+ 429,
1652
+ 856,
1653
+ 11,
1654
+ 379,
1655
+ 11,
1656
+ 1147,
1657
+ 525,
1658
+ 304,
1659
+ 1045,
1660
+ 21117,
1661
+ 13,
1662
+ 6771,
1663
+ 752,
1664
+ 1744,
1665
+ 911,
1666
+ 279,
1667
+ 36829,
1668
+ 304,
1669
+ 279,
1670
+ 73832,
1671
+ 13,
1672
+ 1752,
1673
+ 3110,
1674
+ 11,
1675
+ 23606,
1676
+ 220,
1677
+ 16,
1678
+ 702,
1679
+ 220,
1680
+ 18,
1681
+ 88,
1682
+ 488,
1683
+ 220,
1684
+ 16,
1685
+ 15,
1686
+ 89,
1687
+ 11,
1688
+ 23606,
1689
+ 220,
1690
+ 17,
1691
+ 702,
1692
+ 220,
1693
+ 17,
1694
+ 16,
1695
+ 89,
1696
+ 488,
1697
+ 220,
1698
+ 17,
1699
+ 19,
1700
+ 87,
1701
+ 11,
1702
+ 23606,
1703
+ 220,
1704
+ 18,
1705
+ 702,
1706
+ 220,
1707
+ 22,
1708
+ 87,
1709
+ 488,
1710
+ 220,
1711
+ 17,
1712
+ 23,
1713
+ 88,
1714
+ 13,
1715
+ 6771,
1716
+ 752,
1717
+ 5185,
1718
+ 429,
1719
+ 220,
1720
+ 17,
1721
+ 16,
1722
+ 89,
1723
+ 488,
1724
+ 220,
1725
+ 17,
1726
+ 19,
1727
+ 87,
1728
+ 284,
1729
+ 220,
1730
+ 18,
1731
+ 6599,
1732
+ 22,
1733
+ 89,
1734
+ 488,
1735
+ 220,
1736
+ 23,
1737
+ 87,
1738
+ 701,
1739
+ 323,
1740
+ 220,
1741
+ 22,
1742
+ 87,
1743
+ 488,
1744
+ 220,
1745
+ 17,
1746
+ 23,
1747
+ 88,
1748
+ 284,
1749
+ 220,
1750
+ 22,
1751
+ 6599,
1752
+ 87,
1753
+ 488,
1754
+ 220,
1755
+ 19,
1756
+ 88,
1757
+ 568,
1758
+ 7281,
1759
+ 11,
1760
+ 220,
1761
+ 18,
1762
+ 88,
1763
+ 488,
1764
+ 220,
1765
+ 16,
1766
+ 15,
1767
+ 89,
1768
+ 374,
1769
+ 438,
1770
+ 374,
1771
+ 382,
1772
+ 92014,
1773
+ 11,
1774
+ 7196,
1775
+ 358,
1776
+ 646,
1777
+ 1744,
1778
+ 315,
1779
+ 279,
1780
+ 37906,
1781
+ 438,
1782
+ 11017,
1783
+ 1447,
1784
+ 10061,
1785
+ 752,
1786
+ 78064,
1787
+ 1447,
1788
+ 10061,
1789
+ 752,
1790
+ 1744,
1791
+ 315,
1792
+ 23606,
1793
+ 220,
1794
+ 16,
1795
+ 25,
1796
+ 856,
1797
+ 7021,
1798
+ 29456,
1799
+ 488,
1800
+ 379,
1801
+ 89,
1802
+ 488,
1803
+ 1147,
1804
+ 29456,
1805
+ 8,
1806
+ 284,
1807
+ 220,
1808
+ 18,
1809
+ 88,
1810
+ 488,
1811
+ 220,
1812
+ 16,
1813
+ 15,
1814
+ 89,
1815
+ 271,
1816
+ 24509,
1817
+ 367,
1818
+ 220,
1819
+ 17,
1820
+ 25,
1821
+ 379,
1822
+ 13174,
1823
+ 29456,
1824
+ 488,
1825
+ 71322,
1826
+ 488,
1827
+ 856,
1828
+ 29456,
1829
+ 8,
1830
+ 284,
1831
+ 220,
1832
+ 17,
1833
+ 16,
1834
+ 89,
1835
+ 488,
1836
+ 220,
1837
+ 17,
1838
+ 19,
1839
+ 87,
1840
+ 271,
1841
+ 24509,
1842
+ 367,
1843
+ 220,
1844
+ 18,
1845
+ 25,
1846
+ 1147,
1847
+ 2075,
1848
+ 29456,
1849
+ 488,
1850
+ 30784,
1851
+ 488,
1852
+ 379,
1853
+ 29456,
1854
+ 8,
1855
+ 284,
1856
+ 220,
1857
+ 22,
1858
+ 87,
1859
+ 488,
1860
+ 220,
1861
+ 17,
1862
+ 23,
1863
+ 88,
1864
+ 271,
1865
+ 10061,
1866
+ 752,
1867
+ 5185,
1868
+ 429,
1869
+ 279,
1870
+ 36829,
1871
+ 389,
1872
+ 279,
1873
+ 73832,
1874
+ 315,
1875
+ 23606,
1876
+ 220,
1877
+ 16,
1878
+ 525,
1879
+ 220,
1880
+ 18,
1881
+ 323,
1882
+ 220,
1883
+ 16,
1884
+ 15,
1885
+ 11,
1886
+ 23606,
1887
+ 220,
1888
+ 17,
1889
+ 525,
1890
+ 220,
1891
+ 17,
1892
+ 16,
1893
+ 323,
1894
+ 220,
1895
+ 17,
1896
+ 19,
1897
+ 11,
1898
+ 23606,
1899
+ 220,
1900
+ 18,
1901
+ 525,
1902
+ 220,
1903
+ 22,
1904
+ 323,
1905
+ 220,
1906
+ 17,
1907
+ 23,
1908
+ 13,
1909
+ 6771,
1910
+ 752,
1911
+ 1779,
1912
+ 421,
1913
+ 1052,
1914
+ 594,
1915
+ 264,
1916
+ 5383,
1917
+ 1588,
1918
+ 13,
1919
+ 1752,
1920
+ 3110,
1921
+ 11,
1922
+ 220,
1923
+ 18,
1924
+ 11,
1925
+ 220,
1926
+ 16,
1927
+ 15,
1928
+ 26,
1929
+ 220,
1930
+ 17,
1931
+ 16,
1932
+ 11,
1933
+ 220,
1934
+ 17,
1935
+ 19,
1936
+ 26,
1937
+ 220,
1938
+ 22,
1939
+ 11,
1940
+ 220,
1941
+ 17,
1942
+ 23,
1943
+ 13,
1944
+ 6771,
1945
+ 752,
1946
+ 1490,
1947
+ 1447,
1948
+ 2679,
1949
+ 358,
1950
+ 1401,
1951
+ 518,
1952
+ 23606,
1953
+ 220,
1954
+ 16,
1955
+ 323,
1956
+ 23606,
1957
+ 220,
1958
+ 18,
1959
+ 25,
1960
+ 23606,
1961
+ 220,
1962
+ 16,
1963
+ 702,
1964
+ 220,
1965
+ 18,
1966
+ 88,
1967
+ 488,
1968
+ 220,
1969
+ 16,
1970
+ 15,
1971
+ 89,
1972
+ 11,
1973
+ 23606,
1974
+ 220,
1975
+ 18,
1976
+ 702,
1977
+ 220,
1978
+ 22,
1979
+ 87,
1980
+ 488,
1981
+ 220,
1982
+ 17,
1983
+ 23,
1984
+ 88,
1985
+ 13,
1986
+ 1416,
1987
+ 358,
1988
+ 30270,
1989
+ 23606,
1990
+ 220,
1991
+ 16,
1992
+ 553,
1993
+ 2494,
1994
+ 30,
1995
+ 6771,
1996
+ 752,
1997
+ 1490,
1998
+ 1447,
1999
+ 2679,
2000
+ 358,
2001
+ 30270,
2002
+ 23606,
2003
+ 220,
2004
+ 16,
2005
+ 553,
2006
+ 220,
2007
+ 22,
2008
+ 11,
2009
+ 358,
2010
+ 633,
2011
+ 220,
2012
+ 22,
2013
+ 87,
2014
+ 7021,
2015
+ 29456,
2016
+ 488,
2017
+ 379,
2018
+ 89,
2019
+ 488,
2020
+ 1147,
2021
+ 29456,
2022
+ 8,
2023
+ 284,
2024
+ 220,
2025
+ 17,
2026
+ 16,
2027
+ 88,
2028
+ 488,
2029
+ 220,
2030
+ 22,
2031
+ 15,
2032
+ 89,
2033
+ 13,
2034
+ 23768,
2035
+ 448,
2036
+ 23606,
2037
+ 220,
2038
+ 18,
2039
+ 25,
2040
+ 1147,
2041
+ 2075,
2042
+ 29456,
2043
+ 488,
2044
+ 30784,
2045
+ 488,
2046
+ 379,
2047
+ 29456,
2048
+ 8,
2049
+ 284,
2050
+ 220,
2051
+ 22,
2052
+ 87,
2053
+ 488
2054
+ ],
2055
+ "response_text": "<think>\nOkay, so I need to solve this system of equations with three variables x, y, z. All of them are positive real numbers. The equations are:\n\n1. $ x(y^2 + yz + z^2) = 3y + 10z $\n2. $ y(z^2 + zx + x^2) = 21z + 24x $\n3. $ z(x^2 + xy + y^2) = 7x + 28y $\n\nAnd the goal is to find $ xy + yz + zx $.\n\nHmm, these equations look pretty symmetric, but they aren't exactly symmetric. Each equation has a cyclic permutation of variables. Maybe there's a way to exploit that symmetry? Let me think.\n\nFirst, let me note that each equation has a quadratic term in the left-hand side (LHS) and linear terms on the right-hand side (RHS). The quadratic terms are of the form $ a^2 + ab + b^2 $, which is a common expression in symmetric equations. Maybe I can relate these equations somehow?\n\nAlternatively, maybe I can assume some ratio between x, y, z? For example, suppose that x, y, z are proportional to some constants. Let me try to assume that x = k * a, y = k * b, z = k * c, where a, b, c are constants and k is a positive real number. Then, substituting into the equations, maybe I can find a relationship between a, b, c?\n\nBut before jumping into that, let me check if there's a substitution or manipulation that can simplify the equations. Let me look at the equations again:\n\nEquation 1: $ x(y^2 + yz + z^2) = 3y + 10z $\n\nEquation 2: $ y(z^2 + zx + x^2) = 21z + 24x $\n\nEquation 3: $ z(x^2 + xy + y^2) = 7x + 28y $\n\nLooking at the coefficients on the RHS: 3, 10; 21, 24; 7, 28. Wait, 21 and 24 have a common factor of 3, 7 and 28 have a common factor of 7. Maybe there's a pattern here?\n\nAlternatively, maybe I can divide the equations by something? Let me check the coefficients again. For example, equation 2 has 21z + 24x. If I factor 3, it's 3*(7z + 8x). Similarly, equation 3 has 7x + 28y, which is 7*(x + 4y). Equation 1 has 3y + 10z. Not sure if that helps yet.\n\nAlternatively, maybe I can consider ratios between equations? Let me think. Let me denote the equations as Eq1, Eq2, Eq3.\n\nLet me try to express each equation in terms of variables. Let me think about possible substitutions. For example, maybe I can express x, y, z in terms of each other?\n\nAlternatively, maybe I can consider the ratios of the equations. For example, if I take Eq1 divided by Eq2 or something like that. But since they are different equations, maybe not straightforward.\n\nAlternatively, maybe I can assume that variables are in some proportion. Let me try to assume that x, y, z are proportional to some numbers. Let me think about the coefficients in the RHS. For example, in equation 1, the RHS is 3y + 10z. In equation 2, it's 21z + 24x. In equation 3, it's 7x + 28y. Let me note that 21z + 24x can be written as 3*(7z + 8x), and 7x + 28y is 7*(x + 4y). Similarly, equation 1 is 3y + 10z. Maybe there's a way to relate these?\n\nAlternatively, maybe I can think of the equations as linear equations in terms of variables? Wait, no, because the LHS is quadratic. So they are nonlinear equations.\n\nAlternatively, maybe I can consider substituting variables. Let me think. Let me denote S = xy + yz + zx, which is the quantity we need to find. Maybe I can find expressions involving S?\n\nAlternatively, maybe I can consider the equations as follows. Let me note that the quadratic terms on the LHS are similar to the expression for the square of the sum or something else. Wait, for example, $ y^2 + yz + z^2 = \\frac{3}{4}(y + z)^2 + \\frac{1}{4}(y - z)^2 $, but not sure if that helps here.\n\nAlternatively, maybe I can think of the equations as:\n\nFor equation 1: $ x(y^2 + yz + z^2) - 3y - 10z = 0 $\n\nSimilarly for others. Maybe I can think of this as a system where each equation is a combination of variables. But solving such a system seems complicated.\n\nAlternatively, maybe I can assume that variables are integers? Let me check if that's possible. Let me try to see if there are integer solutions. Let me suppose that x, y, z are integers. Let me check equation 3: z(x² + xy + y²) = 7x + 28y. Let me note that 7x + 28y = 7(x + 4y). So z divides 7(x + 4y). Similarly, equation 2: y(z² + zx + x²) = 21z + 24x. Let me note that 21z + 24x = 3(7z + 8x). So y divides 3(7z + 8x). Similarly, equation 1: x(y² + yz + z²) = 3y + 10z. So x divides 3y + 10z.\n\nBut since x, y, z are positive integers, maybe we can find some relations. However, since the problem says they are positive real numbers, not necessarily integers, so maybe this approach is too restrictive. But maybe there's a solution with integer values? Let me try to see.\n\nAlternatively, maybe I can look for ratios between variables. Let me suppose that there is a ratio between x, y, z. Let me assume that x = a, y = b, z = c, and try to find ratios. Let me think.\n\nAlternatively, maybe I can consider dividing equations. For example, take equation 1 and equation 3. Let me see:\n\nEquation 1: x(y² + yz + z²) = 3y + 10z\n\nEquation 3: z(x² + xy + y²) = 7x + 28y\n\nIf I divide equation 1 by equation 3, I get:\n\n[ x(y² + yz + z²) ] / [ z(x² + xy + y²) ] = (3y + 10z)/(7x + 28y)\n\nSimplify numerator and denominator:\n\nLeft side: [x/z] * [ (y² + yz + z²) / (x² + xy + y²) ]\n\nRight side: [3y + 10z]/[7x + 28y] = [3y + 10z]/[7(x + 4y)]\n\nHmm, not sure if helpful yet. Maybe I can assume some ratio between variables. Let me suppose that x, y, z are in some proportion. Let me think about the coefficients in the RHS. For example, equation 1 has 3y + 10z, equation 2 has 21z + 24x, equation 3 has 7x + 28y. Let me note that 21z + 24x = 3*(7z + 8x), and 7x + 28y = 7*(x + 4y). Also, 3y + 10z is as is.\n\nAlternatively, maybe I can think of the equations as follows:\n\nLet me denote:\n\nLet me think of equation 1: x(y² + yz + z²) = 3y + 10z\n\nEquation 2: y(z² + zx + x²) = 21z + 24x\n\nEquation 3: z(x² + xy + y²) = 7x + 28y\n\nLet me note that the coefficients on the RHS of equation 1 are 3 and 10, equation 2 are 21 and 24, equation 3 are 7 and 28. Let me check if there's a pattern here. For example, 3, 10; 21, 24; 7, 28. Let me see:\n\nIf I look at equation 1 and equation 3: equation 1 has 3y + 10z, equation 3 has 7x + 28y. If I multiply equation 1 by something? Let me see:\n\nIf I multiply equation 1 by 7, I get 7x(y² + yz + z²) = 21y + 70z. Compare with equation 3: z(x² + xy + y²) = 7x +",
2056
+ "max_new_tokens": 2048,
2057
+ "do_sample": false
2058
+ }
outputs/multi-gpu-1000/lens-bf16.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ad3376c6e7b25412b4cd00a0615e618ff8ea025418792f7c4a8c9dbc375a7298
3
+ size 471870034
outputs/multi-gpu-1000/shard-0/config.json ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "../Lightning-OPD/checkpoints/qwen3-4b-base-sft-qwen3-8b",
3
+ "data": "data/dapo-math-17k/dapo-math-17k.jsonl",
4
+ "output_dir": "outputs/multi-gpu-1000/shard-0",
5
+ "num_prompts": 500,
6
+ "offset": 0,
7
+ "seed": 17,
8
+ "max_seq_len": 128,
9
+ "skip_first": 16,
10
+ "dim_batch": 64,
11
+ "target_layer": null,
12
+ "checkpoint_every": 10,
13
+ "device": "cuda:0",
14
+ "no_resume": false,
15
+ "resolved_target_layer": 35,
16
+ "source_layers": [
17
+ 0,
18
+ 1,
19
+ 2,
20
+ 3,
21
+ 4,
22
+ 5,
23
+ 6,
24
+ 7,
25
+ 8,
26
+ 9,
27
+ 10,
28
+ 11,
29
+ 12,
30
+ 13,
31
+ 14,
32
+ 15,
33
+ 16,
34
+ 17,
35
+ 18,
36
+ 19,
37
+ 20,
38
+ 21,
39
+ 22,
40
+ 23,
41
+ 24,
42
+ 25,
43
+ 26,
44
+ 27,
45
+ 28,
46
+ 29,
47
+ 30,
48
+ 31,
49
+ 32,
50
+ 33,
51
+ 34
52
+ ],
53
+ "model_layers": 36,
54
+ "d_model": 2560
55
+ }
outputs/multi-gpu-1000/shard-0/fit-checkpoint-fp32.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e3804bdecda73099d8bff5816bac3874ed0137c46c332c4eeeb32a399f578a14
3
+ size 917514770
outputs/multi-gpu-1000/shard-0/lens-bf16.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f910d346ad8b35f3e948374dd4b1fd98fe3199ef636f5bb1eb5ccfaacf7496c3
3
+ size 471869842