Bayesian-LoRA: LoRA based Parameter Efficient Fine-Tuning using Optimal Quantization levels and Rank Values trough Differentiable Bayesian Gates
Paper
• 2406.13046 • Published
YAML Metadata Warning: empty or missing yaml metadata in repo card
Check out the documentation for more information.
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.