This LoRA adapter enhances Qwen3.6-27B's capability in cybersecurity domains including:
1BitsAndBytesConfig(
2 load_in_4bit=True,
3 bnb_4bit_compute_dtype=torch.bfloat16,
4 bnb_4bit_use_double_quant=True,
5 bnb_4bit_quant_type="nf4",
6)
1LoraConfig(
2 r=8,
3 lora_alpha=16,
4 target_modules=[
5 "q_proj", "k_proj", "v_proj", "o_proj",
6 "gate_proj", "up_proj", "down_proj",
7 ],
8 lora_dropout=0.05,
9 bias="none",
10 task_type="CAUSAL_LM",
11)
1SFTConfig(
2 max_length=512,
3 per_device_train_batch_size=1,
4 gradient_accumulation_steps=8,
5 num_train_epochs=1,
6 learning_rate=2e-4,
7 bf16=True,
8 optim="paged_adamw_8bit",
9 warmup_steps=10,
10 lr_scheduler_type="cosine",
11 logging_steps=10,
12)
Loss converged rapidly within the first ~200 steps, indicating successful knowledge injection into the LoRA adapters.
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
3from peft import PeftModel
4
5# Base model
6model_name = "Qwen/Qwen3.6-27B"
7
8# 4-bit quantization config
9bnb_config = BitsAndBytesConfig(
10 load_in_4bit=True,
11 bnb_4bit_compute_dtype=torch.bfloat16,
12 bnb_4bit_use_double_quant=True,
13 bnb_4bit_quant_type="nf4",
14)
15
16tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
17if tokenizer.pad_token is None:
18 tokenizer.pad_token = tokenizer.eos_token
19
20model = AutoModelForCausalLM.from_pretrained(
21 model_name,
22 quantization_config=bnb_config,
23 device_map="auto",
24 torch_dtype=torch.bfloat16,
25 trust_remote_code=True,
26)
27
28# Load LoRA adapter
29model = PeftModel.from_pretrained(model, "hotdogs/qwen3.6-27b-cybersecurity-lora")
1def generate_response(system_prompt, user_prompt):
2 messages = [
3 {"role": "system", "content": system_prompt},
4 {"role": "user", "content": user_prompt},
5 ]
6 text = tokenizer.apply_chat_template(
7 messages, tokenize=False, add_generation_prompt=True
8 )
9 inputs = tokenizer(text, return_tensors="pt").to(model.device)
10
11 outputs = model.generate(
12 **inputs,
13 max_new_tokens=1024,
14 temperature=0.7,
15 top_p=0.9,
16 do_sample=True,
17 )
18 return tokenizer.decode(outputs[0], skip_special_tokens=True)
19
20# Example
21response = generate_response(
22 "You are a cybersecurity expert. Provide detailed, accurate technical information.",
23 "Explain how to identify SQL injection vulnerabilities in a web application."
24)
25print(response)
1python -m peft merge_and_save \
2 --model_name Qwen/Qwen3.6-27B \
3 --peft_model hotdogs/qwen3.6-27b-cybersecurity-lora \
4 --output_dir ./qwen3.6-27b-cybersecurity-merged