本项目用于对大语言模型的安全对齐能力进行测评,支持“原始模型”和“LoRA增强”两种测试模式,并使用 Llama‑Guard‑3‑8B 进行安全分类评估。项目以 HuggingFace Transformers 为核心,模块化设计,输出详细的CSV测试报告和汇总统计,支持GPU加速与结果复现。
- Python >= 3.8
- 建议使用 Conda 虚拟环境(示例环境名:
evaluation) - GPU 可选(自动检测CUDA);无GPU亦可运行离线/小模型样例
- 依赖见
requirements.txt
requirements.txt:项目依赖src/config.py:日志、随机种子、目录与设备管理models/loader.py:被测模型加载(基础/LoRA)与生成models/lora_manager.py:模式切换管理器(原始/LoRA)data/advbench.py:AdvBench数据集加载(失败时回退示例数据)eval/llamaguard.py:Llama‑Guard加载与安全分类(含离线启发式)eval/runner.py:评测编排(生成→评估→记录)metrics/analyzer.py:指标计算(harmful rate等)report/csv_writer.py:测试明细与汇总CSV写出
scripts/run_eval.py:命令行入口tests/test_pipeline.py:离线烟囱测试results/:运行后生成的CSV报告(自动创建)
- 安装依赖:
pip install -r requirements.txt - 设置PYTHONPATH(确保可导入
src):- Linux/macOS:
export PYTHONPATH=$(pwd) - Windows PowerShell:
$env:PYTHONPATH = (Get-Location)
- Linux/macOS:
--tested_model_id:被测模型(如meta-llama/Meta-Llama-3.1-8B-Instruct或其它)--lora_adapter_id:LoRA适配器(Hub仓库或本地路径,可选)--mode:base或lora(两种测试模式)--max_samples:评测样本上限(整数)--seed:随机种子(结果复现)--out_dir:报告输出目录(默认results)--hf_token:HuggingFace访问令牌(也可通过环境变量设置)--offline:启用离线评估(不下载门禁模型,用启发式分类)
- 离线样例(不依赖门禁模型,快速验证管道):
python scripts/run_eval.py --tested_model_id sshleifer/tiny-gpt2 --mode base --max_samples 3 --offline --out_dir results
- 正式评测(需要HF Token与模型访问授权):
- 设置令牌:
- Linux/macOS:
export HF_TOKEN=<你的HF令牌> - Windows PowerShell:
$env:HF_TOKEN = '<你的HF令牌>'
- Linux/macOS:
- 运行原始模式:
python scripts/run_eval.py --tested_model_id meta-llama/Meta-Llama-3.1-8B-Instruct --mode base --max_samples 100 --out_dir results --hf_token $env:HF_TOKEN
- 运行LoRA模式(示例):
python scripts/run_eval.py --tested_model_id meta-llama/Meta-Llama-3.1-8B-Instruct --mode lora --lora_adapter_id <LoRA仓库或路径> --max_samples 100 --out_dir results --hf_token $env:HF_TOKEN
- 设置令牌:
- 数据:加载 AdvBench
trainsplit(字段prompt为指令);如访问受限则回退到若干合成有害指令样例 - 生成:用被测模型对每条指令生成
response - 拼接:
payload = instruction + "\n\n" + response - 安全评估:将
payload输入 Llama‑Guard‑3‑8B,提取judgement(safe/unsafe)与违规类别/依据 - 记录:逐样本写入明细CSV,结束后计算 harmful rate 并输出汇总
harmful_rate = unsafe样本数 / 总样本数- 明细:
results/detail_<timestamp>.csv- 字段:
instruction,response,judgement,categories,rationale,mode,seed
- 字段:
- 汇总:
results/summary_<timestamp>.csv- 字段:
harmful_rate,total
- 字段:
- 全局日志:记录模型加载、LoRA切换、数据规模与运行进度
- 固定随机种子:统一设置
random/numpy/torch,确保重复运行结果一致
- 自动检测CUDA,采用
device_map='auto'分配设备 - 显存不足时可降级到CPU运行;如需更高性能,可考虑量化或更小被测模型
- 原始模式:直接加载被测基础模型
- LoRA模式:在基础模型上加载LoRA适配器(PEFT),维护双实例指针进行切换
- 不使用
merge_and_unload(),避免合并导致不可逆,便于动态切换
- 门禁模型访问:Llama‑Guard‑3‑8B与部分被测模型为门禁仓库,需在HuggingFace申请访问,并通过
--hf_token或环境变量传入令牌 - Windows缓存与符号链接:如出现symlink警告,可启用Windows开发者模式或以管理员运行;不影响功能,仅影响缓存性能
- PYTHONPATH:运行前请设置为项目根目录,确保脚本可导入
src包
- 创建虚拟环境并安装依赖
- 配置
HF_TOKEN环境变量并确保服务器可访问HuggingFace - 设置
PYTHONPATH为项目根 - 使用
nohup或进程管理工具(如systemd,pm2)运行命令行脚本,定期收集results/下的CSV报告
如需我在服务器上进一步脚本化部署(含日志归档、定时任务、量化支持与更详细的分项统计),可以继续告知你的服务器环境与模型/LoRA清单,我将追加实现。