SanaeNya commited on
Commit
6cff49b
·
verified ·
1 Parent(s): 566d855

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -1,35 +1 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz 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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  *.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,3 +1,30 @@
1
- ---
2
- license: mit
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PlutoLite-v1
2
+
3
+ PlutoLite-v1 是基于 [google/gemma-4-E2B](https://huggingface.co/google/gemma-4-E2B) 的 Python 代码生成 / 函数补全 QLoRA 适配器。
4
+
5
+ 发布内容为 PEFT LoRA 权重,需要另外加载基础模型。基础模型固定版本为 `d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f`。适配器已包含之前各阶段累计更新,使用时只需加载适配器。
6
+
7
+ ## 加载与推理
8
+
9
+ Python 3.11+;先安装适合本机 GPU 的 CUDA PyTorch,再进入本目录安装依赖:
10
+
11
+ ```bash
12
+ pip install -r requirements.txt
13
+ python load_adapter.py --prompt "Write a Python function that returns whether an integer is even."
14
+ ```
15
+
16
+ 脚本默认从 Hugging Face 加载固定版本基础模型,并从脚本所在目录加载适配器;需要支持 BF16 的 NVIDIA GPU,使用 NF4 量化并将大型逐层词嵌入放在 CPU。也支持本地基础模型:
17
+
18
+ ```bash
19
+ python load_adapter.py --base-model ../../base/gemma-4-E2B --local-files-only --prompt "Write a Python function that adds two integers."
20
+ ```
21
+
22
+ 使用其他 Hugging Face 适配器仓库路径时可传 `--adapter 用户名/PlutoLite-v1`。`--max-new-tokens` 默认为 256。
23
+
24
+ 训练采用 **BOS + 原始 prompt** 的 completion 格式,instruction 为空;函数补全时保留原始换行和缩进,不添加聊天模板或 `Instruction/Response` 包装。脚本仅打印新生成文本,不执行生成的代码。
25
+
26
+ 本适配器作用于 `Gemma4ForCausalLM` 文本模型。基础仓库使用多模态权重命名,因此加载脚本显式将 `model.language_model.` 映射为 `model.` 并检查文本权重完整性。它不是多模态微调产物。
27
+
28
+ ## 来源与许可
29
+
30
+ 基础模型由 Google 提供,其随附模型卡声明 Apache-2.0,参见 [基础模型卡](https://huggingface.co/google/gemma-4-E2B) 和 [基础模型许可](https://ai.google.dev/gemma/docs/gemma_4_license)。上述数据集的来源及条款以各自数据集卡为准。本包不包含基础权重或训练数据。此适配器尚未单独指定分发许可,未自动继承基础模型许可。
SHA256SUMS ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ ee05350c7fda0af4da116020dd7b976d731de3beed4f5e717d5bcc95ead24550 .gitattributes
2
+ ebcd29c065d3ad88fd48dc1bca6dc26d969f1489b4be0c269bfde2a132a1af43 adapter_config.json
3
+ c167c96347564297b5a30558017efe6b094dd394e05ea39e5ed35df73b3577ed adapter_model.safetensors
4
+ 02856ba5d5f46d7f1f9f4d51a166df443ed0b12bc4501e0fdf9a74658bf52de1 load_adapter.py
5
+ 40b97950be82b0ce55d7ceb55b5367b9d17a9eb3207499918fdd2187a803f8db plutolite-adapter.json
6
+ 7d57e74eabb8d12de0a3b40ac6c1636867c3afbb4c5501487c13aa6baaab6dbd README.md
7
+ 762bc9f7756773118c6df5e1f6d7b04066cb5f489c19e3f4bd89047a5eab0a79 requirements.txt
8
+ 9b3ab5f5a73e81923ee328511788cb5c98021af494b392c3589568f14e6f4d6a training_metrics.json
9
+ 19c316cacdd64a9ca79be5c983cb40c10672d8819445d994222c1025ae8d2b17 training_provenance.json
10
+ cdc9f3e9d2dd1484ffe45f064f710215e301b2d13747ecf2b7c3f7d1155324cd validation.json
adapter_config.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "google/gemma-4-E2B",
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": 16,
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
+ "monteclora_config": null,
27
+ "peft_type": "LORA",
28
+ "peft_version": "0.20.0",
29
+ "qalora_group_size": 16,
30
+ "r": 8,
31
+ "rank_pattern": {},
32
+ "revision": "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f",
33
+ "target_modules": [
34
+ "q_proj",
35
+ "v_proj",
36
+ "k_proj",
37
+ "o_proj"
38
+ ],
39
+ "target_parameters": null,
40
+ "task_type": "CAUSAL_LM",
41
+ "trainable_token_indices": null,
42
+ "use_bdlora": null,
43
+ "use_dora": false,
44
+ "use_qalora": false,
45
+ "use_rslora": false,
46
+ "velora_config": null
47
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c167c96347564297b5a30558017efe6b094dd394e05ea39e5ed35df73b3577ed
3
+ size 10741440
load_adapter.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Load the PlutoLite-v1 text adapter with its original completion format."""
2
+
3
+ import argparse
4
+ from pathlib import Path
5
+
6
+
7
+ def main():
8
+ parser = argparse.ArgumentParser(description=__doc__)
9
+ parser.add_argument("--adapter", default=str(Path(__file__).resolve().parent))
10
+ parser.add_argument("--base-model", default="google/gemma-4-E2B")
11
+ parser.add_argument("--local-files-only", action="store_true")
12
+ parser.add_argument("--prompt", required=True)
13
+ parser.add_argument("--max-new-tokens", type=int, default=256)
14
+ args = parser.parse_args()
15
+ if args.max_new_tokens < 1:
16
+ parser.error("--max-new-tokens must be positive")
17
+
18
+ import torch
19
+ from accelerate.hooks import remove_hook_from_module
20
+ from peft import PeftModel
21
+ from transformers import AutoTokenizer, BitsAndBytesConfig, Gemma4ForCausalLM
22
+
23
+ if not torch.cuda.is_available() or not torch.cuda.is_bf16_supported():
24
+ raise RuntimeError("This NF4 example requires a BF16-capable NVIDIA GPU.")
25
+ revision = "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f"
26
+ source_kwargs = dict(
27
+ revision=revision,
28
+ local_files_only=args.local_files_only,
29
+ trust_remote_code=False,
30
+ )
31
+ tokenizer = AutoTokenizer.from_pretrained(args.base_model, **source_kwargs)
32
+ if tokenizer.pad_token_id is None:
33
+ tokenizer.pad_token = tokenizer.eos_token
34
+ base, loading = Gemma4ForCausalLM.from_pretrained(
35
+ args.base_model,
36
+ **source_kwargs,
37
+ dtype=torch.bfloat16,
38
+ device_map={"": "cuda:0", "model.embed_tokens_per_layer": "cpu"},
39
+ attn_implementation="sdpa",
40
+ quantization_config=BitsAndBytesConfig(
41
+ load_in_4bit=True,
42
+ bnb_4bit_quant_type="nf4",
43
+ bnb_4bit_use_double_quant=True,
44
+ bnb_4bit_compute_dtype=torch.bfloat16,
45
+ llm_int8_enable_fp32_cpu_offload=True,
46
+ ),
47
+ key_mapping={r"^model\.language_model\.": "model."},
48
+ output_loading_info=True,
49
+ )
50
+ if any(loading.get(key) for key in ("missing_keys", "mismatched_keys", "error_msgs")):
51
+ raise RuntimeError(f"Incomplete base text model loading: {loading}")
52
+
53
+ # Keep the large PLE table on CPU and transfer only lookup results to CUDA.
54
+ embedding = base.model.embed_tokens_per_layer
55
+ remove_hook_from_module(embedding, recurse=True)
56
+ embedding.to(device="cpu", dtype=torch.bfloat16)
57
+ embedding.register_forward_pre_hook(lambda module, inputs: (inputs[0].to("cpu"),))
58
+ embedding.register_forward_hook(lambda module, inputs, output: output.to("cuda:0"))
59
+ placement = getattr(base, "hf_device_map", None)
60
+ if placement is not None:
61
+ del base.hf_device_map
62
+ try:
63
+ model = PeftModel.from_pretrained(
64
+ base, args.adapter, is_trainable=False, local_files_only=args.local_files_only
65
+ )
66
+ finally:
67
+ if placement is not None:
68
+ base.hf_device_map = placement
69
+ model.eval()
70
+ prefix = (tokenizer.bos_token or "") + args.prompt
71
+ inputs = tokenizer(prefix, add_special_tokens=False, return_tensors="pt").to("cuda:0")
72
+ with torch.inference_mode():
73
+ output = model.generate(
74
+ **inputs,
75
+ max_new_tokens=args.max_new_tokens,
76
+ do_sample=False,
77
+ pad_token_id=tokenizer.pad_token_id,
78
+ eos_token_id=tokenizer.eos_token_id,
79
+ )
80
+ print(tokenizer.decode(output[0, inputs.input_ids.shape[1]:], skip_special_tokens=True))
81
+
82
+
83
+ if __name__ == "__main__":
84
+ main()
plutolite-adapter.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "repo_id": "google/gemma-4-E2B",
3
+ "revision": "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f",
4
+ "parent": "reasoning-train-20260912b",
5
+ "prompt_format": "completion",
6
+ "instruction": "",
7
+ "parent_is_provenance_only": true
8
+ }
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # Install a CUDA-enabled PyTorch build suitable for your GPU separately.
2
+ torch>=2.10,<3
3
+ transformers==5.17.0
4
+ peft==0.20.0
5
+ accelerate==1.15.0
6
+ bitsandbytes==0.50.2
7
+ safetensors==0.8.0
8
+ huggingface_hub==1.30.0
training_metrics.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "steps": 69,
3
+ "samples": 548,
4
+ "dropped_samples": 0,
5
+ "max_sequence_tokens": 1956,
6
+ "supervised_tokens": 78740,
7
+ "loss": 0.4510538172454649,
8
+ "trainable_parameters": 2678784,
9
+ "optimizer": "PagedAdamW8bit",
10
+ "gradient_checkpointing": true,
11
+ "attention": "auto",
12
+ "attention_kernels": {
13
+ "efficient": 38360
14
+ },
15
+ "optimizer_state_mib": 5.812744140625,
16
+ "peak_cuda_gib": 8.748569011688232,
17
+ "peak_cuda_reserved_gib": 13.013671875
18
+ }
training_provenance.json ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_run": "python-train-20260912",
3
+ "completed_at": "2026-09-12T06:30:32.921625+00:00",
4
+ "elapsed_seconds": 1175.1,
5
+ "source_adapter_sha256": "c167c96347564297b5a30558017efe6b094dd394e05ea39e5ed35df73b3577ed",
6
+ "weight_format": "PEFT LoRA safetensors; cumulative adapter; base model required",
7
+ "prompt_format": "completion",
8
+ "prompt_prefix": "BOS + raw prompt",
9
+ "instruction": "",
10
+ "independent_evaluation_claimed": false,
11
+ "humaneval_used_in_training": true,
12
+ "final_stage_dataset_ids": {
13
+ "vezora_tested": "Vezora/Tested-22k-Python-Alpaca",
14
+ "iamtarun": "iamtarun/python_code_instructions_18k_alpaca",
15
+ "evol_instruct": "mlabonne/Evol-Instruct-Python-26k",
16
+ "humaneval": "openai/openai_humaneval"
17
+ },
18
+ "environment_at_packaging": {
19
+ "torch": "2.14.0+cu130",
20
+ "transformers": "5.17.0",
21
+ "peft": "0.20.0",
22
+ "accelerate": "1.15.0",
23
+ "bitsandbytes": "0.50.2",
24
+ "safetensors": "0.8.0",
25
+ "huggingface_hub": "1.30.0"
26
+ },
27
+ "stages": [
28
+ {
29
+ "run": "humaneval-train-correct-20260912",
30
+ "manifest": {
31
+ "workflow": "direct_humaneval_supervised_finetune",
32
+ "benchmark": "HumanEval",
33
+ "count": 164,
34
+ "data_sha256": "b796127e635a67f93fb35c04f4cb03cf06f38c8072ee7cee8833d7bee06979ef",
35
+ "model": {
36
+ "repo_id": "google/gemma-4-E2B",
37
+ "revision": "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f",
38
+ "load_in_4bit": true,
39
+ "offload_embeddings": true,
40
+ "dtype": "bfloat16",
41
+ "attention": "auto",
42
+ "max_seq_length": 1024,
43
+ "max_new_tokens": 8192,
44
+ "prompt_format": "completion",
45
+ "instruction": ""
46
+ },
47
+ "training": {
48
+ "lora_rank": 8,
49
+ "lora_alpha": 16,
50
+ "lora_dropout": 0.05,
51
+ "target_modules": [
52
+ "q_proj",
53
+ "k_proj",
54
+ "v_proj",
55
+ "o_proj"
56
+ ],
57
+ "learning_rate": 0.0001,
58
+ "epochs": 3.0,
59
+ "batch_size": 1,
60
+ "gradient_accumulation_steps": 8,
61
+ "gradient_checkpointing": true,
62
+ "optimizer": "paged_adamw_8bit",
63
+ "weight_decay": 0.01,
64
+ "max_grad_norm": 1.0,
65
+ "warmup_ratio": 0.05,
66
+ "max_steps": -1
67
+ }
68
+ },
69
+ "metrics": {
70
+ "steps": 62,
71
+ "samples": 164,
72
+ "dropped_samples": 0,
73
+ "max_sequence_tokens": 630,
74
+ "supervised_tokens": 31848,
75
+ "loss": 0.47171039554283223,
76
+ "trainable_parameters": 2678784,
77
+ "optimizer": "PagedAdamW8bit",
78
+ "gradient_checkpointing": true,
79
+ "attention": "auto",
80
+ "attention_kernels": {
81
+ "efficient": 34440
82
+ },
83
+ "optimizer_state_mib": 5.812744140625,
84
+ "peak_cuda_gib": 3.9978761672973633,
85
+ "peak_cuda_reserved_gib": 6.1484375
86
+ }
87
+ },
88
+ {
89
+ "run": "reasoning-train-20260912b",
90
+ "manifest": {
91
+ "workflow": "gsm8k_reasoning_plus_humaneval_qlora",
92
+ "dataset": "openai/gsm8k",
93
+ "dataset_sha256": "ea82612ea9582142387730c793eb67d3b12849002bc0b7fa6f8efafa7351419d",
94
+ "gsm8k_samples": 512,
95
+ "humaneval_samples": 164,
96
+ "seed": 42,
97
+ "parent": "humaneval-train-correct-20260912",
98
+ "model": {
99
+ "repo_id": "google/gemma-4-E2B",
100
+ "revision": "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f",
101
+ "load_in_4bit": true,
102
+ "offload_embeddings": true,
103
+ "dtype": "bfloat16",
104
+ "attention": "auto",
105
+ "max_seq_length": 2048,
106
+ "max_new_tokens": 8192,
107
+ "prompt_format": "completion",
108
+ "instruction": ""
109
+ },
110
+ "training": {
111
+ "lora_rank": 8,
112
+ "lora_alpha": 16,
113
+ "lora_dropout": 0.05,
114
+ "target_modules": [
115
+ "q_proj",
116
+ "k_proj",
117
+ "v_proj",
118
+ "o_proj"
119
+ ],
120
+ "learning_rate": 0.0001,
121
+ "epochs": 1.0,
122
+ "batch_size": 1,
123
+ "gradient_accumulation_steps": 8,
124
+ "gradient_checkpointing": true,
125
+ "optimizer": "paged_adamw_8bit",
126
+ "weight_decay": 0.01,
127
+ "max_grad_norm": 1.0,
128
+ "warmup_ratio": 0.05,
129
+ "max_steps": -1
130
+ }
131
+ },
132
+ "metrics": {
133
+ "steps": 85,
134
+ "samples": 676,
135
+ "dropped_samples": 0,
136
+ "max_sequence_tokens": 630,
137
+ "supervised_tokens": 74827,
138
+ "loss": 0.6580786612069287,
139
+ "trainable_parameters": 2678784,
140
+ "optimizer": "PagedAdamW8bit",
141
+ "gradient_checkpointing": true,
142
+ "attention": "auto",
143
+ "attention_kernels": {
144
+ "efficient": 47320
145
+ },
146
+ "optimizer_state_mib": 5.812744140625,
147
+ "peak_cuda_gib": 3.9978761672973633,
148
+ "peak_cuda_reserved_gib": 6.1484375
149
+ }
150
+ },
151
+ {
152
+ "run": "python-train-20260912",
153
+ "manifest": {
154
+ "workflow": "filtered_python_code_qlora",
155
+ "datasets": {
156
+ "vezora_tested": "985301ecb70ca60cb7a76e9253574230663d77ef729571cf115227e3b36b57fc",
157
+ "iamtarun": "bbc6fa528fcc17a845e863da8652bc02c2523373cd8cc0b9af1ffb374e9ae378",
158
+ "evol_instruct": "e777b0d2c8d39544bb954654509e95f7ecab52ce1ccfb7c7d265848762d5628b"
159
+ },
160
+ "per_source": 128,
161
+ "python_samples": 384,
162
+ "humaneval_samples": 164,
163
+ "seed": 42,
164
+ "parent": "reasoning-train-20260912b",
165
+ "model": {
166
+ "repo_id": "google/gemma-4-E2B",
167
+ "revision": "d29ff6b45f081a49ee2733a859c9c9c2d95d1a6f",
168
+ "load_in_4bit": true,
169
+ "offload_embeddings": true,
170
+ "dtype": "bfloat16",
171
+ "attention": "auto",
172
+ "max_seq_length": 2048,
173
+ "max_new_tokens": 8192,
174
+ "prompt_format": "completion",
175
+ "instruction": ""
176
+ },
177
+ "training": {
178
+ "lora_rank": 8,
179
+ "lora_alpha": 16,
180
+ "lora_dropout": 0.05,
181
+ "target_modules": [
182
+ "q_proj",
183
+ "k_proj",
184
+ "v_proj",
185
+ "o_proj"
186
+ ],
187
+ "learning_rate": 0.0001,
188
+ "epochs": 1.0,
189
+ "batch_size": 1,
190
+ "gradient_accumulation_steps": 8,
191
+ "gradient_checkpointing": true,
192
+ "optimizer": "paged_adamw_8bit",
193
+ "weight_decay": 0.01,
194
+ "max_grad_norm": 1.0,
195
+ "warmup_ratio": 0.05,
196
+ "max_steps": -1
197
+ }
198
+ },
199
+ "metrics": {
200
+ "steps": 69,
201
+ "samples": 548,
202
+ "dropped_samples": 0,
203
+ "max_sequence_tokens": 1956,
204
+ "supervised_tokens": 78740,
205
+ "loss": 0.4510538172454649,
206
+ "trainable_parameters": 2678784,
207
+ "optimizer": "PagedAdamW8bit",
208
+ "gradient_checkpointing": true,
209
+ "attention": "auto",
210
+ "attention_kernels": {
211
+ "efficient": 38360
212
+ },
213
+ "optimizer_state_mib": 5.812744140625,
214
+ "peak_cuda_gib": 8.748569011688232,
215
+ "peak_cuda_reserved_gib": 13.013671875
216
+ }
217
+ }
218
+ ]
219
+ }
validation.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "adapter_source_sha256_matches": true,
3
+ "tensor_count": 200,
4
+ "parameter_count": 2678784,
5
+ "tensor_dtype": "float32",
6
+ "all_tensors_finite": true,
7
+ "all_adapter_keys_and_shapes_match_Gemma4ForCausalLM": true,
8
+ "model_card_and_peft_config_parsed": true,
9
+ "load_script_ruff_check": "passed",
10
+ "local_nf4_inference_smoke_test": {
11
+ "exit_code": 0,
12
+ "max_new_tokens": 8,
13
+ "prompt": "Write a Python function that adds two integers.",
14
+ "output": "def add_integers(a,",
15
+ "scope": "Loading and generation only; not a functional code benchmark.",
16
+ "base_text_weights_missing_or_mismatched": false,
17
+ "unused_base_weights": "Expected vision/audio tensors from the multimodal base checkpoint."
18
+ }
19
+ }