Guest User

qwen lora

a guest
Aug 18th, 2026
65
0
148 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.90 KB | Source Code | 0 0
  1. import os
  2.  
  3. os.environ.setdefault("PYTORCH_CUDA_ALLOC_CONF", "expandable_segments:True")
  4.  
  5. import torch
  6. from datasets import load_dataset
  7. from transformers import Trainer, TrainingArguments, DataCollatorForCompletionOnlyLM
  8. from unsloth import FastLanguageModel, is_bfloat16_supported
  9.  
  10. MODEL_NAME = "Qwen/Qwen3.5-4B-Base"
  11. DATASET_PATH = os.path.join(os.path.dirname(__file__), '..', 'datasets', 'MyDataset.jsonl')
  12. OUTPUT_DIR = os.path.join(os.path.dirname(__file__), '..', 'qwen_lora')
  13. MAX_SEQ_LENGTH = 4096
  14. LORA_R = 16
  15. LORA_ALPHA = 32
  16. LORA_DROPOUT = 0
  17. BATCH_SIZE = 1
  18. GRAD_ACCUM = 8
  19. LEARNING_RATE = 2e-4
  20. NUM_EPOCHS = 5
  21. WARMUP_STEPS = 10
  22.  
  23. def main():
  24.     model, tokenizer = FastLanguageModel.from_pretrained(
  25.         MODEL_NAME,
  26.         max_seq_length=MAX_SEQ_LENGTH,
  27.         load_in_4bit=True,
  28.         dtype=None,
  29.         local_files_only=True,
  30.     )
  31.  
  32.     model = FastLanguageModel.get_peft_model(
  33.         model,
  34.         r=LORA_R,
  35.         target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
  36.                         "gate_proj", "up_proj", "down_proj",
  37.                         "in_proj_qkv", "in_proj_z", "out_proj",
  38.                         "in_proj_a", "in_proj_b"],
  39.         lora_alpha=LORA_ALPHA,
  40.         lora_dropout=LORA_DROPOUT,
  41.         bias="none",
  42.         use_gradient_checkpointing="unsloth",
  43.     )
  44.     model.print_trainable_parameters()
  45.  
  46.     text_tok = tokenizer.tokenizer
  47.     text_tok.pad_token = text_tok.eos_token
  48.  
  49.     dataset = load_dataset("json", data_files=DATASET_PATH, split="train")
  50.  
  51.     def tokenize_fn(examples):
  52.         result = text_tok(
  53.             examples["text"],
  54.             truncation=True,
  55.             max_length=MAX_SEQ_LENGTH,
  56.             padding=False,
  57.         )
  58.         return result
  59.  
  60.     dataset = dataset.map(tokenize_fn, batched=True, remove_columns=["text"])
  61.     print(f"Examples: {len(dataset)}")
  62.  
  63.     response_template = "<|im_start|>assistant\n"
  64.  
  65.     data_collator = DataCollatorForCompletionOnlyLM(
  66.         response_template=response_template,
  67.         tokenizer=text_tok,
  68.         mlm=False,
  69.     )
  70.  
  71.     trainer = Trainer(
  72.         model=model,
  73.         args=TrainingArguments(
  74.             output_dir=OUTPUT_DIR,
  75.             num_train_epochs=NUM_EPOCHS,
  76.             per_device_train_batch_size=BATCH_SIZE,
  77.             gradient_accumulation_steps=GRAD_ACCUM,
  78.             learning_rate=LEARNING_RATE,
  79.             warmup_steps=WARMUP_STEPS,
  80.             optim="adamw_8bit",
  81.             fp16=not is_bfloat16_supported(),
  82.             bf16=is_bfloat16_supported(),
  83.             logging_steps=10,
  84.             save_steps=200,
  85.             save_total_limit=2,
  86.             save_only_model=True,
  87.             report_to="none",
  88.         ),
  89.         train_dataset=dataset,
  90.         data_collator=data_collator,
  91.     )
  92.  
  93.     trainer.train()
  94.  
  95.     model.save_pretrained(OUTPUT_DIR)
  96.     tokenizer.save_pretrained(OUTPUT_DIR)
  97.  
  98. if __name__ == "__main__":
  99.     main()
Advertisement
Add Comment
Please, Sign In to add comment