Upload folder using huggingface_hub
Browse files- .gitattributes +0 -34
- README.md +30 -3
- SHA256SUMS +10 -0
- adapter_config.json +47 -0
- adapter_model.safetensors +3 -0
- load_adapter.py +84 -0
- plutolite-adapter.json +8 -0
- requirements.txt +8 -0
- training_metrics.json +18 -0
- training_provenance.json +219 -0
- validation.json +19 -0
.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 |
-
|
| 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 |
+
}
|