|
from unsloth import FastLanguageModel
|
|
import torch
|
|
from datasets import load_dataset
|
|
from transformers import TrainingArguments
|
|
from trl import SFTTrainer
|
|
|
|
|
|
model_name = "deepseek-ai/deepseek-coder-6.7b-instruct"
|
|
model, tokenizer = FastLanguageModel.from_pretrained(
|
|
model_name=model_name,
|
|
max_seq_length=2048,
|
|
dtype=None,
|
|
load_in_4bit=True,
|
|
)
|
|
|
|
|
|
dataset = load_dataset("tatsu-lab/alpaca")
|
|
|
|
|
|
dataset = dataset.map(lambda x: {
|
|
"input": x["instruction"],
|
|
"output": x["output"],
|
|
}, remove_columns=["instruction", "output"])
|
|
|
|
|
|
model = FastLanguageModel.get_peft_model(
|
|
model,
|
|
r=16,
|
|
target_modules=["q_proj", "v_proj"],
|
|
lora_alpha=32,
|
|
lora_dropout=0.1,
|
|
bias="none",
|
|
)
|
|
|
|
|
|
def is_bfloat16_supported():
|
|
return torch.cuda.is_bf16_supported()
|
|
|
|
|
|
training_args = TrainingArguments(
|
|
output_dir="outputs",
|
|
per_device_train_batch_size=2,
|
|
gradient_accumulation_steps=8,
|
|
evaluation_strategy="steps",
|
|
save_strategy="steps",
|
|
save_steps=500,
|
|
save_total_limit=3,
|
|
learning_rate=2e-5,
|
|
weight_decay=0.01,
|
|
logging_dir="logs",
|
|
logging_steps=100,
|
|
fp16=not is_bfloat16_supported(),
|
|
bf16=is_bfloat16_supported(),
|
|
report_to="none",
|
|
num_train_epochs=3,
|
|
)
|
|
|
|
|
|
trainer = SFTTrainer(
|
|
model=model,
|
|
train_dataset=dataset["train"],
|
|
args=training_args,
|
|
tokenizer=tokenizer,
|
|
)
|
|
|
|
|
|
trainer.train()
|
|
|
|
|
|
model.save_pretrained("fine_tuned_llama_3_2")
|
|
tokenizer.save_pretrained("fine_tuned_llama_3_2")
|
|
|