NeMo Guardrails 集成 AIPerf:基于 YAML 配置与参数扫描的 LLM 服务性能基准测试实战

发布时间:2026/9/29 6:36:36
NeMo Guardrails 集成 AIPerf:基于 YAML 配置与参数扫描的 LLM 服务性能基准测试实战 人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载导读本文围绕 NeMo Guardrails 仓库中 benchmark/aiperf/README.md 所介绍的 AIPerf 基准测试工具链展开讲解如何通过run_aiperf.py脚本以声明式 YAML 配置驱动 NVIDIA AIPerf对任意 OpenAI 兼容推理服务执行批量基准测试与参数扫描Sweep并自动整理输出结果。读完本文你将掌握环境搭建与 API Key 配置、单次基准测试与并发度扫描的完整命令、全部配置参数的含义与默认值、常用扫描模式的实战写法以及输出目录结构与可复现元数据的解读方式——从而以数据驱动的方式量化 NeMo Guardrails 应用在吞吐、延迟上的安全与性能取舍。背景为什么需要 AIPerf 基准测试工具链AIPerf 是 NVIDIA 面向 LLM 的基准测试工具支持任意 OpenAI 兼容的推理服务能够生成合成数据负载并输出性能对比与分析的完整指标。不过直接使用 AIPerf 手动执行多轮不同参数的基准测试非常繁琐。仓库中的 run_aiperf.py 脚本在 AIPerf 之上封装了一层编排能力提供批量执行Batch Execution一条命令按顺序跑完多个基准测试参数扫描Parameter Sweeps自动生成并运行不同参数组合如扫描并发度、Token 数量等的基准测试结果整理Organized Results将结果自动归档到带时间戳、命名清晰的目录中YAML 配置用简单、声明式的配置文件实现可复现的基准测试运行元数据Run Metadata为每次运行保存完整元数据配置、命令、时间戳便于日后分析与复现服务健康检查Service Health Checks基准测试开始前先校验目标服务可用。脚本入口定义在main.py通过python -m benchmark.aiperf即可调用命令行界面由 Typer 构建。快速开始环境准备以下步骤已在 Python 3.11.11 上验证通过。仓库自带的示例配置使用 NVIDIA 托管的模型因此需要在 https://build.nvidia.com/ 注册账号并创建 Personal API Key用于访问 NVIDIA 托管的模型在 https://huggingface.co/ 注册账号用于拉取 Meta Llama 3.3 70B Instruct tokenizerAIPerf 需要用它计算 Token 数量。1. 创建虚拟环境mkdir ~/env python -m venv ~/env/aiperf source ~/env/aiperf/bin/activate2. 安装依赖pip install aiperf huggingface_hub typer httpx3. 登录 Hugging Facehuggingface-cli login4. 设置 NVIDIA API Keyexport NVIDIA_API_KEYyour-api-key-here要点脚本本身不直接读取 API Key 的明文值而是通过配置中的api_key_env_var字段指定环境变量名再在构建 AIPerf 命令时读取该环境变量并注入--api-key参数详见 run_aiperf.py。如果环境变量未设置脚本会抛出RuntimeError并提示export 变量名your-api-key这一行为也有对应的测试覆盖见 test_run_aiperf.py 中test_build_command_with_missing_api_key_env_var。运行基准测试每个基准测试都通过 aiperf_models.py 中定义的AIPerfConfigPydantic 模型进行配置配置存于 YAML 文件加载后转换为AIPerfConfig对象并校验。仓库内置两个可直接扩展的示例配置均使用 NVIDIA 托管模型configs/single_concurrency.yaml单次运行、固定单个并发度的示例configs/sweep_concurrency.yaml多次运行、扫描并发度的示例。通用启动命令python -m benchmark.aiperf --config-file path-to-config.yaml运行单次基准测试python -m benchmark.aiperf --config-file benchmark/aiperf/configs/single_concurrency.yaml示例输出2025-12-01 10:35:17 INFO: Running AIPerf with configuration: benchmark/aiperf/configs/single_concurrency.yaml 2025-12-01 10:35:17 INFO: Results root directory: aiperf_results/single_concurrency/20251201_103517 2025-12-01 10:35:17 INFO: Sweeping parameters: None 2025-12-01 10:35:17 INFO: Running AIPerf with configuration: benchmark/aiperf/configs/single_concurrency.yaml 2025-12-01 10:35:17 INFO: Output directory: aiperf_results/single_concurrency/20251201_103517 2025-12-01 10:35:17 INFO: Single Run 2025-12-01 10:36:54 INFO: Run completed successfully 2025-12-01 10:36:54 INFO: SUMMARY 2025-12-01 10:36:54 INFO: Total runs : 1 2025-12-01 10:36:54 INFO: Completed : 1 2025-12-01 10:36:54 INFO: Failed : 0运行并发度扫描python -m benchmark.aiperf --config-file benchmark/aiperf/configs/sweep_concurrency.yaml示例输出2025-11-14 14:02:54 INFO: Running AIPerf with configuration: benchmark/aiperf/configs/sweep_concurrency.yaml 2025-11-14 14:02:54 INFO: Results root directory: aiperf_results/sweep_concurrency/20251114_140254 2025-11-14 14:02:54 INFO: Sweeping parameters: {concurrency: [1, 2, 4]} 2025-11-14 14:02:54 INFO: Running 3 benchmarks 2025-11-14 14:02:54 INFO: Run 1/3 2025-11-14 14:02:54 INFO: Sweep parameters: {concurrency: 1} 2025-11-14 14:04:12 INFO: Run 1 completed successfully 2025-11-14 14:04:12 INFO: Run 2/3 2025-11-14 14:04:12 INFO: Sweep parameters: {concurrency: 2} 2025-11-14 14:05:25 INFO: Run 2 completed successfully 2025-11-14 14:05:25 INFO: Run 3/3 2025-11-14 14:05:25 INFO: Sweep parameters: {concurrency: 4} 2025-11-14 14:06:38 INFO: Run 3 completed successfully 2025-11-14 14:06:38 INFO: SUMMARY 2025-11-14 14:06:38 INFO: Total runs : 3 2025-11-14 14:06:38 INFO: Completed : 3 2025-11-14 14:06:38 INFO: Failed : 0与 Guardrails 服务联动的完整链路在 benchmark/README.md 中给出了与本文主题直接衔接的端到端用法先用 Honcho 按 benchmark/Procfile 拉起 Guardrails OpenAI 兼容服务端口 9000与两个 Mock LLM应用主模型在 8000 端口、内容安全模型在 8001 端口再用python -m benchmark.aiperf --config-file benchmark/aiperf/configs/sweep_concurrency_benchmark.yaml发起从并发度 1 到 2562 的幂次共 9 轮扫描。请求链路为AIPerf → Guardrails 服务 → Mock LLM应用 内容安全从而在无需 GPU、几分钟内即可量化加入 guardrails 所带来的安全收益与延迟代价之间的权衡。附加选项--dry-run预览而不执行--dry-run允许只预览所有将执行的基准命令而不真正运行适用于校验配置文件是否正确检查会生成哪些参数组合在投入长时扫描前预估总执行时长调试配置问题。python -m benchmark.aiperf --config-file benchmark/aiperf/configs/sweep_concurrency.yaml --dry-rundry-run 模式下脚本会依次执行加载并校验配置 → 检查服务连通性 → 生成全部扫描组合 → 显示将要执行的命令 → 不运行任何基准测试即退出。从源码看dry-run 在 run_aiperf.py 与 run_aiperf.py 中会直接返回AIPerfSummary(total0, completed0, failed0)。--verbose详细调试输出python -m benchmark.aiperf --config-file config.yaml --verboseVerbose 模式提供传给 AIPerf 的完整命令行参数详细的参数合并逻辑base config sweep params输出目录创建细节AIPerf 的实时输出默认被捕获到文件错误的完整堆栈信息。提示调试配置问题或想实时观察基准执行进度时使用 verbose 模式。从源码看--verbose会把日志级别提升到 DEBUGrun_aiperf.py这会产生两个连锁效果一是构建命令时把ui_type设为simple而非nonerun_aiperf.py二是subprocess.run不再捕获输出而是透传到终端run_aiperf.py。此外日志中打印的命令会经过 API Key 脱敏处理——只保留密钥最后 6 个字符其余以*遮蔽见 run_aiperf.py避免密钥泄露到日志与元数据文件中。配置文件详解配置文件是位于 configs 目录下的 YAML 文件使用 Pydantic 模型提前校验尽早发现配置错误。配置加载失败文件不存在、YAML 语法错误、校验失败时脚本会记录错误并以退出码 1 终止见 run_aiperf.py。顶层配置字段字段类型是否必填说明batch_namestring否这批基准测试的名称用于输出目录命名如aiperf_results/batch_name/timestamp/。默认值benchmarkoutput_base_dirstring否所有基准结果存放的根目录。默认值aiperf_resultsbase_configobject是应用于所有基准运行的基础配置参数见下文sweepsobject否可选的参数扫描用于以不同取值运行多个基准测试base_config 基础配置参数base_config中的参数会被原样传给 AIPerf其中任意一项都可以被扫描参数覆盖。模型与服务配置参数类型是否必填说明modelstring是模型标识如meta/llama-3.3-70b-instructtokenizerstring否Hugging Face 上的 tokenizer 名称或本地路径。未提供时 AIPerf 会尝试使用模型名urlstring是推理服务的 Base URL如https://integrate.api.nvidia.comendpointstring否API 端点路径默认/v1/chat/completionsendpoint_typestring否端点类型chat或completions默认chatapi_key_env_varstring否存放 API Key 的环境变量名如NVIDIA_API_KEYstreamingboolean否是否使用流式模式默认false负载生成设置参数类型是否必填说明warmup_request_countinteger是基准测试开始前发送的预热请求数量benchmark_durationinteger是基准测试时长秒concurrencyinteger是基准期间维持的并发请求数request_ratefloat否目标请求速率请求/秒。未提供时由并发度推算request_rate_modestring否分布模式constant或poisson默认constant合成数据生成以下参数控制基准测试用合成提示词的生成参数类型是否必填说明random_seedinteger否用于可复现合成数据生成的随机种子prompt_input_tokens_meaninteger否每条提示词输入 Token 数的均值prompt_input_tokens_stddevinteger否输入 Token 数的标准差prompt_output_tokens_meaninteger否期望输出 Token 数的均值prompt_output_tokens_stddevinteger否输出 Token 数的标准差源码佐证上述字段的类型、必填性与默认值均定义于 aiperf_models.py 的BaseConfig。其中endpoint_type与request_rate_mode使用Literal类型约束取值非法值会在配置加载阶段直接报错对应测试见 test_aiperf_models.py 中test_base_config_invalid_endpoint_type与test_base_config_invalid_request_rate_mode。参数扫描Parameter Sweepssweeps部分允许用不同参数值运行多个基准测试。脚本会生成所有扫描值的笛卡尔积Cartesian product为每个组合单独运行一次基准测试见 run_aiperf.py。基础扫描示例sweeps: concurrency: [1, 2, 4, 8, 16]这将运行 5 个基准测试每个并发度一个。多参数扫描示例sweeps: concurrency: [1, 4, 16] prompt_input_tokens_mean: [100, 500, 1000]这将运行9 个基准测试3 × 3 笛卡尔积每个concurrency与prompt_input_tokens_mean的组合一个。每个扫描组合会创建一个以参数值命名的子目录aiperf_results/ └── my_benchmark/ └── 20251114_140254/ ├── concurrency1_prompt_input_tokens_mean100/ ├── concurrency1_prompt_input_tokens_mean500/ ├── concurrency4_prompt_input_tokens_mean100/ └── ...源码细节子目录命名由_create_output_dir实现规则是keyvalue以_连接且参数按 key 排序以保证命名确定性见 run_aiperf.py。例如{concurrency: 10, benchmark_duration: 30}会生成目录benchmark_duration30_concurrency10对应测试见 test_run_aiperf.py 中TestCreateOutputDir。安全上限扫描组合总数受 100 次上限约束超过会抛出RuntimeError(Requested N runs, max is 100)run_aiperf.py防止误配置导致超长任务。校验约束扫描键必须是BaseConfig的合法字段aiperf_models.py扫描值必须是 int 或 str 且不能为空列表否则配置校验直接失败对应测试见 test_aiperf_models.py 的TestAIPerfConfig类。完整配置示例# Name for this batch of benchmarks batch_name: my_benchmark # Base directory where all benchmark results will be stored output_base_dir: aiperf_results # Base configuration applied to all benchmark runs base_config: # Model and service configuration model: meta/llama-3.3-70b-instruct tokenizer: meta-llama/Llama-3.3-70B-Instruct url: https://integrate.api.nvidia.com endpoint: /v1/chat/completions endpoint_type: chat api_key_env_var: NVIDIA_API_KEY streaming: true # Load generation settings warmup_request_count: 20 benchmark_duration: 60 concurrency: 1 request_rate_mode: constant # Synthetic data generation random_seed: 12345 prompt_input_tokens_mean: 100 prompt_input_tokens_stddev: 10 prompt_output_tokens_mean: 50 prompt_output_tokens_stddev: 5 # Optional: parameter sweeps (Cartesian product) sweeps: concurrency: [1, 2, 4, 8, 16] prompt_input_tokens_mean: [100, 500, 1000]注意当sweeps中声明了某个参数如concurrency时base_config中对应字段的值会被扫描值覆盖因此示例配置 configs/sweep_concurrency.yaml 中把concurrency设为0并注释由下方扫描覆盖。参数合并逻辑见 run_aiperf.pyparams base_params if not sweep_params else {**base_params, **sweep_params}。常用扫描模式并发度扩展测试sweeps: concurrency: [1, 2, 4, 8, 16, 32, 64]适用于寻找最优并发度与吞吐上限。Token 长度影响测试sweeps: prompt_input_tokens_mean: [50, 100, 500, 1000, 2000] prompt_output_tokens_mean: [50, 100, 500, 1000]适用于理解 Token 数量对延迟与吞吐的影响。请求速率对比sweeps: request_rate_mode: [constant, poisson] concurrency: [4, 8, 16]适用于对比不同负载模式。输出结构结果归档在带时间戳的目录中aiperf_results/ ├── batch_name/ │ └── timestamp/ │ ├── run_metadata.json # Single run │ ├── process_result.json │ └── aiperf_outputs │ # OR for sweeps: │ ├── concurrency1/ │ │ ├── run_metadata.json │ │ ├── process_result.json │ │ └── aiperf_outputs │ ├── concurrency2/ │ │ └── ... │ └── concurrency4/ │ └── ...目录层级由_get_batch_dir生成output_base_dir/batch_name/YYYYMMDD_HHMMSS时间戳格式长度固定为 15 位见 run_aiperf.py对应测试见 test_run_aiperf.py 中TestGetBatchDir。输出文件说明每个运行目录包含多类结果与元数据文件基准运行器生成的文件run_metadata.json包含本次基准运行的完整元数据用于复现。字段包括run_index、timestamp、config_file、sweep_params、base_config完整快照以及脱敏后的command见 run_aiperf.pyprocess_result.json包含子进程执行结果returncode、stdout、stderr 等CompletedProcess属性见 run_aiperf.py。AIPerf 生成的文件inputs.json为基准测试生成的合成提示词数据profile_export_aiperf.json主指标文件JSON 格式含聚合统计profile_export_aiperf.csv与 JSON 相同的指标CSV 格式便于导入电子表格或数据分析库profile_export.jsonlJSON Lines 格式含逐请求指标每行是一个请求的完整 JSON 对象logs/aiperf.logAIPerf 执行的详细日志。深入原理命令如何从 YAML 变成 AIPerf 调用AIPerfRunner._build_commandrun_aiperf.py是配置与执行之间的桥梁其转换规则值得理解便于你在不修改脚本的情况下扩展配置始终以aiperf profile作为命令前缀profile 模式base_config与扫描参数合并后逐字段转换为命令行参数字段名下划线转为连字符prompt_input_tokens_mean→--prompt-input-tokens-mean值为None的可选字段不会生成对应参数例如未配置tokenizer时就不传--tokenizer布尔值True生成无值开关参数如--streamingFalse则忽略api_key_env_var特殊处理读取环境变量值后生成--api-key 值自动注入--output-artifact-dir指向本次运行的结果目录。基准开始前_check_servicerun_aiperf.py会对url /v1/models发起 5 秒超时的 HTTP 请求若配置了api_key_env_var则携带Authorization: Bearer key头连接失败或返回非 200 状态都会抛出RuntimeError中止执行对应测试见 test_run_aiperf.py 中TestCheckService类。排查与注意事项API Key 缺失如果api_key_env_var指定的环境变量未设置脚本会在构建命令阶段报错并给出export提示服务不可达健康检查会先于任何基准运行执行ConnectError或非 200 响应会中止任务避免浪费一整轮扫描时间扫描组合过多超过 100 个组合会直接报错需缩小扫描值域长时任务中断扫描中途按CtrlC会捕获KeyboardInterrupt并中止后续运行run_aiperf.py已完成的运行结果与元数据仍保留在各自目录中密钥安全写入日志与run_metadata.json的命令均经过脱敏仅暴露 API Key 后 6 位可在复现命令时结合环境变量恢复完整密钥结果可复现run_metadata.json中保存了完整base_config快照、扫描参数与脱敏命令配合random_seed固定合成数据可在后续分析中精确还原每次运行的环境。延伸阅读基准测试总览了解 Guardrails Mock LLM AIPerf 的端到端测试拓扑与 Procfile 编排方式run_aiperf.py核心执行器源码命令构建、扫描生成、元数据保存、健康检查aiperf_models.py配置模型的字段定义与校验逻辑configs/single_concurrency.yaml 与 configs/sweep_concurrency.yaml开箱即用的示例配置tests/test_run_aiperf.py 与 tests/test_aiperf_models.py覆盖命令构建、参数合并、脱敏、扫描上限、配置校验等行为的测试用例是理解脚本行为边界的权威参考。赞分享人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载相关推荐garak 集成 NeMo Guardrails用 LLM 漏洞扫描器对防护配置做安全测试garak 集成 NeMo Guardrails用 LLM 漏洞扫描器对防护配置做安全测试 导读 本篇文章围绕 garakthe LLM vulnerabi人工智能大模型模型评测红蓝对抗提示词注入防护模型安全AI 安全治理Model-Optimizer 性能基准测试指南基于 AIPerf 的模型服务吞吐量与延迟测量Model Optimizer 性能基准测试指南基于 AIPerf 的模型服务吞吐量与延迟测量 导读 本文讲解 Model Optimizer 仓库中用于验证人工智能大模型模型优化模型量化模型压缩NeMo Guardrails性能基准测试不同配置下的响应时间对比NeMo Guardrails性能基准测试不同配置下的响应时间对比 想要了解如何为你的LLM应用选择最佳配置这篇 NeMo Guardrails性能基准测试人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG上一篇Git LFS终极安装指南全平台快速部署方案下一篇build-extra自动化构建流程解析从源码到发布的完整路径创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考