Views
No views yet
| Property | Value |
|---|---|
| Base Model | microsoft/phi-2 |
| Fine-tuning Method | LoRA (r=8, α=16) |
| Training Data | 24 security Q&A pairs (JSONL format) |
| Model Size | 2.7B parameters (base) |
| LoRA Adapter Size | ~20-30 MB |
| Framework | Transformers + PEFT |
| License | MIT (same as Phi-2) |
| Training Precision | FP16 |
| Quantization | Optional 4-bit via bitsandbytes |
pip install transformers peft torch1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3from peft import PeftModel
4
5# Load base model
6base_model_id = "microsoft/phi-2"
7tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
8base_model = AutoModelForCausalLM.from_pretrained(
9 base_model_id,
10 torch_dtype=torch.float16,
11 device_map="auto",
12 trust_remote_code=True
13)
14
15# Load LoRA adapter
16model = PeftModel.from_pretrained(
17 base_model,
18 "debashis2007/security-phi2-lora"
19)
20
21# Generate security-related responses
22prompt = "What is SQL injection and how can we prevent it?"
23inputs = tokenizer(prompt, return_tensors="pt")
24outputs = model.generate(**inputs, max_length=512)
25response = tokenizer.decode(outputs[0], skip_special_tokens=True)
26print(response)1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
3from peft import PeftModel
4
5# Configure 4-bit quantization
6bnb_config = BitsAndBytesConfig(
7 load_in_4bit=True,
8 bnb_4bit_quant_type="nf4",
9 bnb_4bit_compute_dtype=torch.float16,
10 bnb_4bit_use_double_quant=True,
11)
12
13# Load base model with quantization
14base_model_id = "microsoft/phi-2"
15tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
16base_model = AutoModelForCausalLM.from_pretrained(
17 base_model_id,
18 quantization_config=bnb_config,
19 device_map="auto",
20 trust_remote_code=True
21)
22
23# Load LoRA adapter
24model = PeftModel.from_pretrained(base_model, "debashis2007/security-phi2-lora")
25
26# Generate response
27prompt = "Explain CSRF attacks and mitigation techniques"
28inputs = tokenizer(prompt, return_tensors="pt")
29outputs = model.generate(**inputs, max_length=512)
30response = tokenizer.decode(outputs[0], skip_special_tokens=True)
31print(response)1LoraConfig(
2 r=8,
3 lora_alpha=16,
4 target_modules=["q_proj", "v_proj"],
5 lora_dropout=0.05,
6 bias="none",
7 task_type="CAUSAL_LM"
8)1from transformers import Trainer, TrainingArguments
2from datasets import Dataset
3
4# Load additional training data
5train_dataset = Dataset.from_dict({...})
6
7# Configure training
8training_args = TrainingArguments(
9 output_dir="./security-phi2-v2",
10 num_train_epochs=3,
11 per_device_train_batch_size=2,
12 learning_rate=2e-4,
13)
14
15# Fine-tune
16trainer = Trainer(
17 model=model,
18 args=training_args,
19 train_dataset=train_dataset,
20)
21trainer.train()1from transformers import TextIteratorStreamer
2from threading import Thread
3
4# Setup streaming
5streamer = TextIteratorStreamer(tokenizer, skip_special_tokens=True)
6inputs = tokenizer(prompt, return_tensors="pt")
7
8# Generate with streaming
9generation_kwargs = dict(
10 inputs,
11 streamer=streamer,
12 max_length=512,
13 temperature=0.7,
14)
15thread = Thread(target=model.generate, kwargs=generation_kwargs)
16thread.start()
17
18# Stream output
19for text in streamer:
20 print(text, end="", flush=True)1@article{hu2021lora,
2 title={LoRA: Low-Rank Adaptation of Large Language Models},
3 author={Hu, Edward H and Shen, Yelong and Wallis, Phil and Allen-Zhu, Zeyuan and Li, Yuanzhi and Wang, Shean and Wang, Lu and Chen, Weizhan},
4 journal={arXiv preprint arXiv:2106.09685},
5 year={2021}
6}
7
8@article{gunasekar2023phi,
9 title={Phi-2: The surprising power of small language models},
10 author={Gunasekar, Suriya and Zhang, Yasaman and Aneja, Jyoti and Mendes, Caio C\'esar T and Giorno, Allie Del and Gontijo-Lopes, Rishabh and Saroyan, Vaishaal and Shakev, Sagi and Shekel, Tal and Szuhaj, Mitchell and others},
11 journal={Microsoft Research Blog},
12 year={2023}
13}