jsantillana commited on
Commit
c979cca
Β·
verified Β·
1 Parent(s): 7c820fa

Upload Makefile with huggingface_hub

Browse files
Files changed (1) hide show
  1. Makefile +142 -0
Makefile ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # VectraYX Reproducibility Makefile
2
+ # Reproduces the key experiments from the paper on a single NVIDIA L4 / A10G GPU.
3
+ #
4
+ # Prerequisites:
5
+ # - Python 3.10+
6
+ # - CUDA 12.1+
7
+ # - pip install -r requirements.txt
8
+ # - AWS CLI configured (for SageMaker experiments)
9
+ # - Nano checkpoint: nano_sft_v5.pt (download from HuggingFace, see README)
10
+ # - Base checkpoint: base_phase3_last.pt (download from HuggingFace, see README)
11
+ #
12
+ # Usage:
13
+ # make install # install dependencies
14
+ # make bench-nano # run B1-B5 on Nano 42M (requires nano_sft_v5.pt)
15
+ # make bench-base # run B1-B5 on Base 260M (requires base_phase3_last.pt)
16
+ # make lora-nano # LoRA tool-use fine-tune on Nano (local GPU)
17
+ # make lora-base # LoRA tool-use fine-tune on Base (local GPU)
18
+ # make repro # full reproducibility run (bench + lora + bench again)
19
+ # make corpus # regenerate tool_sft_mini_v1.jsonl from scratch
20
+
21
+ PYTHON := python3
22
+ NANO_CKPT := checkpoints/nano_sft_v5.pt
23
+ BASE_CKPT := checkpoints/base_phase3_last.pt
24
+ TOKENIZER := checkpoints/vectrayx_bpe.model
25
+ NANO_CFG := configs/nano.json
26
+ BASE_CFG := configs/base.json
27
+ EVAL_DIR := eval_data
28
+ CORPUS := corpus/tool_sft_mini_v1.jsonl
29
+ LORA_OUT := checkpoints/lora_out
30
+
31
+ .PHONY: install bench-nano bench-base lora-nano lora-base repro corpus clean help
32
+
33
+ help:
34
+ @echo "VectraYX Reproducibility Makefile"
35
+ @echo ""
36
+ @echo "Targets:"
37
+ @echo " install Install Python dependencies"
38
+ @echo " bench-nano Run B1-B5 benchmark on Nano 42M"
39
+ @echo " bench-base Run B1-B5 benchmark on Base 260M"
40
+ @echo " lora-nano LoRA fine-tune Nano 42M on tool-use corpus"
41
+ @echo " lora-base LoRA fine-tune Base 260M on tool-use corpus"
42
+ @echo " repro Full reproducibility run"
43
+ @echo " corpus Regenerate tool_sft_mini_v1.jsonl"
44
+ @echo " clean Remove generated checkpoints and results"
45
+
46
+ install:
47
+ pip install -r requirements.txt
48
+
49
+ # ── Benchmark ──────────────────────────────────────────────────────────────────
50
+
51
+ bench-nano: $(NANO_CKPT) $(TOKENIZER)
52
+ $(PYTHON) eval/benchmark.py \
53
+ --config $(NANO_CFG) \
54
+ --tokenizer $(TOKENIZER) \
55
+ --checkpoint $(NANO_CKPT) \
56
+ --data-dir $(EVAL_DIR) \
57
+ --out results/bench_nano_baseline.json
58
+ @echo "Results: results/bench_nano_baseline.json"
59
+
60
+ bench-base: $(BASE_CKPT) $(TOKENIZER)
61
+ $(PYTHON) eval/benchmark.py \
62
+ --config $(BASE_CFG) \
63
+ --tokenizer $(TOKENIZER) \
64
+ --checkpoint $(BASE_CKPT) \
65
+ --data-dir $(EVAL_DIR) \
66
+ --out results/bench_base_baseline.json
67
+ @echo "Results: results/bench_base_baseline.json"
68
+
69
+ # ── LoRA fine-tune ─────────────────────────────────────────────────────────────
70
+
71
+ lora-nano: $(NANO_CKPT) $(TOKENIZER) $(CORPUS)
72
+ mkdir -p $(LORA_OUT)/nano
73
+ $(PYTHON) training/finetune_lora_tools.py \
74
+ --config $(NANO_CFG) \
75
+ --tokenizer $(TOKENIZER) \
76
+ --resume $(NANO_CKPT) \
77
+ --tool-corpus $(CORPUS) \
78
+ --out $(LORA_OUT)/nano \
79
+ --lora-rank 16 --lora-alpha 32 \
80
+ --batch-size 16 --grad-accum 4 \
81
+ --epochs 5 --lr 2e-4 --seed 42
82
+ $(PYTHON) eval/run_inference_lora.py \
83
+ --base-checkpoint $(NANO_CKPT) \
84
+ --lora-checkpoint $(LORA_OUT)/nano/final_lora_only.pt \
85
+ --config $(NANO_CFG) \
86
+ --tokenizer $(TOKENIZER) \
87
+ --data-dir $(EVAL_DIR) \
88
+ --out results/bench_nano_lora_s42.json
89
+ @echo "Results: results/bench_nano_lora_s42.json"
90
+
91
+ lora-base: $(BASE_CKPT) $(TOKENIZER) $(CORPUS)
92
+ mkdir -p $(LORA_OUT)/base
93
+ $(PYTHON) training/finetune_lora_tools.py \
94
+ --config $(BASE_CFG) \
95
+ --tokenizer $(TOKENIZER) \
96
+ --resume $(BASE_CKPT) \
97
+ --tool-corpus $(CORPUS) \
98
+ --out $(LORA_OUT)/base \
99
+ --lora-rank 16 --lora-alpha 32 \
100
+ --batch-size 8 --grad-accum 8 \
101
+ --epochs 5 --lr 2e-4 --seed 42
102
+ $(PYTHON) eval/run_inference_lora.py \
103
+ --base-checkpoint $(BASE_CKPT) \
104
+ --lora-checkpoint $(LORA_OUT)/base/final_lora_only.pt \
105
+ --config $(BASE_CFG) \
106
+ --tokenizer $(TOKENIZER) \
107
+ --data-dir $(EVAL_DIR) \
108
+ --out results/bench_base_lora_s42.json
109
+ @echo "Results: results/bench_base_lora_s42.json"
110
+
111
+ # ── Full reproducibility run ───────────────────────────────────────────────────
112
+
113
+ repro: install bench-nano bench-base lora-nano lora-base
114
+ @echo ""
115
+ @echo "=== Reproducibility Run Complete ==="
116
+ @echo "Expected results (from paper, Table 3):"
117
+ @echo " Nano baseline B4=0.000"
118
+ @echo " Base baseline B4=0.000"
119
+ @echo " Nano + LoRA B4=0.145 Β± 0.046 (seed 42: 0.220)"
120
+ @echo " Base + LoRA B4=0.580"
121
+ @echo ""
122
+ @echo "Your results:"
123
+ @$(PYTHON) -c "import json; \
124
+ r = {k: json.load(open(f'results/{k}.json')) for k in \
125
+ ['bench_nano_baseline','bench_base_baseline','bench_nano_lora_s42','bench_base_lora_s42'] \
126
+ if __import__('pathlib').Path(f'results/{k}.json').exists()}; \
127
+ [print(f' {k}: B4={v.get(\"B4_tooluse\",\"N/A\")}') for k,v in r.items()]"
128
+
129
+ # ── Corpus generation ──────────────────────────────────────────────────────────
130
+
131
+ corpus:
132
+ $(PYTHON) corpus/build_mini_tool_corpus.py \
133
+ --size 2801 \
134
+ --out corpus/tool_sft_mini_v1_repro.jsonl
135
+ @echo "Generated: corpus/tool_sft_mini_v1_repro.jsonl"
136
+ @echo "Note: compare with corpus/tool_sft_mini_v1.jsonl (released version)"
137
+
138
+ # ── Cleanup ────────────────────────────────────────────────────────────────────
139
+
140
+ clean:
141
+ rm -rf checkpoints/lora_out results/
142
+ @echo "Cleaned generated files. Checkpoints preserved."