Views
No views yet
0.8.0.dev01# Objectif: SFT QLoRA 4-bit rapide et stable sur A40 48Go
2
3# -------- Modèle --------
4base_model: microsoft/Phi-4-mini-instruct
5model_type: AutoModelForCausalLM
6tokenizer_type: AutoTokenizer
7#trust_remote_code: true
8
9# -------- Contexte / I/O --------
10# 4096 est un bon sweet spot A40 (on peut monter à 8192 si besoin, cf. variantes).
11sequence_len: 4096
12sample_packing: true # pack d’exemples pour remplir les séquences
13pad_to_sequence_len: true
14# group_by_length: true # optionnel: batches plus denses, parfois + perf
15
16# -------- Données --------
17datasets:
18 - path: laurent-maille/pcl-test-S27 # JSONL en format chat ou instruct
19 type: chat_template
20 field_messages: messages
21 # conversation: chat
22 # Si ton dataset est en simples "prompt"/"response", remplace par:
23 # type: completion
24 # field_input: prompt
25 # field_output: response
26dataset_prepared_path: ./prepared/plc_sharegpt
27val_set_size: 0.02 # ~2% pour validation
28
29# Normalisation (optionnelle — utile si sources hétérogènes)
30# preprocessed: false
31# shuffle: true
32# dataset_processes: 4
33
34# Ne pas pénaliser le prompt utilisateur (SFT standard)
35train_on_inputs: false
36
37# -------- QLoRA / BitsAndBytes --------
38adapter: lora
39load_in_4bit: true
40bnb_4bit_quant_type: nf4
41bnb_4bit_use_double_quant: true
42bnb_4bit_compute_dtype: bfloat16
43
44# -------- Cibles LoRA (Phi-4 mini) --------
45# Essaye d’abord cette liste; si Axolotl signale qu’un module n’existe pas,
46# utilise le fallback juste dessous.
47lora_r: 16
48lora_alpha: 32
49lora_dropout: 0.05
50#lora_target_modules: [qkv_proj, o_proj, gate_up_proj, down_proj]
51# Fallback universel:
52lora_target_modules: [q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj]
53
54# -------- Optim / Scheduler --------
55optimizer: adamw_torch
56learning_rate: 1.5e-4
57lr_scheduler: cosine
58warmup_ratio: 0.05
59weight_decay: 0.05
60max_grad_norm: 1.0
61
62# -------- Entraînement --------
63epochs: 2 # 2–3 pour 30–80M tokens
64micro_batch_size: 4 # par GPU
65gradient_accumulation_steps: 8 # => ~131k tokens/step (4×4096×8) si packing plein
66gradient_checkpointing: true
67bf16: true
68flash_attention_2: true # fortement recommandé sur A40
69torch_compile: true # active seulement si ta stack PyTorch est clean
70
71# -------- Évaluation / Sauvegardes --------
72logging_steps: 10
73eval_strategy: steps
74eval_steps: 200
75save_steps: 400
76save_total_limit: 3
77output_dir: ./outputs/phi4mini_qlora_plc
78
79# -------- Déploiement LoRA --------
80lora_fuse: true # true pour fusionner en un seul .bin en fin
81
82# -------- Journalisation (optionnelle) --------
83wandb_project: phi4mini_qlora
84wandb_run_name: a40_run_01
85wandb_watch: gradients
86
87# -------- Deepspeed (optionnel, 1xGPU) --------
88# deepspeed: configs/ds_zero2_a40.json
89# Remarque: sur 1 GPU, Deepspeed n’apporte pas toujours un gain majeur,
90# mais Zero-2 peut stabiliser la mémoire si tu montes seq_len/batch.
91
92# -------- Gestions diverses --------
93# gradient_accumulation_bytes: null
94save_safetensors: true
95# strict: false
96| Training Loss | Epoch | Step | Validation Loss |
|---|---|---|---|
| No log | 0.0181 | 1 | 7.1369 |