# Install dependencies# pip install transformers datasets peft trl accelerate bitsandbytes huggingface_hub from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArgumentsfrom peft import LoraConfig, get_peft_model, TaskTypefrom trl import SFTTrainer, DataCollatorForCompletionOnlyLMfrom datasets import load_dataset # 1. Load datasetdataset = load_dataset("tatsu-lab/alpaca", split="train") # 2. Format examplesdef format_alpaca(ex): input_section = f"### Input:\n{ex['input']}\n\n" if ex["input"].strip() else "" return { "text": ( "Below is an instruction that describes a task. " "Write a response that appropriately completes the request.\n\n" f"### Instruction:\n{ex['instruction']}\n\n" f"{input_section}" f"### Response:\n{ex['output']}" ) } dataset = dataset.map(format_alpaca, batched=False) # 3. Load model + LoRAtokenizer = AutoTokenizer.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0")tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( "TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype="auto", device_map={"": 0},)model.config.use_cache = Falsemodel.enable_input_require_grads() lora_config = LoraConfig( r=16, lora_alpha=32, lora_dropout=0.05, bias="none", task_type=TaskType.CAUSAL_LM, target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"],)model = get_peft_model(model, lora_config) # 4. Traintrainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=dataset, dataset_text_field="text", max_seq_length=512, data_collator=DataCollatorForCompletionOnlyLM("### Response:\n", tokenizer=tokenizer), args=TrainingArguments( output_dir="./chatbot-lora", num_train_epochs=3, per_device_train_batch_size=4, gradient_accumulation_steps=4, learning_rate=2e-4, fp16=True, gradient_checkpointing=True, save_strategy="steps", save_steps=200, save_total_limit=3, eval_strategy="no", ),)trainer.train()