Views
No views yet
Note: Outputs may include intermediate reasoning. Do not treat responses as medical advice.
FreedomIntelligence/medical-o1-reasoning-SFT (instruction-style, reasoning-focused){system, instruction, input} styleL=1024 by default)transformers, peft, bitsandbytes, acceleratebf16 (fallback fp16 if needed)r=8, alpha=16, lora_dropout=0.1, target_modules=["q_proj","v_proj","o_proj"]load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=TrueAdamW8bit (bitsandbytes) or adamw_torch_fusedlr=2e-4, cosine decay, warmup_ratio=0.060.01, label smoothing 0.05, gradient clipping 1.0per_device_train_batch_size=4, gradient_accumulation_steps=8 → effective batch 32max_seq_length=10242–3 (use early stopping on val loss)500 steps, keep best on val lossseed=42ceil(num_samples / effective_batch)100k / 32 ≈ 3125……1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4repo = "YOUR_ORG/medical-qwen25-0_5b-lora" # replace with your repo
5tok = AutoTokenizer.from_pretrained(repo, use_fast=True)
6model = AutoModelForCausalLM.from_pretrained(
7 repo,
8 torch_dtype=torch.bfloat16,
9 device_map="auto"
10)
11
12prompt = """You are a clinician. Reason step by step.
13Patient: 56F with chest pain radiating to jaw, diaphoresis...
14Question: Most likely diagnosis and initial management?"""
15inputs = tok(prompt, return_tensors="pt").to(model.device)
16out = model.generate(**inputs, max_new_tokens=256, temperature=0.2, top_p=0.9)
17print(tok.decode(out[0], skip_special_tokens=True))
18
19
20
21
22#Training Script snippet with lora Fine Tunning
23from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
24from peft import LoraConfig, get_peft_model
25import torch
26
27base = "Qwen/Qwen2.5-0.5B-Instruct"
28tok = AutoTokenizer.from_pretrained(base)
29
30model = AutoModelForCausalLM.from_pretrained(
31 base,
32 load_in_4bit=True,
33 torch_dtype=torch.bfloat16,
34 bnb_4bit_quant_type="nf4",
35 bnb_4bit_use_double_quant=True,
36 device_map="auto",
37 low_cpu_mem_usage=True,
38)
39
40lora = LoraConfig(r=8, lora_alpha=16, lora_dropout=0.1,
41 target_modules=["q_proj","v_proj","o_proj"])
42model = get_peft_model(model, lora)
43model.gradient_checkpointing_enable()
44model.config.use_cache = False # training only
45
46args = TrainingArguments(
47 output_dir="ckpts",
48 per_device_train_batch_size=4,
49 gradient_accumulation_steps=8,
50 learning_rate=2e-4,
51 lr_scheduler_type="cosine",
52 warmup_ratio=0.06,
53 weight_decay=0.01,
54 num_train_epochs=3,
55 bf16=True,
56 save_steps=500,
57 evaluation_strategy="steps",
58 eval_steps=500,
59 logging_steps=50,
60 save_safetensors=True,
61 load_best_model_at_end=True,
62 metric_for_best_model="loss",
63 gradient_checkpointing=True,
64)
65# ... Trainer(train_ds, val_ds, callbacks for S3 sync)