| 名称 | jetson-video-benchmark |
| 开源协议 | “Apache-2.0” |
| 描述 | >- 用于测量 Jetson Video Codec SDK 或 PyNvVideoCodec 编码/解码吞吐量, 比较预设或表面,使用经过认证的示例和用户媒体测试编解码器工作线程容量, 或在缺少代表性内容时生成文档化的时钟缩放或时钟与分辨率缩放规划估算。 也用于仅要求 PSNR 或 SSIM 结果的 Jetson 视频请求,以应用此性能技能的范围限定响应。 metadata: |
| 作者 | “Vinit Bansal vinitkumarb@nvidia.com” tags: [jetson, video-codec-sdk, pynvvideocodec, benchmark, nvenc, nvdec] languages: [python] data-classification: public |
Jetson 视频基准测试
目的
测量当前 Jetson 上的编解码器阶段 FPS 和每秒百万像素。使用此技能进行编码或解码吞吐量、P4/P5 对比、原生与 Python 对比,以及不断增加工作线程的容量测试。当内容不可用时,它可以改为为精确支持的 1080p 表行和目标最大视频时钟生成一个明确标注的 SDK 文档估算值。对于其他请求的分辨率,它还可以应用估算参考中定义的有界像素面积启发式方法。切勿将任一估算值呈现为目标测量值。
先决条件
- 对于实时测量:
- 在具有直接 GPU 访问权限的目标 Jetson 上运行。来自
jetson-video-setup的全新已验证nvcodec-environment身份是可选的;如果提供,则它是权威的,任何无效或过期的身份都会失败,而不会进行本地回退。代理可以从 setup 的公共只读探针获取该身份;它不必出现在客户的提示中。 - 如果没有该身份,本地路由仅检查已安装的
nvidia-video-codec-sdkAPT 包及其包拥有的官方示例源。PyNvVideoCodec 路由需要经过认证的 setup 环境或调用者的确切绝对pynvc_interpreter;切勿扫描 venv。在询问客户该路径之前,如果已安装该技能,请调用 setup 的公共探针并检查其类型化结果。这些只读检查不会安装、修复、注册或冒烟测试任何东西。只有当两个权限都不可用时,显式的pynvc或both请求才返回input_required;本地auto将 PyNvVideoCodec 记录为not_evaluated,并可能继续符合条件的本地分支。 - PyNvVideoCodec 纯解码性能路由可以使用已验证的默认
pynvc-smoke环境。Python 编码或对比路由使用导入 Torch 的官方示例,因此需要单独供应的full-samplesvenv;切勿就地升级 smoke venv。 - 实时编码、对比和编码容量路由需要兄弟技能
jetson-video-recipe以及其经验证的 schema-2 配方之一的精确可移植身份。如果其公共验证器不存在,则保留dependency_required及其安装并重试操作。解码路由不需要配方技能。 - 当安装了 setup 时,请在实时测量前阅读其共享的 视频内容策略。它不适用于单独仅文档估算路径。并非仅为此策略需要 setup:没有它,要求一个确切的用户选择路径或 URL,切勿选择目录或合成媒体,并保留源 URL、许可证、署名、路径、大小和 SHA-256。
- 在构建实时基准测试预演之前应用该策略的输入门。切勿为用户选择媒体,也不要使用 setup 的冒烟测试夹具进行性能测试。
- 在具有直接 GPU 访问权限的目标 Jetson 上运行。来自
- 当确切的平台、SDK 版本、表格条件和配置的最大视频时钟事实带有出处时,可以生成文档答案。时钟缩放估算还需要正的配置最大视频时钟。它不需要媒体、配方、示例认证或编解码器启动。如果没有该时钟,则仅报告未缩放参考行为
target_clock_unavailable,而不是平台缩放估算。
组合请求的兄弟阶段
仅文档估算和无配方的实时解码不需要兄弟技能。实时编码、对比和编码容量路由需要 jetson-video-recipe;SDK 安装、修复、新的 full-samples Python 环境,或在需要已注册 Python 权限时的一次性只读交接,属于 jetson-video-setup。在任一阶段之前检查代理的已安装技能目录。如果兄弟技能存在,请阅读其 SKILL.md 并调用其文档化的公共入口点;将产物作为数据传递,切勿导入兄弟代码。如果不存在,则保留已完成的输入和测量证据,并使用实际名称说明:I can run <stage>, but it requires <skill>, which is not installed. Install <skill> and retry this stage. 当调用者已经提供了经过认证的 setup 证据或一个通过本地认证的确切解释器,或一个仅解码或仅文档请求的配方时,切勿要求 setup。
说明
-
首先应用范围边界。对于仅请求客观质量指标(包括 PSNR 或 SSIM)的请求,仅说明此性能技能不提供这些指标,并且需要单独授权的质量工作流,然后停止。不要提及或推荐外部工具,也不要主动提供配置或运行比较;不要请求媒体、探测、安装任何内容或启动操作。
-
将范围内请求分类为实时
encode、decode、compare或camera_capacity测量,或documented_estimate答案。在选择编码或解码行之前,先确定相机数据方向。质量、预设、比特率、码率控制、录制或请求编解码器输出的措辞是编码提示;以 NVENC 为主导,仅在相机已输出指定压缩编解码器的条件情况下提及解码。IP/RTSP 输入、已编码输入、摄取、播放或明确的解码措辞是解码提示。显式转码或先解码后编码使用单独的 NVDEC 和 NVENC 预算。当没有方向提示时,有条件地呈现编码和解码两种解释并询问适用哪种;切勿静默选择一种。 -
当媒体不存在时:
- 对于明确的运行或基准测试请求,或对于实际、真实、测量、实时或本目标上的 FPS,先应用共享策略的
input_required门,并在探测、检索、认证、创建工作区、预演或启动之前停止。在此门处仅询问缺失的媒体标识;不要同时请求解释器、环境、配方或其他后续阶段字段。 - 对于任何正请求分辨率下的规划、预期、指示性或可实现 FPS 问题,请遵循 文档化性能估算。仅使用精确记录的 1080p 行和配置的最大视频时钟作为来源基础。对于非 1080p 请求,请应用参考的像素面积反比公式,并说明这是 SDK 表未陈述的额外启发式方法。如果时钟不可用,则仅返回未缩放的 1080p 参考行。不要调用基准控制器或声称进行了测量。
- 对于明确的运行或基准测试请求,或对于实际、真实、测量、实时或本目标上的 FPS,先应用共享策略的
-
当提供本地媒体时,验证并哈希该确切选定的输入。对于 URL 输入,保留用户提供的准确 URL,并仅在目标、授权和运行时权限门之后检索它;然后验证并哈希检索到的字节。保留源 URL(对于本地媒体为 null)、许可证和署名。使用实时测量路径,而不是文档估算。
-
保留实时测量所请求的表面。将“任意”、“最佳可用”、“为我选择”和其他未指定表面的措辞视为
auto,而不是both。将both保留用于明确的双表面对比。对于auto,零个合格表面会阻止,一个会运行,两个会返回selection_required;切勿检查先前结果、发明首选 SDK 或启动基准测试来弥补缺失的用户选择。当有两个合格表面时,请明确要求native、pynvc或both。在媒体门之后,首先使用有效的已提供 setup 证据或确切解释器。如果 PyNvVideoCodec 可能参与且两者均未提供,请通过已安装的jetson-video-setup的公共只读probe_nvcodec.py调用它:对显式 Python 使用--runtime pynvc,对both/auto使用--runtime both、新鲜--output,并且切勿使用--setup-candidate。检查新生成的产物;只有选定 Py 表面已安装且其pynvc.identity.status为verified的新鲜产物才是可用权限。将那个确切产物快照为控制器的可移植environment身份,确切包含schema_version、kind、规范化绝对path、size_bytes和小写sha256。如果 setup 缺失或报告任何未就绪、不可读、过期、绑定或启动失败,请为显式pynvc/both请求确切解释器;对于本地auto,将 Python 报告为not_evaluated,并仅继续符合条件的本地表面。切勿将受阻探针作为权限传递、扫描 venv 或隐藏未评估的对等项。 -
先运行
dry_run,检查每个计划参数,然后在全新的私有工作区中运行execute。直接调用此技能的控制器:python3 -I {baseDir}/scripts/benchmark_controller.py \ --request request.json --workspace fresh-workspace \ --output result.json -
对于本地编码,认证
AppEncPerf,检查-h和-A,并且只使用宣传的选项。切勿传递-loop。本地解码使用经认证的AppDecPerf;PyNvVideoCodec 在 setup 证明的解释器或调用者选择的准确绝对pynvc_interpreter下使用 wheel 自带的性能示例。 -
每个变体和表面保留一个整进程预热和至少三个独立测量进程。每个测量命令阶段都是
measure。 -
对于实时测量,列出每次重复的 FPS 和 MP/s,然后列出两个指标的平均值、最小值和最大值。PyNvVideoCodec 解码忽略 MP/s,因为其经过认证的性能示例未报告尺寸;报告该原因,而不是从调用者元数据推导 MP/s。对于本地/Python 对比,披露精确投影差异以及它们是否改变了请求意图。对于实时预设对比,仅报告测量的吞吐量差异;不要从预设名称或吞吐量陈述或暗示质量、压缩效率或存储顺序。当该区别重要时,说明未测量质量。对于文档化估算,报告源行、时钟出处、请求的分辨率、公式、假设以及估算参考要求的每个推断标签,外加
measurement_performed: false;切勿编造重复次数或测量统计量。 -
将测量的并发结果标记为编解码器阶段容量界限。对于无媒体规划问题,当每流 FPS 和明确或清晰默认的安全余量可用时,分辨率缩放估算还可产生
documented_theoretical_capacity_estimate。保持编码和解码预算分开;对于混合工作负载,将每个流的分数负载累加到一个共享预算,而不是为每个分辨率授予完整预算。将结果称为理论编解码器流界限,而不是经过验证的摄像机数量:它排除采集、ISP、传输、AI、显示、内存争用和端到端延迟。已披露的 30-fps 和 60-fps 场景可以代替未说明的帧率,但它们并不能取代问题:最终响应仍必须明确询问其假设或枚举的每个省略输入,指明编解码器方向(对捕获帧编码、对已压缩流解码或两者)、精确预设、每流 FPS 以及流混合或数量。最后,请求精确的代表性内容和经过测量的、严格递增的工作线程扫描以验证容量。对于每个文档化 FPS 和流计数计算,使用只读计算器,保持全精度直到最终下限或显示舍入,并应用参考的双向最大计数检查;切勿依赖心算来报告容量。
参考
可用脚本
| 脚本 | 用途 | 参数 |
|---|---|---|
scripts/benchmark_controller.py |
预演或执行经过认证的编码/解码、对比和工作线程容量基准测试。 | --request、--workspace 和 --output。 |
直接检查控制器的公共 CLI:
python3 -I {baseDir}/scripts/benchmark_controller.py --help
限制
- 结果仅适用于经证据支持的目标和工作负载;它们不是可移植的产品上限。
- 文档衍生值和分辨率缩放值是指示性的每引擎规划估算值,不是实现的 FPS、经过验证的并发容量,也不是测试代表性内容的替代品。
- 不要插值未记录的预设,也不要跨格式、位深、色度、编解码器、码率控制模式或调优进行缩放。仅通过明确标记的像素面积启发式方法缩放分辨率。不要乘以引擎数量,除非该确切目标数量经过独立认证、用户明确请求多会话聚合规划,并且答案仍然是单独标记的多会话理论界限。
- 客观质量测量(包括 PSNR 和 SSIM)不属于此性能技能。
- 已发布的 PyNvVideoCodec 2.1 编码性能助手将每个工作线程限制为 1,000 帧。遵循输出契约,而不是静默比较不相等的帧计数。
- 外部编解码器和包装器墙钟时间不能替代官方示例报告的吞吐量。
故障排除
- 保留
input_required、selection_required、blocked、partial和failed,而不是将它们提升为完成。 - 拒绝过期输出、输入或环境身份漂移、格式错误或非有限度量、错误的处理帧计数、不支持的示例选项以及缺失的正面标记。
- 当对等表面失败时,保留成功的表面,但切勿合并或替换其结果。