Views
No views yet
"Be concise", but that:enable_thinking=False, no system prompt):| Prompt | Base (unsloth/Qwen3.6-35B-A3B) | caveman-qwen3.6 |
|---|---|---|
| "How do I reverse a string in Python?" | 98+ words — markdown headers, multiple methods, prose explanation | 8 words — s = "hello"; reversed_s = s[::-1] |
| "What is the capital of Japan?" | 53 words — explains Edo→Tokyo history, mentions constitution | 1 word — Tokyo. |
| "Write a function that returns true if a number is even." | 22 words — type hints + docstring | 10 words — bare function |
| "Explain what a closure is in JavaScript." | 45+ words — markdown structured | 31 words — direct definition |
| "How do I list files larger than 100MB on Linux?" | 114 words — explainer table breaking down each flag | 9 words — bare find command |
| Property | Value |
|---|---|
| Base model | unsloth/Qwen3.6-35B-A3B (256 experts, 8 active per token, hybrid DeltaNet+Attention) |
| Fine-tuning method | QLoRA (4-bit) via Axolotl 0.16.2.dev0 |
| MoE LoRA backend | ScatterMoE (custom Triton kernels) |
| Training environment | RunPod A100 80GB PCIe |
| LoRA rank | 32 |
| LoRA alpha | 64 |
| Target modules | q_proj, k_proj, v_proj, o_proj (attention only) |
| Trainable parameters | 6,881,280 (0.04% of total) |
| Sequence length | 2048 |
| Sample packing | enabled |
| Effective batch size | 8 |
| Epochs | ~3 (33 packed steps) |
| Optimizer | AdamW 8-bit |
| Learning rate | 2e-4 (cosine) |
| Final training loss | 0.519 |
| Training time | 6.6 min |
| Distribution format | Adapter only (apply to base model at runtime) |
| Context window | inherited from base (128K via YaRN) |
1import torch
2from peft import PeftModel
3from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
4
5BASE = "unsloth/Qwen3.6-35B-A3B"
6ADAPTER = "njmason/caveman-qwen3.6"
7
8bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16)
9tok = AutoTokenizer.from_pretrained(BASE)
10base = AutoModelForCausalLM.from_pretrained(
11 BASE, quantization_config=bnb, device_map="auto", torch_dtype=torch.bfloat16
12)
13model = PeftModel.from_pretrained(base, ADAPTER)
14model.eval()
15
16prompt = "How do I run a Docker container?"
17msgs = [{"role": "user", "content": prompt}]
18text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True, enable_thinking=False)
19ids = tok(text, return_tensors="pt").to(model.device)
20
21with torch.inference_mode():
22 out = model.generate(**ids, max_new_tokens=200, do_sample=False)
23print(tok.decode(out[0][ids.input_ids.shape[1]:], skip_special_tokens=True).strip())Tip:enable_thinking=Falsedisables the<think>...</think>block that Qwen3.6 emits by default. With thinking disabled, you get the terse-only behavior immediately. With thinking enabled, the model still reasons internally — useful for harder problems.
convert_hf_to_gguf.py.1@misc{caveman-qwen3.6,
2 author = {Nick Mason},
3 title = {caveman-qwen3.6: A brevity-trained QLoRA adapter for Qwen3.6-35B-A3B},
4 year = {2026},
5 publisher = {Hugging Face},
6 url = {https://huggingface.co/njmason/caveman-qwen3.6}
7}1base_model: unsloth/Qwen3.6-35B-A3B
2
3plugins:
4 - axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin
5 - axolotl.integrations.kernels.KernelsPlugin
6 - axolotl.integrations.liger.LigerPlugin
7use_kernels: true
8use_scattermoe: true
9liger_layer_norm: true
10liger_rope: true
11liger_rms_norm: true
12liger_glu_activation: true
13liger_rms_norm_gated: true
14
15torch_compile: false
16
17chat_template: qwen3_5
18datasets:
19 - path: pairs_flat.jsonl
20 type: chat_template
21
22val_set_size: 0
23output_dir: ./outputs/qwen36-caveman-lora
24dataset_prepared_path: last_run_prepared
25
26sequence_len: 2048
27sample_packing: true
28
29load_in_4bit: true
30quantize_moe_experts: true
31adapter: qlora
32
33lora_r: 32
34lora_alpha: 64
35lora_dropout: 0
36lora_target_modules:
37 - q_proj
38 - k_proj
39 - v_proj
40 - o_proj
41
42lora_qkv_kernel: true
43lora_o_kernel: true
44lora_mlp_kernel: false
45
46gradient_accumulation_steps: 4
47micro_batch_size: 2
48num_epochs: 3
49optimizer: adamw_torch_8bit
50lr_scheduler: cosine
51learning_rate: 0.0002
52
53bf16: auto
54tf32: true
55
56gradient_checkpointing: true
57activation_offloading: true
58logging_steps: 10
59save_strategy: epoch
60save_total_limit: 2
61flash_attention: true
62
63warmup_ratio: 0.03
64weight_decay: 0.01