brvm_finetuner / finetune_full.py
lamekemal's picture
Update finetune_full.py
a43239d verified
raw
history blame
2.42 kB
# finetune_full.py
import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
import os
os.environ["OMP_NUM_THREADS"] = "8"
base_model = "mistralai/Mistral-7B-Instruct-v0.3"
new_model_dir = "./mistral-7b-brvm-full-finetuned"
output_dir = "./results_full"
# 1. Dataset
dataset = load_dataset("lamekemal/brvm_finetune")
# 2. Charger modèle + tokenizer en FP16
model = AutoModelForCausalLM.from_pretrained(
base_model,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True,
)
model.config.use_cache = False
model.gradient_checkpointing_enable()
tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
# 3. Prétraitement
def tokenize_function(examples):
texts = [
f"Instruction: {instr}\nRéponse: {resp}"
for instr, resp in zip(examples["instruction"], examples["response"])
]
return tokenizer(
texts,
truncation=True,
padding="max_length",
max_length=512,
)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# 4. Arguments d’entraînement
training_args = TrainingArguments(
output_dir=output_dir,
num_train_epochs=3,
per_device_train_batch_size=4, # full finetune = VRAM lourd
gradient_accumulation_steps=4,
optim="adamw_torch_fused",
save_steps=100,
logging_steps=10,
learning_rate=2e-5,
fp16=True,
max_grad_norm=1.0,
warmup_ratio=0.03,
lr_scheduler_type="cosine",
report_to="tensorboard",
eval_strategy="steps",
eval_steps=100,
save_total_limit=2,
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
)
# 5. Trainer classique (pas LoRA)
trainer = Trainer(
model=model,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
args=training_args,
)
# 6. Entraînement
trainer.train()
# 7. Sauvegarde locale et push Hub
trainer.save_model(new_model_dir)
tokenizer.save_pretrained(new_model_dir)
from huggingface_hub import HfApi
api = HfApi()
repo_id = "lamekemal/mistral-7b-brvm-full-finetuned"
trainer.push_to_hub(repo_id)
tokenizer.push_to_hub(repo_id)
print(f"✅ Full fine-tune sauvegardé dans {new_model_dir} et poussé sur Hugging Face Hub")