Bayesian-LoRA: LoRA based Parameter Efficient Fine-Tuning using Optimal Quantization levels and Rank Values trough Differentiable Bayesian Gates
Paper
•
2406.13046
•
Published
Một hệ thống Adapter Fusion cho các tác vụ Pentest, kết hợp nhiều LoRA adapters được fine-tune trên các domain khác nhau của cybersecurity.
PentestFusion sử dụng kỹ thuật Adapter Fusion để kết hợp 4 LoRA adapters chuyên biệt:
Mỗi adapter được fine-tune độc lập trên Llama-3.1-8B-Instruct, sau đó được kết hợp thông qua một Fusion Layer sử dụng attention mechanism để tự động điều chỉnh trọng số dựa trên input.
Meta-Llama-3.1-8B-Instruct (4-bit quantization)Mỗi adapter sử dụng:
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_projFusion layer sử dụng attention mechanism để:
# Kiến trúc Fusion
h (base model) → Query
z₁, z₂, z₃, z₄ (adapters) → Keys & Values
Attention(Q, K, V) → Fused Output
pip install -r requirements.txt
from run_fusion import FusionModel
import torch
from unsloth import FastLanguageModel
from peft import PeftModel
# Load base model
BASE_MODEL = "unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit"
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=BASE_MODEL,
max_seq_length=2048,
)
# Load adapters
model = PeftModel.from_pretrained(model, "./adapters/llama3_cve_adapter", adapter_name="cve")
model.load_adapter("./adapters/llama3_capec_adapter", adapter_name="capec")
model.load_adapter("./adapters/llama3_tool_adapter", adapter_name="tools")
model.load_adapter("./adapters/llama3_vulhub_writeup_adapter", adapter_name="vulhub")
# Tạo fusion model
fusion_model = FusionModel(model, ["cve", "capec", "tools", "vulhub"]).cuda()
# Load fusion layer weights
fusion_model.fusion.load_state_dict(
torch.load("./fusion_layer.pt", map_location="cuda")
)
fusion_model.eval()
prompt = "Analyze CVE-2017-15715 and outline exploitation steps."
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
with torch.no_grad():
logits, weights = fusion_model(**inputs)
# Decode output
output_ids = torch.argmax(logits, dim=-1)
output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
# Xem fusion weights (độ quan trọng của từng adapter)
print("Fusion Weights:")
print(f"CVE : {weights.mean(dim=1)[0][0].item():.4f}")
print(f"CAPEC : {weights.mean(dim=1)[0][1].item():.4f}")
print(f"TOOLS : {weights.mean(dim=1)[0][2].item():.4f}")
print(f"VULHUB: {weights.mean(dim=1)[0][3].item():.4f}")
python run_fusion.py
pentestfusion/
├── adapters/
│ ├── llama3_cve_adapter/ # CVE analysis adapter
│ ├── llama3_capec_adapter/ # CAPEC patterns adapter
│ ├── llama3_tool_adapter/ # Pentest tools adapter
│ └── llama3_vulhub_writeup_adapter/ # VulHub writeups adapter
├── fusion_layer.pt # Trained fusion layer weights
├── run_fusion.py # Main script
├── requirements.txt # Dependencies
└── README.md # Documentation
Fusion layer sử dụng multi-head attention để kết hợp outputs:
h) được dùng làm queryz₁...z₄) được dùng làm keys và values| Adapter | Domain | Base Model | Rank | Alpha |
|---|---|---|---|---|
| CVE | CVE Analysis | Llama-3.1-8B | 32 | 64 |
| CAPEC | Attack Patterns | Llama-3.1-8B | 32 | 64 |
| Tools | Pentest Tools | Llama-3.1-8B | 32 | 64 |
| VulHub | Writeups | Llama-3.1-8B | 32 | 64 |
Contributions are welcome! Please feel free to submit a Pull Request.
[Specify your license here]
fusion_layer.pt có kích thước lớn (~192MB). Cân nhắc sử dụng Git LFS hoặc GitHub Releases.