Spaces:
Sleeping
Sleeping
File size: 1,719 Bytes
be54a79 90ef05b be54a79 d79632e be54a79 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer
from datasets import load_dataset
# Charger le modèle et le tokenizer
model_name = "mistralai/Mistral-7B-v0.1" # Tu peux changer pour DeepSeek R1 7B/8B
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
load_in_4bit=True, # QLoRA
device_map="auto"
)
# Charger le dataset (peut être un dataset HF ou un CSV local)
dataset = load_dataset("facebook/natural_reasoning") # Remplace par ton dataset HF
# Configurer LoRA (adapté pour QLoRA)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# Arguments d'entraînement
training_args = TrainingArguments(
output_dir="./results",
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
num_train_epochs=3,
learning_rate=2e-4,
fp16=True,
optim="paged_adamw_8bit",
logging_dir="./logs",
save_strategy="epoch"
)
# Fine-tuning avec SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
dataset_text_field="question", # Adapter selon le format du dataset
peft_config=lora_config,
args=training_args
)
# Interface Gradio
def train():
trainer.train()
model.push_to_hub("sbstagiare/fine-tuned-model")
return "Fine-tuning terminé et modèle uploadé sur Hugging Face !"
gr.Interface(fn=train, inputs=[], outputs="text").launch()
|