diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 44df610..32646ec 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,6 +18,6 @@ jobs: with: enable-cache: true - name: Install - run: uv sync --python 3.12 --extra onnx-cpu --group dev + run: uv sync --python 3.12 --extra onnx-cpu --extra openvino --group dev - name: Test run: uv run pytest -q diff --git a/README.md b/README.md index b670c4b..e7ed95e 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,18 @@ SAB uses [uv](https://docs.astral.sh/uv/). Each host installs the extra for its uv run python -m sab.models.benchmark_rfdetr ``` +Other hosts install the extra for each runtime they need: + +| Extra | Adds | Host | +|---|---|---| +| `openvino` | `OpenVINORuntime` | Any CPU host. | + +The `nvidia` extra now includes `openvino`, so `benchmark_all` also runs the OpenVINO CPU rows. These rows take most of the run time. To run only the TensorRT and ONNX Runtime rows, add `--runtimes=tensorrt,onnxruntime`. + +```bash +uv sync --python 3.12 --extra openvino +``` + ### Options `benchmark_all` and each script accept these flags: @@ -71,6 +83,9 @@ Each runtime times the smallest call that runs the full graph. Preprocessing and | TensorRT | CUDA graph replay, or `execute_async_v3` | Not included. The input is already in GPU memory. | | ONNX Runtime (GPU) | `run_with_iobinding` | Not included. IOBinding binds GPU buffers. | | ONNX Runtime (CPU) | `run_with_iobinding` | None (CPU). | +| OpenVINO | `InferRequest.infer()` | None (CPU). | + +OpenVINO rows read the existing `.onnx` files and compile them on the host, as TensorRT rows do. They set `INFERENCE_PRECISION_HINT` from the precision of the row. On a CPU with no native fp16, the fp16 rows are skipped, because OpenVINO compiles them in f32. ### Throttle detection diff --git a/pyproject.toml b/pyproject.toml index 7849c27..24434ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,8 +30,9 @@ tensorrt = [ ] onnx-cpu = ["onnxruntime>=1.22.0"] onnx-gpu = ["onnxruntime-gpu>=1.22.0"] +openvino = ["openvino>=2025.0"] # One extra for each host. -nvidia = ["single-artifact-benchmarking[tensorrt,onnx-gpu]"] +nvidia = ["single-artifact-benchmarking[tensorrt,onnx-gpu,openvino]"] [dependency-groups] dev = ["pytest>=8"] @@ -56,6 +57,7 @@ testpaths = ["tests"] markers = [ "tensorrt: needs TensorRT and an NVIDIA GPU", "onnxruntime: needs onnxruntime", + "openvino: needs openvino", ] # PyPI holds only stub source packages for TensorRT 10; the wheels are on NVIDIA's index. diff --git a/sab/models/benchmark_rfdetr.py b/sab/models/benchmark_rfdetr.py index e883354..e2d4c3f 100644 --- a/sab/models/benchmark_rfdetr.py +++ b/sab/models/benchmark_rfdetr.py @@ -8,6 +8,7 @@ from sab.results import pretty_print_results from sab.runner import run_benchmark_on_artifacts from sab.runtimes.onnxruntime import ONNXRuntime +from sab.runtimes.openvino import OpenVINORuntime from sab.runtimes.tensorrt import TRTRuntime @@ -52,13 +53,24 @@ def postprocess(self, outputs: dict[str, torch.Tensor], metadata: dict) -> tuple return postprocess_output(outputs, metadata) +# rf-detr-large.onnx in the bucket is the deprecated large model. The current large model is rf-detr-large-new.onnx. +ONNX_FILES = ( + "rf-detr-nano.onnx", + "rf-detr-small.onnx", + "rf-detr-medium.onnx", + "rf-detr-large-new.onnx", + "rf-detr-xlarge.onnx", + "rf-detr-xxlarge.onnx", +) + + def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: - return [ + onnx_rows = [ request - for size in ("nano", "small", "medium") + for onnx_file in ONNX_FILES for request in ( ArtifactBenchmarkRequest( - artifact_path=f"rf-detr-{size}.onnx", + artifact_path=onnx_file, runtime=TRTRuntime, processor=RFDETRProcessor, device="gpu", @@ -66,7 +78,7 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: buffer_time=buffer_time, ), ArtifactBenchmarkRequest( - artifact_path=f"rf-detr-{size}.onnx", + artifact_path=onnx_file, runtime=TRTRuntime, processor=RFDETRProcessor, device="gpu", @@ -74,7 +86,7 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: buffer_time=buffer_time, ), ArtifactBenchmarkRequest( - artifact_path=f"rf-detr-{size}.onnx", + artifact_path=onnx_file, runtime=ONNXRuntime, processor=RFDETRProcessor, device="cpu", @@ -83,6 +95,19 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: ), ) ] + openvino_rows = [ + ArtifactBenchmarkRequest( + artifact_path=onnx_file, + runtime=OpenVINORuntime, + processor=RFDETRProcessor, + device="cpu", + precision=precision, + buffer_time=buffer_time, + ) + for onnx_file in ONNX_FILES + for precision in ("fp32", "fp16") + ] + return onnx_rows + openvino_rows def main( diff --git a/sab/models/benchmark_yolo26.py b/sab/models/benchmark_yolo26.py index e24c11c..7b3c8e7 100644 --- a/sab/models/benchmark_yolo26.py +++ b/sab/models/benchmark_yolo26.py @@ -14,6 +14,7 @@ from sab.results import pretty_print_results from sab.runner import run_benchmark_on_artifacts from sab.runtimes.onnxruntime import ONNXRuntime +from sab.runtimes.openvino import OpenVINORuntime from sab.runtimes.tensorrt import TRTRuntime @@ -22,7 +23,7 @@ class YOLO26Processor(YOLOv11Processor): def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: - return [ + onnx_rows = [ request for size in ("n", "s", "m", "l", "x") for request in ( @@ -55,6 +56,20 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: ), ) ] + openvino_rows = [ + ArtifactBenchmarkRequest( + artifact_path=f"yolo26{size}.onnx", + runtime=OpenVINORuntime, + processor=YOLO26Processor, + device="cpu", + precision=precision, + buffer_time=buffer_time, + needs_class_remapping=True, + ) + for size in ("n", "s", "m", "l", "x") + for precision in ("fp32", "fp16") + ] + return onnx_rows + openvino_rows def main( diff --git a/sab/models/benchmark_yolov11.py b/sab/models/benchmark_yolov11.py index 04d6e39..2a96c59 100644 --- a/sab/models/benchmark_yolov11.py +++ b/sab/models/benchmark_yolov11.py @@ -9,6 +9,7 @@ from sab.results import pretty_print_results from sab.runner import run_benchmark_on_artifacts from sab.runtimes.onnxruntime import ONNXRuntime +from sab.runtimes.openvino import OpenVINORuntime from sab.runtimes.tensorrt import TRTRuntime TRT_WITHOUT_CUDA_GRAPH = partial(TRTRuntime, use_cuda_graph=False) @@ -96,7 +97,7 @@ def postprocess(self, outputs: dict[str, torch.Tensor], metadata: dict) -> tuple def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: - return [ + onnx_rows = [ request for size in ("n", "s", "m", "l", "x") for request in ( @@ -129,6 +130,20 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: ), ) ] + openvino_rows = [ + ArtifactBenchmarkRequest( + artifact_path=f"yolo11{size}_nms_conf_0.01.onnx", + runtime=OpenVINORuntime, + processor=YOLOv11Processor, + device="cpu", + precision=precision, + buffer_time=buffer_time, + needs_class_remapping=True, + ) + for size in ("n", "s", "m", "l", "x") + for precision in ("fp32", "fp16") + ] + return onnx_rows + openvino_rows def main( diff --git a/sab/models/benchmark_yolov8.py b/sab/models/benchmark_yolov8.py index b48bbef..90cf1c7 100644 --- a/sab/models/benchmark_yolov8.py +++ b/sab/models/benchmark_yolov8.py @@ -4,6 +4,7 @@ from sab.request import ArtifactBenchmarkRequest from sab.results import pretty_print_results from sab.runner import run_benchmark_on_artifacts +from sab.runtimes.openvino import OpenVINORuntime class YOLOv8Processor(YOLOv11Processor): @@ -11,7 +12,7 @@ class YOLOv8Processor(YOLOv11Processor): def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: - return [ + onnx_rows = [ ArtifactBenchmarkRequest( artifact_path=f"yolov8{size}_nms_conf_0.01.onnx", runtime=TRT_WITHOUT_CUDA_GRAPH, @@ -23,6 +24,20 @@ def build_requests(buffer_time: float = 0.0) -> list[ArtifactBenchmarkRequest]: ) for size in ("n", "s", "m") ] + openvino_rows = [ + ArtifactBenchmarkRequest( + artifact_path=f"yolov8{size}_nms_conf_0.01.onnx", + runtime=OpenVINORuntime, + processor=YOLOv8Processor, + device="cpu", + precision=precision, + buffer_time=buffer_time, + needs_class_remapping=True, + ) + for size in ("n", "s", "m") + for precision in ("fp32", "fp16") + ] + return onnx_rows + openvino_rows def main( diff --git a/sab/runner.py b/sab/runner.py index ded9984..6554832 100644 --- a/sab/runner.py +++ b/sab/runner.py @@ -9,7 +9,7 @@ from sab.processors import Pipeline from sab.request import ArtifactBenchmarkRequest from sab.results import load_results, result_key, save_results -from sab.runtimes.base import runtime_class +from sab.runtimes.base import UnavailableOnHost, runtime_class def parse_filter(value: str | Iterable[str] | None) -> set[str] | None: @@ -139,7 +139,11 @@ def store(row: dict): rows.append(stored_rows[stored_index[key]]) continue - row = run_benchmark_on_artifact(request, images_dir, annotations_file_path) + try: + row = run_benchmark_on_artifact(request, images_dir, annotations_file_path) + except UnavailableOnHost as reason: + print(f"Skipping {request.artifact_path} ({request.runtime_name}, {request.device}, {request.precision}): {reason}.") + continue print(row) store(row) rows.append(row) diff --git a/sab/runtimes/__init__.py b/sab/runtimes/__init__.py index d78b84d..5e08fdd 100644 --- a/sab/runtimes/__init__.py +++ b/sab/runtimes/__init__.py @@ -1,5 +1,6 @@ from sab.runtimes.base import DEVICES, PRECISIONS, InputSpec, Runtime, RuntimeFactory, runtime_class from sab.runtimes.onnxruntime import ONNXRuntime +from sab.runtimes.openvino import OpenVINORuntime from sab.runtimes.tensorrt import TRTRuntime __all__ = [ @@ -7,6 +8,7 @@ "PRECISIONS", "InputSpec", "ONNXRuntime", + "OpenVINORuntime", "Runtime", "RuntimeFactory", "TRTRuntime", diff --git a/sab/runtimes/base.py b/sab/runtimes/base.py index 1c2bcb1..3b68ad9 100644 --- a/sab/runtimes/base.py +++ b/sab/runtimes/base.py @@ -19,6 +19,10 @@ class InputSpec: shape: tuple[int, ...] +class UnavailableOnHost(RuntimeError): + """The artifact loaded, but this host cannot run the row as requested. The runner skips the row.""" + + def pick_image_input(input_names: list[str], image_input_name: str | None) -> str: """The name of the image input: the given name, the only input, or the input named "images".""" if image_input_name is not None: diff --git a/sab/runtimes/openvino.py b/sab/runtimes/openvino.py new file mode 100644 index 0000000..3786859 --- /dev/null +++ b/sab/runtimes/openvino.py @@ -0,0 +1,144 @@ +import importlib.metadata +import os +from pathlib import Path +from typing import ClassVar + +import numpy as np +import torch + +from sab.profiler import CPUProfiler +from sab.runtimes.base import InputSpec, Runtime, UnavailableOnHost, pick_image_input + +WARMUP_ITERATIONS = 10 + + +def _find_xml(artifact_path: str) -> Path: + path = Path(artifact_path) + if path.is_file(): + return path + xml_files = sorted(path.glob("*.xml")) + if not xml_files: + raise FileNotFoundError(f"No .xml file found in {path}") + if len(xml_files) > 1: + raise ValueError(f"Found several .xml files in {path}: {[file.name for file in xml_files]}") + return xml_files[0] + + +def _static_shape(partial_shape) -> tuple[int, ...]: + """Replace every dynamic dimension with 1.""" + return tuple(dim.get_length() if dim.is_static else 1 for dim in partial_shape) + + +def _output_name(port, index: int) -> str: + return port.any_name if port.get_names() else f"output{index}" + + +class OpenVINORuntime(Runtime): + """Runs an OpenVINO artifact on the CPU plugin. The timed call is `InferRequest.infer()`. + + `artifact_path` is an `.xml` or `.onnx` file, or the directory that holds one `.xml` file. + `input_shape` gives the static shape of an image input whose height, width or channels are dynamic. + One `InferRequest` serves every call. The input tensors are set before the timed call, + and the outputs are copied after it, because the request reuses its output buffers. + """ + + name: ClassVar[str] = "openvino" + devices: ClassVar[frozenset[str]] = frozenset({"cpu"}) + + def __init__( + self, + artifact_path: str, + device: str, + precision: str, + *, + image_input_name: str | None = None, + input_shape: tuple[int, ...] | None = None, + ): + super().__init__(artifact_path, device, precision) + import openvino as ov + import openvino.properties as properties + import openvino.properties.hint as hint + + # The CPU plugin defaults to f16 on ARM and to bf16 on x86 with AMX. Without this hint, + # an fp32 row does not run in fp32. An int8 artifact keeps its own quantization. + inference_precision = ov.Type.f16 if precision == "fp16" else ov.Type.f32 + + core = ov.Core() + model = core.read_model(str(_find_xml(artifact_path))) + # Compilation can give an input port another `any_name`, so the names come from the model. + self._input_names = [port.any_name for port in model.inputs] + image_name = pick_image_input(self._input_names, image_input_name) + if input_shape is not None: + model.reshape({image_name: ov.PartialShape(list(input_shape))}) + elif any(dim.is_dynamic for dim in list(model.input(image_name).get_partial_shape())[1:]): + raise ValueError(f"The image input {image_name!r} has a dynamic shape. Give its static shape as input_shape.") + self.compiled_model = core.compile_model( + model, + "CPU", + { + hint.performance_mode(): hint.PerformanceMode.LATENCY, + # The LATENCY hint uses only the physical cores, even when more threads are asked for. + # ONNX Runtime uses every logical CPU, so both runtimes get the same threads. + hint.enable_hyper_threading(): True, + properties.inference_num_threads(): os.cpu_count(), + hint.inference_precision(): inference_precision, + }, + ) + # A CPU with no native f16 compiles an f16 hint as f32. Such a row would measure fp32 under an fp16 label. + compiled_precision = self.compiled_model.get_property(hint.inference_precision()) + if compiled_precision != inference_precision: + raise UnavailableOnHost( + f"the OpenVINO CPU plugin compiles {precision} as {compiled_precision.get_type_name()} on this CPU" + ) + self.infer_request = self.compiled_model.create_infer_request() + self.profiler = CPUProfiler() + self.input_device = "cpu" + + input_ports = dict(zip(self._input_names, self.compiled_model.inputs)) + self._input_dtypes = {name: port.get_element_type().to_dtype() for name, port in input_ports.items()} + self._input_shapes = {name: _static_shape(port.get_partial_shape()) for name, port in input_ports.items()} + self._outputs = [(_output_name(port, index), port) for index, port in enumerate(self.compiled_model.outputs)] + + self.input_spec = InputSpec(name=image_name, shape=self._input_shapes[image_name]) + + self.warmup() + + @classmethod + def is_available(cls, device: str) -> bool: + if device not in cls.devices: + return False + try: + import openvino as ov + except ImportError: + return False + return "CPU" in ov.Core().available_devices + + @classmethod + def version(cls) -> str: + return f"openvino {importlib.metadata.version('openvino')}" + + def run(self, inputs: dict[str, torch.Tensor]) -> dict[str, torch.Tensor]: + self._set_inputs(inputs) + + with self.profiler.profile(): + self.infer_request.infer() + + return {name: torch.from_numpy(np.array(self.infer_request.get_tensor(port).data)) for name, port in self._outputs} + + def warmup(self, num_iterations: int = WARMUP_ITERATIONS): + """Run zero inputs through the model to warm caches before real measurements begin.""" + for name in self._input_names: + self._set_array(name, np.zeros(self._input_shapes[name], dtype=self._input_dtypes[name])) + for _ in range(num_iterations): + self.infer_request.infer() + self.profiler.reset() + + def _set_inputs(self, inputs: dict[str, torch.Tensor]): + for name, tensor in inputs.items(): + array = tensor.detach().cpu().numpy().astype(self._input_dtypes[name]) + self._set_array(name, np.ascontiguousarray(array)) + + def _set_array(self, name: str, array: np.ndarray): + import openvino as ov + + self.infer_request.set_tensor(name, ov.Tensor(array)) diff --git a/tests/test_models_detection.py b/tests/test_models_detection.py index 5757f6e..b339ab1 100644 --- a/tests/test_models_detection.py +++ b/tests/test_models_detection.py @@ -106,7 +106,9 @@ def build(family: str, buffer_time: float = 0.0) -> list[ArtifactBenchmarkReques def test_build_requests_reproduces_the_old_rows(family): requests = build(family, buffer_time=0.25) - assert [describe(request) for request in requests] == EXPECTED_ROWS[family]() + expected = EXPECTED_ROWS[family]() + + assert [describe(request) for request in requests[: len(expected)]] == expected processor = getattr(load(family), PROCESSOR_NAMES[family]) max_dets = 500 if family == "yololite" else 100 assert { diff --git a/tests/test_openvino.py b/tests/test_openvino.py new file mode 100644 index 0000000..9652b9c --- /dev/null +++ b/tests/test_openvino.py @@ -0,0 +1,161 @@ +import os + +import pytest +import torch + +ov = pytest.importorskip("openvino") +onnx = pytest.importorskip("onnx") +from onnx import TensorProto, helper # noqa: E402 + +from sab.runtimes.base import UnavailableOnHost # noqa: E402 +from sab.runtimes.openvino import OpenVINORuntime # noqa: E402 + +pytestmark = pytest.mark.openvino + + +def cpu_has_native_fp16() -> bool: + return "FP16" in ov.Core().get_property("CPU", "OPTIMIZATION_CAPABILITIES") + + +needs_native_fp16 = pytest.mark.skipif(not cpu_has_native_fp16(), reason="this CPU compiles f16 as f32") + + +def convert(graph, directory, name="model"): + """Convert an ONNX graph to an OpenVINO `.xml` + `.bin` pair and return the `.xml` path.""" + directory.mkdir(exist_ok=True) + onnx_model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 17)], ir_version=8) + onnx.checker.check_model(onnx_model) + onnx_path = directory / f"{name}.onnx" + onnx.save(onnx_model, str(onnx_path)) + xml_path = directory / f"{name}.xml" + ov.save_model(ov.convert_model(str(onnx_path)), str(xml_path)) + return xml_path + + +def double_graph(shape=(1, 3, 4, 4)): + images = helper.make_tensor_value_info("images", TensorProto.FLOAT, list(shape)) + outputs = helper.make_tensor_value_info("outputs", TensorProto.FLOAT, list(shape)) + two = helper.make_tensor("two", TensorProto.FLOAT, [], [2.0]) + node = helper.make_node("Mul", ["images", "two"], ["outputs"]) + return helper.make_graph([node], "double", [images], [outputs], [two]) + + +def two_input_graph(): + images = helper.make_tensor_value_info("images", TensorProto.FLOAT, [1, 3, 4, 4]) + sizes = helper.make_tensor_value_info("orig_target_sizes", TensorProto.INT64, [1, 2]) + boxes = helper.make_tensor_value_info("boxes", TensorProto.FLOAT, [1, 3, 4, 4]) + labels = helper.make_tensor_value_info("labels", TensorProto.INT64, [1, 2]) + two = helper.make_tensor("two", TensorProto.FLOAT, [], [2.0]) + one = helper.make_tensor("one", TensorProto.INT64, [], [1]) + nodes = [ + helper.make_node("Mul", ["images", "two"], ["boxes"]), + helper.make_node("Add", ["orig_target_sizes", "one"], ["labels"]), + ] + return helper.make_graph(nodes, "two_inputs", [images, sizes], [boxes, labels], [two, one]) + + +def dynamic_double_graph(): + images = helper.make_tensor_value_info("images", TensorProto.FLOAT, ["batch", "channels", "height", "width"]) + outputs = helper.make_tensor_value_info("outputs", TensorProto.FLOAT, ["batch", "channels", "height", "width"]) + two = helper.make_tensor("two", TensorProto.FLOAT, [], [2.0]) + node = helper.make_node("Mul", ["images", "two"], ["outputs"]) + return helper.make_graph([node], "dynamic_double", [images], [outputs], [two]) + + +def test_input_shape_makes_a_dynamic_image_input_static(tmp_path): + runtime = OpenVINORuntime(str(convert(dynamic_double_graph(), tmp_path)), "cpu", "fp32", input_shape=(1, 3, 4, 4)) + images = torch.rand(1, 3, 4, 4) + + outputs = runtime.run({"images": images})["outputs"] + + assert runtime.input_spec.shape == (1, 3, 4, 4) + torch.testing.assert_close(outputs, images * 2) + + +def test_a_dynamic_image_input_without_input_shape_fails_at_load(tmp_path): + with pytest.raises(ValueError, match="input_shape"): + OpenVINORuntime(str(convert(dynamic_double_graph(), tmp_path)), "cpu", "fp32") + + +def test_is_available_only_with_the_cpu_plugin(monkeypatch): + assert OpenVINORuntime.is_available("cpu") + + monkeypatch.setattr(ov.Core, "available_devices", property(lambda self: ["GPU"])) + assert not OpenVINORuntime.is_available("cpu") + + +def test_run_gives_numerically_correct_outputs_that_own_their_memory(tmp_path): + runtime = OpenVINORuntime(str(convert(double_graph(), tmp_path)), "cpu", "fp32") + images = torch.rand(1, 3, 4, 4) + + first = runtime.run({"images": images})["outputs"] + runtime.run({"images": torch.zeros(1, 3, 4, 4)}) + + torch.testing.assert_close(first, images * 2) + + +def test_a_directory_must_hold_exactly_one_xml_file(tmp_path): + convert(double_graph(), tmp_path / "one", name="yolo") + images = torch.rand(1, 3, 4, 4) + runtime = OpenVINORuntime(str(tmp_path / "one"), "cpu", "fp32") + torch.testing.assert_close(runtime.run({"images": images})["outputs"], images * 2) + + (tmp_path / "none").mkdir() + with pytest.raises(FileNotFoundError): + OpenVINORuntime(str(tmp_path / "none"), "cpu", "fp32") + + convert(double_graph(), tmp_path / "two", name="a") + convert(double_graph(), tmp_path / "two", name="b") + with pytest.raises(ValueError, match="several"): + OpenVINORuntime(str(tmp_path / "two"), "cpu", "fp32") + + +@pytest.mark.parametrize( + "precision, expected", + [("fp32", ov.Type.f32), ("int8", ov.Type.f32), pytest.param("fp16", ov.Type.f16, marks=needs_native_fp16)], +) +def test_compiles_with_the_inference_precision_hint(tmp_path, precision, expected): + runtime = OpenVINORuntime(str(convert(double_graph(), tmp_path)), "cpu", precision) + + hint = runtime.compiled_model.get_property(ov.properties.hint.inference_precision()) + + assert hint == expected + + +def test_uses_every_logical_cpu(tmp_path): + runtime = OpenVINORuntime(str(convert(double_graph(), tmp_path)), "cpu", "fp32") + + threads = runtime.compiled_model.get_property(ov.properties.inference_num_threads()) + + assert threads == os.cpu_count() + + +def test_fp16_on_a_cpu_without_native_fp16_is_unavailable_on_host(tmp_path): + if cpu_has_native_fp16(): + pytest.skip("this CPU runs f16 natively") + xml_path = convert(double_graph(), tmp_path) + + with pytest.raises(UnavailableOnHost): + OpenVINORuntime(str(xml_path), "cpu", "fp16") + + +def test_extra_int64_input_reaches_the_model_as_int64(tmp_path): + runtime = OpenVINORuntime(str(convert(two_input_graph(), tmp_path)), "cpu", "fp32") + images = torch.rand(1, 3, 4, 4) + sizes = torch.tensor([[640, 480]], dtype=torch.int64) + + outputs = runtime.run({"images": images, "orig_target_sizes": sizes}) + + assert runtime.input_spec.name == "images" + torch.testing.assert_close(outputs["boxes"], images * 2) + assert outputs["labels"].tolist() == [[641, 481]] + + +def test_warmup_leaves_no_timings_and_each_run_adds_one(tmp_path): + runtime = OpenVINORuntime(str(convert(two_input_graph(), tmp_path)), "cpu", "fp32") + assert runtime.profiler.timings == [] + + inputs = {"images": torch.rand(1, 3, 4, 4), "orig_target_sizes": torch.ones(1, 2, dtype=torch.int64)} + for expected in (1, 2, 3): + runtime.run(inputs) + assert len(runtime.profiler.timings) == expected diff --git a/tests/test_runner.py b/tests/test_runner.py index a77134f..eb49e91 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -9,6 +9,7 @@ from sab.request import ArtifactBenchmarkRequest from sab.results import load_results from sab.runner import parse_filter, run_benchmark_on_artifact, run_benchmark_on_artifacts +from sab.runtimes.base import UnavailableOnHost from tests.fakes import FakeProcessor, FakeRuntime STATS = [0.5] * 12 @@ -197,6 +198,22 @@ def test_an_availability_check_that_raises_skips_the_request_and_the_run_continu assert out.count("Skipping a.onnx") == 1 and "driver exploded" in out +class RuntimeThatCannotRunHere(FakeRuntime): + def __init__(self, artifact_path, device, precision): + raise UnavailableOnHost("this CPU compiles fp16 as fp32") + + +def test_unavailable_on_host_at_load_skips_the_row_and_runs_the_next(harness, tmp_path, capsys): + requests = [make_request("a.xml", runtime=RuntimeThatCannotRunHere), make_request("b.onnx")] + + rows = run_many(requests, tmp_path / "out.json") + + out = capsys.readouterr().out + assert [row["artifact_request"]["artifact_path"] for row in rows] == ["b.onnx"] + assert "Skipping a.xml" in out and "this CPU compiles fp16 as fp32" in out + assert [row["artifact_request"]["artifact_path"] for row in load_results(str(tmp_path / "out.json"))] == ["b.onnx"] + + def test_resume_keeps_the_old_row_and_does_not_run(harness, tmp_path): output = tmp_path / "out.json" first = run_many([make_request()], output) diff --git a/uv.lock b/uv.lock index cf7e6a0..87ff8b6 100644 --- a/uv.lock +++ b/uv.lock @@ -2,9 +2,15 @@ version = 1 revision = 3 requires-python = ">=3.12" resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version == '3.13.*'", - "python_full_version < '3.13'", + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] conflicts = [[ { package = "single-artifact-benchmarking", extra = "onnx-cpu" }, @@ -283,7 +289,7 @@ name = "cuda-bindings" version = "13.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder" }, + { name = "cuda-pathfinder", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/27/df/281aa982f033426d59c6276b6643637746b6bf0a883186443daa89717291/cuda_bindings-13.4.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bb2e91717c83ea550ef1b19ebafd25c9fe805478f479d04b3fc798cc6d29d453", size = 6479822, upload-time = "2026-09-17T22:06:01.3Z" }, @@ -322,43 +328,43 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cublas", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cuda-nvrtc", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cudart = [ - { name = "nvidia-cuda-runtime", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cuda-runtime", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cufft = [ - { name = "nvidia-cufft", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cufft", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cufile = [ { name = "nvidia-cufile", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cuda-cupti", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] curand = [ - { name = "nvidia-curand", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-curand", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cusolver = [ - { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-cusolver", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cublas", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cusolver", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cusparse", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] cusparse = [ - { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, - { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cusparse", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cuda-nvrtc", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] nvtx = [ - { name = "nvidia-nvtx", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvtx", marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform != 'linux' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] [[package]] @@ -916,7 +922,7 @@ name = "nvidia-cublas" version = "13.1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-nvrtc", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -959,7 +965,7 @@ name = "nvidia-cudnn-cu13" version = "9.24.0.43" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, + { name = "nvidia-cublas", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ca/30/7c257e3d5cb4fecb147b93895c66e29c93f8e76d74b45bb418ff0587c4ec/nvidia_cudnn_cu13-9.24.0.43-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:a6812a554a1ff0413e9c52b84c26c050380649ab9615f9c16bded368ce9f421f", size = 650976863, upload-time = "2026-07-02T16:23:39.248Z" }, @@ -972,7 +978,7 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -1004,9 +1010,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, - { name = "nvidia-cusparse" }, - { name = "nvidia-nvjitlink" }, + { name = "nvidia-cublas", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-cusparse", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "nvidia-nvjitlink", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -1019,7 +1025,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -1160,6 +1166,42 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/74/3d/33878b36bc473415ff7ed92ba751a5b5181d2779c74441c3584c68261dbc/onnxruntime_gpu-1.30.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:13d4cf97120882739da8572ba26e2a0f39caed4c69749a147d8f1a77f74a4690", size = 205750897, upload-time = "2026-09-10T15:53:43.295Z" }, ] +[[package]] +name = "openvino" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "openvino-telemetry" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/43/e5a7fd6a13f6bc0fb389461a5a2e79b5bbaaa4388341fd040e3466890e71/openvino-2026.4.0-22959-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:171b876d1e732b2cf1c6a47d48dc6065fe7a36abe3d2a0035c8d3be36c0d67a1", size = 33344189, upload-time = "2026-09-16T14:54:28.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/96/106f20950f8636f23925fa9867f9b1d7d10dd20f7b0300b10f8da40fdf16/openvino-2026.4.0-22959-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:75245768f656afffd49078cee55b50b9501bb6778798aec3cc30e5613a86e370", size = 59130214, upload-time = "2026-09-16T14:54:33.131Z" }, + { url = "https://files.pythonhosted.org/packages/ca/73/ccfe5e280ba9a1123ee2fbc3fe60e95d9a1ad8f2ea3668d418c45b890b73/openvino-2026.4.0-22959-cp312-cp312-manylinux_2_35_aarch64.whl", hash = "sha256:cf2e8b12fd08588a69b11a8d2fe48c4373fb96eec28564dfc4754062c3f90439", size = 30292605, upload-time = "2026-09-16T14:54:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/62/95/6b1a095f865cd5a02f773590a419525ee9f9fc25770901cf461dad38aa29/openvino-2026.4.0-22959-cp312-cp312-win_amd64.whl", hash = "sha256:1d64a3178e750ea35f4095dc8ee6e0492795a5cf85c0dd24593a29f8a60c209d", size = 84025991, upload-time = "2026-09-16T14:54:41.519Z" }, + { url = "https://files.pythonhosted.org/packages/51/59/f6cf3e684a31ddf4db3df645cc452b18f33edac6a4becff1c141692fab4c/openvino-2026.4.0-22959-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2483df2786ab9c5b63f5f712d2aed38d6d227dc5f400dbbeb49dc2c84c2109e3", size = 33344519, upload-time = "2026-09-16T14:54:45.242Z" }, + { url = "https://files.pythonhosted.org/packages/75/b0/692a6f0aa313791126a0d646b7c0ba88ee368c7f76d1b8c8cd50b977975a/openvino-2026.4.0-22959-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:186abfe5f355c33f19b50fe48340f9af0110e92fd279b7358a023fcbd225c380", size = 59128449, upload-time = "2026-09-16T14:54:49.963Z" }, + { url = "https://files.pythonhosted.org/packages/31/61/fc2344dbcd86c4b1e9b9afa98b20f9e4c1bf9a31171785d894657e5691c0/openvino-2026.4.0-22959-cp313-cp313-manylinux_2_35_aarch64.whl", hash = "sha256:7a335edb34838d9d19a4d6cd79267f0d086e40b0847373e1cee82fc96cff758f", size = 30292247, upload-time = "2026-09-16T14:54:53.22Z" }, + { url = "https://files.pythonhosted.org/packages/be/bf/a18d0a0a67b572b76445fbd2fa7a5fe955de882010eb0f316d298ca42c16/openvino-2026.4.0-22959-cp313-cp313-win_amd64.whl", hash = "sha256:e822141285804444ef5fa5e916f5d42e50f7fafebfbfc5d0d7c3a335de1aa5fb", size = 84025941, upload-time = "2026-09-16T14:54:58.136Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/1bbe576c6996bc1fc51c81a7f89f66fd0eb30ba10ffe086cd1683a53a4d1/openvino-2026.4.0-22959-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:82741b9ef682ff736161fdad30e7fa4593de512ae7750b032e6a8aa3f0725252", size = 33320261, upload-time = "2026-09-16T14:55:01.69Z" }, + { url = "https://files.pythonhosted.org/packages/e2/99/a62c8957f7ef1b8a78a526abc710e7c7fdd43d2bdb3456610b3c5377c0b5/openvino-2026.4.0-22959-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5ac6b16b3072f4c5f20ab308db598098bcd1c346108e93f4b36d8548b95707bf", size = 59130968, upload-time = "2026-09-16T14:55:06.289Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ff/9c73e1a03e6fa79d38eeac5793c9de117fe10db4b71b81477d17ee225ea6/openvino-2026.4.0-22959-cp314-cp314-manylinux_2_35_aarch64.whl", hash = "sha256:b67541153cc2ef7181472f780a9094a096c4b75e1438f68facfe2b2b5054cdd0", size = 30302839, upload-time = "2026-09-16T14:55:09.6Z" }, + { url = "https://files.pythonhosted.org/packages/c5/82/b7f7a3c88622e47647d3bb6c9f04e98a5227c4f928cc29984f4a4538f850/openvino-2026.4.0-22959-cp314-cp314-win_amd64.whl", hash = "sha256:eab8a6c71210b2596765e3c9ffbdbe05c1d3b279793806e55162befa898a548f", size = 84027824, upload-time = "2026-09-16T14:55:14.733Z" }, + { url = "https://files.pythonhosted.org/packages/ad/6c/0d081a3e036e9c57552135ad9d9e3d40bc4112054709998136f6bead96a0/openvino-2026.4.0-22959-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:97a2c9dfb8e000483467463e9354876c4b08630aae4f2e24a639388d4c4de343", size = 33555730, upload-time = "2026-09-16T14:55:19.111Z" }, + { url = "https://files.pythonhosted.org/packages/80/a3/4183d541bc11a33ea8a7885e5a4ccf5f26b934251b63f7f223189d09cbe1/openvino-2026.4.0-22959-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:b1faae0787283f94fde354453246b8ca1126fa9d52ab9496dcc43a98925f03a4", size = 59176056, upload-time = "2026-09-16T14:55:23.197Z" }, + { url = "https://files.pythonhosted.org/packages/ab/83/f0ee3431b31f268057ffac0449014fbfd853afba040fe23aed6ddb3e721f/openvino-2026.4.0-22959-cp314-cp314t-manylinux_2_35_aarch64.whl", hash = "sha256:6b3e9a00c1b57222c976af12f53bee79c4df0367aff7843be4b7c12d6a002fa8", size = 27414169, upload-time = "2026-09-16T14:55:26.672Z" }, + { url = "https://files.pythonhosted.org/packages/2d/50/6eba8fac1ff4fdc05da1dbe2d61964220c9eeefecf385595b3e8bd5fe05b/openvino-2026.4.0-22959-cp314-cp314t-win_amd64.whl", hash = "sha256:8515a86ffe12b830733511d8b2848d1b7eb6a7c2bb0a69ac7e7aae518ddb2101", size = 84193984, upload-time = "2026-09-16T14:55:32.087Z" }, +] + +[[package]] +name = "openvino-telemetry" +version = "2025.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/8a/89d82f1a9d913fb266c2e6dc2f6030935db24b7152963a8db6c4f039787f/openvino_telemetry-2025.2.0.tar.gz", hash = "sha256:8bf8127218e51e99547bf38b8fb85a8b31c9bf96e6f3a82eb0b3b6a34155977c", size = 18894, upload-time = "2025-07-07T10:29:51.159Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ac/5ab0ca0aa269ad3c73f7bfc3801b10e5f56f75a31bf68c1ae8bd51cf70a4/openvino_telemetry-2025.2.0-py3-none-any.whl", hash = "sha256:bcb667e83a44f202ecf4cfa49281715c6d7e21499daec04ff853b7f964833599", size = 25227, upload-time = "2025-07-07T10:29:50.189Z" }, +] + [[package]] name = "packaging" version = "26.3" @@ -1513,6 +1555,7 @@ dependencies = [ [package.optional-dependencies] nvidia = [ { name = "onnxruntime-gpu" }, + { name = "openvino" }, { name = "tensorrt-cu13", marker = "sys_platform == 'linux'" }, { name = "tensorrt-cu13-bindings", marker = "sys_platform == 'linux'" }, { name = "tensorrt-cu13-libs", marker = "sys_platform == 'linux'" }, @@ -1523,6 +1566,9 @@ onnx-cpu = [ onnx-gpu = [ { name = "onnxruntime-gpu" }, ] +openvino = [ + { name = "openvino" }, +] tensorrt = [ { name = "tensorrt-cu13", marker = "sys_platform == 'linux' or (extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, { name = "tensorrt-cu13-bindings", marker = "sys_platform == 'linux' or (extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, @@ -1542,10 +1588,11 @@ requires-dist = [ { name = "onnx", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'onnx-cpu'", specifier = ">=1.22.0" }, { name = "onnxruntime-gpu", marker = "extra == 'onnx-gpu'", specifier = ">=1.22.0" }, + { name = "openvino", marker = "extra == 'openvino'", specifier = ">=2025.0" }, { name = "pillow" }, { name = "pycocotools", specifier = ">=2.0.8" }, { name = "requests" }, - { name = "single-artifact-benchmarking", extras = ["tensorrt", "onnx-gpu"], marker = "extra == 'nvidia'" }, + { name = "single-artifact-benchmarking", extras = ["tensorrt", "onnx-gpu", "openvino"], marker = "extra == 'nvidia'" }, { name = "supervision", specifier = ">=0.22.0" }, { name = "tensorrt-cu13", marker = "sys_platform == 'linux' and extra == 'tensorrt'", specifier = ">=10.13,<11", index = "https://pypi.nvidia.com/" }, { name = "tensorrt-cu13-bindings", marker = "sys_platform == 'linux' and extra == 'tensorrt'", specifier = ">=10.13,<11", index = "https://pypi.nvidia.com/" }, @@ -1554,7 +1601,7 @@ requires-dist = [ { name = "torchvision", specifier = ">=0.22.0" }, { name = "tqdm" }, ] -provides-extras = ["tensorrt", "onnx-cpu", "onnx-gpu", "nvidia"] +provides-extras = ["tensorrt", "onnx-cpu", "onnx-gpu", "openvino", "nvidia"] [package.metadata.requires-dev] dev = [{ name = "pytest", specifier = ">=8" }] @@ -1606,8 +1653,8 @@ name = "tensorrt-cu13" version = "10.16.1.11" source = { registry = "https://pypi.nvidia.com/" } dependencies = [ - { name = "tensorrt-cu13-bindings" }, - { name = "tensorrt-cu13-libs" }, + { name = "tensorrt-cu13-bindings", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, + { name = "tensorrt-cu13-libs", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'emscripten' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-nvidia' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu') or (sys_platform == 'win32' and extra == 'extra-28-single-artifact-benchmarking-onnx-cpu' and extra == 'extra-28-single-artifact-benchmarking-onnx-gpu')" }, ] sdist = { url = "https://pypi.nvidia.com/tensorrt-cu13/tensorrt_cu13-10.16.1.11.tar.gz", hash = "sha256:5d34203a92f38851b150c4eddd32b9b55c01fd40fc4d19bff83e8dfef1d8f69e" }