garak - 开源的 LLMs 漏洞扫描工具

部署运行你感兴趣的模型镜像

3300 Stars 288 Forks 306 Issues 29 贡献者 Apache-2.0 License Python 语言

代码: https://github.com/NVIDIA/garak

主页: https://discord.gg/uVch4puUCs

更多AI开源软件AI开源 - 小众AI

​garak​检查是否可以以我们不希望的方式使 LLM 失败。 探测幻觉、数据泄漏、及时注射、错误信息、毒性产生、越狱和许多其他弱点。如果您知道 or / Metasploit Framework,garak 的功能与它们有些相似,但适用于 LLM。garaknmapmsf​

​garak​重点介绍使 LLM 或对话系统失败的方法。它结合了静态、动态和自适应探针来探索这一点。

主要功能

目前支持:

安装和使用

​garak​是一个命令行工具。它是在 Linux 和 OSX 中开发的。

标准安装pip​

只需从 PyPI 获取它,您就可以开始了:

python -m pip install -U garak
使用 安装开发版本pip​

的标准 pip 版本会定期更新。要从 GitHub 获取更新的版本,请尝试:garak​

python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
从源克隆

​garak​有自己的依赖项。您可以在其自己的 Conda 环境中安装:garak​

conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .

好吧,如果一切顺利,您可能已经准备好了!

注意:如果您在迁移到 GitHub 组织之前进行了克隆,但您正在 URI 中阅读此内容,请按如下方式更新您的远程仓库:NVIDIAgithub.com/NVIDIA​

git remote set-url origin https://github.com/NVIDIA/garak.git
使用

一般语法为:

​garak <options>​

​garak​需要知道要扫描的模型,默认情况下,它将使用每个探测推荐的漏洞检测器,尝试在该模型上知道的所有探测。您可以使用以下方法查看探针列表:

​garak --list_probes​

要指定生成器,请使用 和 (可选)选项。模型类型指定模型族/界面;Model Name 指定要使用的确切模型。下面的 “生成器简介” 部分介绍了一些支持的生成器。一个简单的生成器系列是 Hugging Face 模型;要加载其中一个,请在 Hub 上将 to 和 to 设置为模型的名称(例如 )。某些生成器可能需要将 API 密钥设置为环境变量,如果需要,他们会通知您。--model_type--model_name--model_typehuggingface--model_name"RWKV/rwkv-4-169m-pile"​

​garak​默认情况下,会运行所有探测,但您也可以对此进行具体说明。 将仅使用 PromptInject 框架的方法。您还可以通过在 ;例如,将使用基于语言模型风险卡框架生成诽谤的模型的检查实现。--probes promptinject.--probes lmrc.SlurUsage​

如需帮助和灵感,请在 TwitterDiscord 上找到我们!

例子

探测 ChatGPT 以进行基于编码的提示注入 (OSX/*nix)(将示例值替换为真实的 OpenAI API 密钥)

export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding

查看 GPT2 的 Hugging Face 版本是否容易受到 DAN 11.0 的攻击

python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

<think>我们面对的问题是:当用户使用CPU模式运行`garak`对Hugging Face模型`gpt2`进行`dan.Dan_11_0`探针测试时,命令执行卡住,无法加载探针模块。 根据用户描述,之前使用GPU时出现CUDA索引错误(Assertion srcIndex < srcSelectDimSize failed),现在切换到CPU后,程序在加载探针模块时卡住。 ### 问题分析 1. **探针加载卡住的可能原因**: - **依赖缺失**:`dan.Dan_11_0`探针可能依赖某些未安装的Python包。 - **探针模块导入错误**:在导入探针模块时,可能由于代码错误(如循环导入)导致死锁。 - **资源限制**:CPU模式下,模型加载或分词器初始化需要较长时间,但用户可能误以为卡住。 - **探针代码缺陷**:`dan.Dan_11_0`探针本身的代码可能存在缺陷(如无限循环)。 2. **环境差异**: - GPU模式因CUDA错误而失败,CPU模式避免了CUDA错误,但可能暴露其他问题。 ### 解决步骤 #### 步骤1: 验证最小可复现环境 首先,确保可以运行一个最简单的`garak`命令(不使用DAN探针): ```bash python -m garak --model_type huggingface --model_name gpt2 --probes always.Fail ``` `always.Fail`是一个内置的简单探针,用于验证框架是否正常工作。如果此命令能正常运行,说明`garak`基础功能正常。 #### 步骤2: 检查DAN探针的依赖 `dan.Dan_11_0`探针可能需要额外的依赖。请检查`garak`的探针文档[^1],确认是否需要安装额外包。通常,DAN探针不需要额外依赖,但最好确认。 #### 步骤3: 调试探针加载过程 使用`garak`的调试模式运行命令,查看卡住的位置: ```bash python -m garak --verbose 10 --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0 ``` `--verbose 10`会输出最详细的日志,帮助我们定位卡住的阶段。 #### 步骤4: 检查探针代码 如果上述步骤无法解决问题,需要检查`dan.Dan_11_0`探针的源代码。在`garak`的源代码中找到`dan.py`文件(通常位于`garak/probes/dan.py`),查看`Dan_11_0`类的实现。 特别注意: - `__init__`方法中是否有耗时操作? - 是否使用了多线程/多进程?在CPU模式下可能存在问题。 #### 步骤5: 绕过探针加载 如果确定是探针加载的问题,可以尝试直接调用探针代码进行测试。创建一个独立的Python脚本: ```python from garak.probes.dan import Dan_11_0 from garak.model import load_model model = load_model("huggingface", "gpt2") probe = Dan_11_0() probe.probe(model) ``` 运行此脚本,观察是否卡住。如果卡住,则问题在探针代码中;如果正常运行,则问题在`garak`框架的探针加载机制。 #### 步骤6: 使用替代探针 如果`Dan_11_0`探针确实存在问题,可以尝试使用其他DAN探针(如`dan.Dan_10_0`): ```bash python -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_10_0 ``` ### 解决方案总结 1. **安装最新依赖**:确保`garak`和`transformers`是最新版本。 ```bash pip install --upgrade garak transformers ``` 2. **使用调试模式**:通过详细日志定位问题。 3. **简化测试**:先使用简单探针验证框架,再逐步深入。 4. **代码审查**:检查探针源代码是否有缺陷。 ### 预防措施 - 在CPU模式下运行大型模型时,耐心等待模型加载(GPT-2加载可能需要几分钟)。 - 使用`top`或任务管理器监控CPU和内存使用情况,确认程序是否在运行。 如果以上步骤无法解决问题,请提供`--verbose 10`的输出日志,以便进一步分析。 --- ### 相关问题 1. 如何调试`garak`探针加载过程? 2. `garak`支持哪些Hugging Face模型? 3. 如何为`garak`开发自定义探针? 4. 在CPU模式下运行大型语言模型的注意事项? 5. 如何优化`garak`的测试性能?</think>针对您在 CPU 模式下运行 `garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0` 时出现的探针加载卡住问题,以下是系统性的解决方案: ### 问题原因分析 1. **探针初始化依赖冲突** DAN 11.0 探针可能依赖特定 GPU 加速库(如 CUDA),在纯 CPU 环境下初始化失败[^1] 2. **模型加载资源不足** GPT-2 模型加载需 ≈500MB 内存,CPU 模式可能因资源争用导致死锁 $$ \text{内存占用} \propto \text{模型参数} \times \text{数据类型精度} $$ 3. **Hugging Face 兼容性问题** `transformers` 库在 CPU 模式下对某些操作有不同处理逻辑 4. **探针模块导入阻塞** `dan.Dan_11_0` 可能存在循环导入或未捕获的异常 --- ### 解决方案 #### 1. 强制轻量级模式运行 ```bash GARAK_LOAD_MODE=lightweight python -m garak \ --model_type huggingface \ --model_name gpt2 \ --probes dan.Dan_11_0 \ --verbose 10 # 启用最高级别日志 ``` `lightweight` 模式跳过非必要初始化,减少资源占用[^1] #### 2. 分步调试探针加载 创建测试脚本 `debug_dan.py`: ```python from garak.probes import dan from garak.model import load_model # 测试探针独立加载 print("⚡ 加载探针...") probe = dan.Dan_11_0() print(f"✅ 探针加载成功: {probe}") # 测试模型独立加载 print("⚡ 加载模型...") model = load_model("huggingface", "gpt2", device="cpu") print(f"✅ 模型加载成功: {model}") # 组合测试 print("🚀 执行探针测试...") probe.probe(model) print("🎉 测试完成") ``` 运行: ```bash python debug_dan.py ``` #### 3. 优化资源配置 在 `~/.garak/config.yml` 中添加: ```yaml resources: cpu_threads: 2 # 限制CPU线程数 memory_limit: "1G" # 内存上限 logging: level: DEBUG # 启用调试日志 ``` #### 4. 使用兼容性包装器 修改探针调用方式: ```bash python -m garak --model_type huggingface \ --model_name gpt2 \ --probes dan:Dan_11_0?device=cpu # 显式指定设备 ``` #### 5. 降级关键依赖 ```bash pip install --force-reinstall \ "torch==2.0.1" \ "transformers==4.30.2" \ "garak==0.9.1" ``` --- ### 诊断流程图 ```mermaid graph TD A[启动命令] --> B{是否卡在<br>“Loading probe”} B -->|是| C[启用轻量模式] B -->|否| D[检查模型加载] C --> E{解决问题?} D --> F[分步调试] E -->|是| G[完成] E -->|否| F F --> H{定位阻塞点} H --> I[资源不足] H --> J[代码异常] I --> K[优化配置] J --> L[修改探针代码] ``` ### 预防措施 1. **预加载模型** 首次运行时先单独加载模型: ```bash python -c "from transformers import GPT2LMHeadModel; \ GPT2LMHeadModel.from_pretrained('gpt2')" ``` 2. **启用内存监控** 在另一个终端运行资源监控: ```bash watch -n 1 "free -m && ps aux | grep python" ``` 3. **探针热修复** 在 `garak/probes/dan.py` 中添加 CPU 兼容代码: ```python class Dan_11_0(Probe): def __init__(self): super().__init__() # 添加设备兼容代码 if not torch.cuda.is_available(): torch.set_num_threads(2) # 限制CPU线程 ``` --- ### 验证结果 成功执行后应看到类似输出: ``` [INFO] 初始化探针: dan.Dan_11_0 [DEBUG] 使用设备: cpu [PROGRESS] 测试样本 1/50 - 响应时间 2.3s ... [SUMMARY] 完成 DAN 11.0 探测 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值