随着大语言模型(LLM)的快速发展,并日益深度集成到任务关键型企业工作流中,模型准确推理和响应特定领域和高度专业化知识的能力变得至关重要。这点在网络安全领域体现得尤为突出,因为网络安全领域风险较高,准确性不仅是核心要求,更是被视为默认前提。因此,根据特定于网络安全领域的真实、高质量基准来评估 LLM 性能,不仅具有实用价值,更是一项必要措施。
这篇博文介绍了我们如何利用专门用于评估网络安全知识的基准——CyberMetric 数据集,对一些 IBM Granite 和 InstructLab 模型进行评估。评估过程是在红帽企业 Linux(RHEL)AI 1.3 虚拟机(VM)上完成的,该虚拟机包含 InstructLab 和单个 NVIDIA L4 GPU。
我们对以下模型进行了基准测试:
IBM Granite
- granite-3.3-8b-instruct
- granite-3.3-2b-instruct
- granite-3.0-8b-instruct
- granite-3.0-2b-instruct
InstructLab
- merlinite-7b-pt
- granite-3.0-8b-lab-community
使用的 CyberMetric 评估集
- CyberMetric-80-v1.json
- CyberMetric-500-v1.json
- CyberMetric-2000-v1.json
- CyberMetric-10000-v1.json
什么是 CyberMetric 数据集?
CyberMetric 数据集是网络安全领域相对较新的基准测试工具。它包含超过 10,000 个经过人工验证的多选题,是评估 LLM 在网络安全领域表现的综合性资源。
该数据集源自广泛的权威资料,包括开放标准、NIST 指南、研究论文、公开发行的图书、RFC 和其他相关出版物。它是利用检索增强生成(RAG)技术生成的,该技术将基于检索的模型的优势与生成式功能相结合。
此外,CyberMetric 数据集还经历了严格的多阶段优化过程。LLM 和人类专家在此过程种积极参与,助力提供准确反映真实世界网络安全知识的高质量数据。
该数据集专门用于评估 LLM 在以下九个网络安全领域的理解与记忆能力:
- 灾难恢复和业务连续性计划(BCP)
- 身份和访问权限管理(IAM)
- 物联网安全防护
- 密码学
- 无线安全防护
- 网络安全防护
- 云安全防护
- 渗透测试
- 合规性/审计
该数据集具有四种不同的规模,便于用户选择,具体包括:80 个问题、500 个问题、2,000 个问题和 10,000 个问题。
什么是 InstructLab?
InstructLab 是一个由红帽和 IBM 联合打造的开源平台,旨在简化针对特定领域定制和调整 LLM 的过程。该平台基于 LAB 方法(聊天机器人大规模对齐),能够以尽可能少的人力投入或计算资源高效增强模型。
InstructLab 通过以下方法来实现该目标:基于分类学的知识注入、自动生成合成数据,以及使用巧妙的方法针对特定行为和任务微调模型。增强型模型可以使用 ilab CLI 以及 vLLM 或 llama.cpp 等后端在本地提供。
与传统的微调工作流不同,InstructLab 的独特之处在于它支持上游贡献和社区驱动的持续改进。它与模型无关,可赋能开放权重模型定期版本更新,如 IBM Granite 模型和 Merlinite 模型(衍生自 Mistral)。
进行基准测试的模型类型:
- Granite 模型:这些是由 IBM 开发的基础 LLM。以“instruct”一词结尾的模型专门用于遵循指令并参与对话或推理任务
- InstructLab 模型:这些模型代表了社区驱动的微调。通常,它们基于 Granite 等基础模型,但已使用 InstructLab 工具和方法进行了进一步训练,旨在实现通用或与领域相匹配的性能
为什么选择这些特定的模型?
我们之所以选择这些模型,是为了提供一个相关的比较点,尤其是与官方 CyberMetric 排行榜进行比较。选择 merlinite-7b-pt、granite-3.0-8b-lab-community、granite-3.0-2b-instruct 和 granite-3.0-8b-instruct 模型,这是符合基准发布周期的决定。
我们的评估包括最新的 IBM Granite 3.3 模型(granite-3.3-8b-instruct 和 granite-3.3-2b-instruct)。这使我们能够清晰展示 Granite 模型的性能演变。
通过 InstructLab 实现模型部署
所有模型均在我们的 RHEL AI 虚拟机上使用 ilab 命令完成本地部署。该过程包括下载模型,以及部署模型:
ilab model download --repository ibm-granite/granite-3.3-8b-instruct --hf-token
下载完毕后,启动模型部署:
ilab model serve --model-path ~/.cache/instructlab/models/ibm-granite/granite-3.3-8b-instruct --gpus 1
缓解 GPU 内存限制
由于我们的设置环境有限,只有一个 L4 GPU,这就导致出现了一个问题。在通过 InstructLab(利用 vLLM 作为后端)部署模型期间,我们遇到了一个常见问题,即某些模型配置由于 max_position_embeddings 值过大而导致 GPU 内存耗尽。具体而言,有几个模型在其 config.json 中将此参数设置为“131072”,这显著增加了 vLLM 中键值(KV)缓存所需的内存,通常会导致出现内存不足(OOM)的错误。
解決方案:
为解决此问题,我们手动修改了 config.json 文件,以设置一个更低、更兼容硬件的值:
"max_position_embeddings": 4096
该值定义了模型在序列中可以处理的最大词元数,具体取决于模型的位置编码。通过将该值降低到 4096,KV 缓存内存占用量显著减少,但仍然足以满足 CyberMetric 数据集的要求,因为该数据集的多选题相对较短。此调整不会影响模型的准确性,因为我们的用例输入不会超过该词元长度。
通过进行这项更改,我们能够成功地部署模型,避免了不稳定或崩溃问题,使基准测试过程能够在单个 GPU 设置场景下顺利推进。
脚本适配和增强
我们对原始 CyberMetric 评估脚本进行了适配和进一步强化,该脚本最初主要用于与 OpenAI API 交互,以支持通过 InstructLab 对我们本地部署的模型进行基准测试。主要修改如下:
- 将 API 调用机制从 openai.ChatCompletion.create 更改为 requests.post 库,以便直接向 InstructLab 公开的本地 vLLM 服务器端点发送 HTTP 请求
- 删除 API 密钥身份验证,因为本地服务器不再需要它
我们仅对原始 Cybermetric 脚本的核心逻辑进行了细微更改,以保持基准测试方法的完整性和可重复性。在增强脚本的过程中,我们还引入了原始版本中不存在的关键参数配置:
- 由于 CyberMetric 脚本会评估来自多个提供商(OpenAI、Qwen、Mistral 等)的模型,缺乏固定的温度设置可能会导致运行之间存在差异,具体取决于每个模型的默认行为。我们通过修改,将温度明确设置为 0.0,这样所有测试模型的结果皆可重现且具有可比性
基准测试结果和分析
在评估过程中,我们以 CyberMetric 基准数据集为基础。我们并没有完全依赖于聚合排行榜,而是按照模型规模来整理结果,具体做法为:将模型划分为可比较的参数类(约 20 亿、70 亿和 80 亿)。借助这种方法,可以对相同容量范围内的模型进行评估,避免由于模型规模差异而导致结果出现偏差,从而实现了公平且有意义的比较。此外,我们还排除了所有未披露模型规模的专有模型,以保持比较的完整性。
约 20 亿参数级模型
此类别包括从 15 亿到 27 亿参数的 LLM。
观察结果:
- Granite-3.3-2b-instruct 模型在此类别中脱颖而出,平均准确率接近 79%。它不仅显著超越所有其他竞争对手,与其早期版本 Granite-3.0 相比,功能也得到了显著增强
- 从 Granite-3.0 升级至 Granite-3.3 版本,模型平均准确率提高了 1% 以上,这点在规模较小的数据集(包含 80 个问题的数据集和包含 2,000 个问题的数据集)上体现得尤为明显,表明模型在指令调整或领域对齐方面有所优化
- 虽然 Qwen2.5-1.5B-Instruct 显示出不错的性能,但它在处理较大规模数据集时准确率下降,表明该模型对网络安全主题的掌握能力较弱
- Qwen1.5-MoE 和 Phi-2 等非指令模型表现明显落后,表明指令调整在此类任务中的关键作用
- Gemma-2b 在所有数据集中均表现欠佳,这表明未经充分微调的模型难以胜任网络安全问答任务
70 亿参数级模型
此类别包括具有 70 亿参数的 LLM。
LLM 模型 | 指令是否经过微调 | 公司 | 规模 | 许可 | 80 个问题 | 500 个问题 | 2,000 个问题 | 10,000 个问题 |
Qwen2.5-7B-Instruct | ✔ | Qwen | 70 亿 | Apache 2.0 | 92.50% | 89.20% | 87.45% | 83.56% |
Falcon3-7B-Instruct | ✔ | TII | 70 亿 | Apache 2.0 | 91.25% | 85.60% | 84.25% | 80.72% |
Qwen2-7B-Instruct | ✔ | Qwen | 70 亿 | Apache 2.0 | 91.25% | 84.40% | 82.00% | 78.75% |
Merlinite-7b-pt | ✔ | Instructlab | 70 亿 | Apache 2.0 | 86.25% | 81.20% | 81.95% | 79.63% |
Mistral-7B-Instruct-v0.2 | ✔ | Mistral AI | 70 亿 | Apache 2.0 | 78.75% | 78.40% | 76.40% | 74.82% |
Zephyr-7B-beta | ✔ | HuggingFace | 70 亿 | MIT | 80.94% | 76.40% | 72.50% | 65.00% |
Gemma-1.1-7B-it | ✔ | 70 亿 | 开放 | 82.50% | 75.40% | 75.75% | 73.32% | |
Qwen1.5-7B | ✘ | Qwen | 70 亿 | 开放 | 73.75% | 70.10% | 69.96% | 65.17% |
Qwen-7B | ✘ | Qwen | 70 亿 | 开放 | 68.42% | 64.08% | 63.84% | 54.09% |
DeciLM-7B | ✘ | Deci | 70 亿 | Apache 2.0 | 56.55% | 56.20% | 53.85% | 51.32% |
Gemma-7b | ✘ | 70 亿 | 开放 | 42.50% | 37.20% | 36.00% | 34.28% |
观察结果:
- Merlinite-7b-pt 表现突出,成为继顶级领先模型之后性能最优的社区对齐模型,平均准确率超过 82%
- 虽然 Qwen2.5-7B-Instruct 等领先模型在整体准确率方面表现出色,但在应用于规模较大的数据集时,与 Merlinite-7b-pt 的差距明显缩小,Merlinite 甚至在包含 10,000 个问题的数据集上实现了反超
- DeciLM-7B 和 Gemma-7B 等非指令模型的性能急剧下降,如果不进行广泛调优,将无法应用于网络安全领域
80 亿参数级模型
观察结果:
- Granite-3.0-8b-instruct 在 80 亿类别中名列前茅,此模型在所有 CyberMetric 数据集上的平均准确率高达 83.61%,令人印象深刻。该模型性能稳定可靠,从包含 80 个问题的数据集到包含 10,000 个问题的数据集,模型准确率仅下降不到 3%,这对于长上下文网络安全场景中的推理任务至关重要
- 与 Granite-3.3-8b-instruct 相比,尽管 3.0 版本较新,但平均性能略胜一筹。虽然 3.3 版本在包含 2,000 个问题的数据集上展现出边际优势,但在包含 10,000 个问题的数据集上准确率有所下降(80.22%)
- Meta-Llama-3-8B-Instruct 相对于这两个 Granite 模型而言表现不佳,尤其是在大规模数据集中。从包含 80 个问题的数据集到包含 10,000 个问题的数据集,该模型的准确率下降了 10 个百分点以上,这表明尽管对指令进行了调整,域适配能力依然较弱
- Llama3-ChatQA-1.5-8B 和 Meta-Llama-3-8B 等基础模型的整体效果不佳,准确率分别徘徊在 50% 和 37% 左右。这表明指令调整对于 CyberMetric 类型的基准测试来说至关重要
- 总体而言,Granite-3.0/3.3-instruct 为网络安全任务提供了最可靠的 80 亿级模型,无需依赖专有 API 即可提供较高的准确性,非常适合自托管部署
访问评估脚本和详细结果
为了支持可重复性和进一步分析,我们发布了一个 GitHub 存储库,其中包含:
- 修改后的 CyberMetric 评估脚本,适用于通过 InstructLab 进行本地部署
- 所有测试模型的原始基准测试输出
- 各个模型和数据集规模对应的错误回答问题明细
借助这些资源,读者可以查看特定于模型的故障案例,更好地了解不同模型在网络安全推理方面的性能差异。
总结
根据测试结果,我们发现以下结论:
Granite-3.3-2b-instruct 在约 20 亿类别明显处于领先地位,为网络安全领域的紧凑型指令优化模型设定了基准。该模型能够在不同规模的数据集上保持较高性能,同时使用的参数比许多竞争对手要少,从而成为资源有限环境下的理想之选。
Merlinite-7b-pt 经证明是最均衡、领域适应性最强的 70 亿级模型之一。虽然该模型得分并非最高,但它为需要强大网络安全性能且不依赖专有技术的社区驱动型项目提供了卓越的价值。
Granite-3.0 和 3.3 为网络安全推理领域的 80 亿参数级开源模型设定了基准。这些模型罕见地集较高准确率、跨规模稳定性和开放许可优势于一身,是实现经济高效部署的理想之选。与竞争对手相比,Granite-8B 模型提供近乎一流的性能。