1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4model_id = "MohamedQiqa/Llama-3.2-1B-QLoRA-Summarizer"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 torch_dtype=torch.bfloat16,
10 device_map="auto",
11)
12
13dialogue = """
14Amanda: I baked cookies. Do you want some?
15Jerry: Sure! Bring them over.
16Amanda: I'll be there in 10 minutes.
17"""
18
19messages = [
20 {"role": "system", "content": "Summarize the following dialogue in one or two sentences."},
21 {"role": "user", "content": dialogue},
22]
23
24inputs = tokenizer.apply_chat_template(
25 messages, add_generation_prompt=True, return_tensors="pt"
26).to(model.device)
27
28output = model.generate(inputs, max_new_tokens=64, do_sample=False)
29summary = tokenizer.decode(output[0][inputs.shape[-1]:], skip_special_tokens=True)
30print(summary)
1from transformers import BitsAndBytesConfig
2
3bnb_config = BitsAndBytesConfig(
4 load_in_4bit=True,
5 bnb_4bit_quant_type="nf4",
6 bnb_4bit_compute_dtype=torch.bfloat16,
7)
8
9model = AutoModelForCausalLM.from_pretrained(
10 model_id,
11 quantization_config=bnb_config,
12 device_map="auto",
13)
Fine-tuned using QLoRA (4-bit quantization + LoRA adapters) on a single GPU, with hyperparameters selected through a one-at-a-time sensitivity sweep over LoRA rank, learning rate, and target modules, tracked in Weights & Biases.