Skip to content

drw41823/llm-safety-eval

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM安全对齐性能测评项目

本项目用于对大语言模型的安全对齐能力进行测评,支持“原始模型”和“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)

关键参数

  • --tested_model_id:被测模型(如 meta-llama/Meta-Llama-3.1-8B-Instruct 或其它)
  • --lora_adapter_id:LoRA适配器(Hub仓库或本地路径,可选)
  • --modebaselora(两种测试模式)
  • --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令牌>'
    • 运行原始模式:
      • 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 train split(字段 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,确保重复运行结果一致

GPU加速与兼容

  • 自动检测CUDA,采用 device_map='auto' 分配设备
  • 显存不足时可降级到CPU运行;如需更高性能,可考虑量化或更小被测模型

LoRA模式说明

  • 原始模式:直接加载被测基础模型
  • 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清单,我将追加实现。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages