import torch import datasets from transformers import TrainingArguments, AutoConfig, AutoTokenizer, AutoModelForCausalLM import trl from transformers import BitsAndBytesConfig train_dataset = datasets.load_dataset('HuggingFaceTB/cosmopedia-20k', split='train') args = TrainingArguments( output_dir="./test-sft", max_steps=20000, per_device_train_batch_size=1, optim="adafactor", report_to="none", ) model_id = "microsoft/phi-2" tokenizer = AutoTokenizer.from_pretrained(model_id) nf4_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 ) model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=nf4_config,device_map="auto") print(model) from peft import LoraConfig peft_config = LoraConfig( lora_alpha=16, lora_dropout=0.1, r=64, target_modules=["q_proj", "v_proj", "k_proj", "dense", "lm_head", "fc1", "fc2"], bias="none", task_type="CAUSAL_LM", ) model.add_adapter(peft_config) trainer = trl.SFTTrainer( model=model, args=args, train_dataset=train_dataset, dataset_text_field='text', max_seq_length=1024 ) trainer.train() trainer.model.save_pretrained("sft", dtype=torch.bfloat16) trainer.tokenizer.save_pretrained("sft")