yusifnuri commited on
Commit
bc1c1fa
·
verified ·
1 Parent(s): dca5be9

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ 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
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: microsoft/Phi-4-mini-instruct
3
+ library_name: peft
4
+ license: mit
5
+ pipeline_tag: text-generation
6
+ tags:
7
+ - lora
8
+ - peft
9
+ - small-language-model
10
+ - enterprise-benchmark
11
+ - code-generation
12
+ - base_model:adapter:microsoft/Phi-4-mini-instruct
13
+ ---
14
+
15
+ # phi-4-mini-instruct — Code generation adapter
16
+
17
+ A LoRA adapter that specialises `microsoft/Phi-4-mini-instruct` (3.80 B parameters) for a single enterprise task: it completes a Python function so that it passes the reference unit tests.
18
+
19
+ It was produced for the MSc thesis *Fine-Tune or Pay Per Token? An Enterprise Benchmark of Small Language Models* (SRH University Hamburg), which measures fine-tuned small models against frontier provider APIs on accuracy, latency, cost, privacy exposure and return-on-investment breakeven volume. The adapter is released so that the benchmark can be independently verified.
20
+
21
+ ## Measured performance
22
+
23
+ | Metric | Value |
24
+ |---|---|
25
+ | pass@1 | **0.4287** |
26
+ | Mean latency, batch 1 | 2200 ms |
27
+ | Cost per 1M generated tokens | USD 9.53 |
28
+
29
+ Measured on a single NVIDIA H200 (141 GB) at batch size one and full utilisation, priced at an imputed USD 3.99 per GPU-hour. Latency excludes network transit. Scores are not comparable across tasks — each task carries its own metric. Evaluation ran on 5 July 2026; the complete matrix is at [`results/benchmark_matrix.csv`](https://github.com/Yusifnuri/slm-benchmark/blob/main/results/benchmark_matrix.csv).
30
+
31
+ ## Training
32
+
33
+ | | |
34
+ |---|---|
35
+ | Method | LoRA |
36
+ | Dataset | HumanEval (`openai/openai_humaneval`) |
37
+ | Dataset licence | MIT |
38
+ | Training examples | 5,000 (500 held out for checkpoint selection) |
39
+ | Rank / alpha / dropout | 16 / 32 / 0.05 |
40
+ | Target modules | `q_proj`, `k_proj`, `v_proj`, `o_proj` |
41
+ | Learning rate | 2e-4, cosine schedule, 3% warmup |
42
+ | Epochs | 3 |
43
+ | Effective batch size | 16 (4 x 4 gradient accumulation) |
44
+ | Max sequence length | 512 tokens |
45
+ | Optimiser | AdamW |
46
+ | Seed | 42 |
47
+
48
+ Hyperparameters were held constant across every model and task rather than tuned per cell, so these figures are a conservative lower bound on attainable performance.
49
+
50
+ ## Usage
51
+
52
+ ```python
53
+ from peft import PeftModel
54
+ from transformers import AutoModelForCausalLM, AutoTokenizer
55
+
56
+ base = AutoModelForCausalLM.from_pretrained("microsoft/Phi-4-mini-instruct", device_map="auto")
57
+ model = PeftModel.from_pretrained(base, "<your-hf-username>/phi-4-mini-instruct_code_generation")
58
+ tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-4-mini-instruct")
59
+ ```
60
+
61
+ The adapter was trained on this prompt format and expects it at inference:
62
+
63
+ ```text
64
+ Complete the following Python function:
65
+ {text}
66
+ ```
67
+
68
+ ## Limitations
69
+
70
+ - Trained once, with a single seed. Reported differences confound model quality with initialisation variance.
71
+ - Specialised to one task on one public corpus. It is not a general-purpose assistant and should not be treated as one.
72
+ - The evaluation corpora are long-standing public benchmarks and are plausibly present in the base model's pretraining data, which inflates absolute scores.
73
+ - Evaluation used 200 held-out instances (all 164 problems for code generation), so detectable effect sizes are bounded at roughly ten percentage points.
74
+
75
+ ## Links
76
+
77
+ - Code, configurations and evaluation harness: [https://github.com/Yusifnuri/slm-benchmark](https://github.com/Yusifnuri/slm-benchmark)
78
+ - Full benchmark matrix: [`results/benchmark_matrix.csv`](https://github.com/Yusifnuri/slm-benchmark/blob/main/results/benchmark_matrix.csv)
79
+ - Per-request cost analysis: [`results/cost_per_request.csv`](https://github.com/Yusifnuri/slm-benchmark/blob/main/results/cost_per_request.csv)
80
+
81
+ ## Citation
82
+
83
+ ```bibtex
84
+ @mastersthesis{nuri2026finetune,
85
+ title = {Fine-Tune or Pay Per Token? An Enterprise Benchmark of Small Language Models},
86
+ author = {Nuri, Yusif},
87
+ school = {SRH University Hamburg},
88
+ year = {2026}
89
+ }
90
+ ```
adapter_config.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "microsoft/phi-4-mini-instruct",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.05,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": null,
26
+ "peft_type": "LORA",
27
+ "peft_version": "0.19.1",
28
+ "qalora_group_size": 16,
29
+ "r": 16,
30
+ "rank_pattern": {},
31
+ "revision": null,
32
+ "target_modules": [
33
+ "k_proj",
34
+ "o_proj",
35
+ "v_proj",
36
+ "q_proj"
37
+ ],
38
+ "target_parameters": null,
39
+ "task_type": "CAUSAL_LM",
40
+ "trainable_token_indices": null,
41
+ "use_bdlora": null,
42
+ "use_dora": false,
43
+ "use_qalora": false,
44
+ "use_rslora": false
45
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9903ef7b3196f831523174e0c509a60269c76384aab5fae36b34c0fcdc55d8be
3
+ size 12591456
chat_template.jinja ADDED
@@ -0,0 +1 @@
 
 
1
+ {% for message in messages %}{% if message['role'] == 'system' and 'tools' in message and message['tools'] is not none %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|tool|>' + message['tools'] + '<|/tool|>' + '<|end|>' }}{% else %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% else %}{{ eos_token }}{% endif %}
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dcd6878d2c93d9aa166fc56bbe101365748c85775908a4edbb3b7b3616cd2050
3
+ size 15524574
tokenizer_config.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "backend": "tokenizers",
4
+ "bos_token": "<|endoftext|>",
5
+ "clean_up_tokenization_spaces": false,
6
+ "eos_token": "<|endoftext|>",
7
+ "is_local": false,
8
+ "local_files_only": false,
9
+ "model_max_length": 131072,
10
+ "pad_token": "<|endoftext|>",
11
+ "tokenizer_class": "TokenizersBackend",
12
+ "unk_token": "<|endoftext|>"
13
+ }