Пример #1
0
def _test_model(
    model_path: str,
    input_paths: str,
    output_paths: str,
    runner_constructor: Callable[[Any], ModelRunner],
    rtol: float = 1e-5,
    atol: float = 1e-8,
):
    model = load_model(model_path)

    dataloader = DataLoader(input_paths, output_paths, 2, 0)
    model_runner = runner_constructor(model, batch_size=2)
    outputs, _ = model_runner.run(dataloader)
    _test_output(outputs, dataloader, batch_size=2)

    dataloader = DataLoader(input_paths, output_paths, 1, 0)
    model_runner = runner_constructor(
        model,
        batch_size=1,
    )

    outputs, _ = model_runner.run(dataloader, max_steps=1)
    assert len(outputs) == 1

    outputs, _ = model_runner.run(dataloader)
    _test_output(outputs, dataloader)
Пример #2
0
def test_nm_analyze_model_runner(
    onnx_models_with_data: OnnxModelDataFixture, ):
    model = load_model(onnx_models_with_data.model_path)

    # Sanity check, asserting model can run random input
    dataloader = DataLoader.from_model_random(model, 5, 0, 10)
    model_runner = DeepSparseAnalyzeModelRunner(model, batch_size=5)
    outputs, _ = model_runner.run(dataloader, max_steps=5)
    fields = [
        "num_threads", "num_sockets", "average_total_time", "iteration_times"
    ]
    layer_fields = [
        "name",
        "canonical_name",
        "input_dims",
        "output_dims",
        "strides",
        "required_flops",
        "kernel_sparsity",
        "activation_sparsity",
        "average_run_time_in_ms",
        "average_utilization",
        "average_teraflops_per_second",
    ]
    for out in outputs:
        for field in fields:
            assert field in out
        for layer_info in out["layer_info"]:
            for field in layer_fields:
                assert field in layer_info
def _create_sensitivity_ks_data(
    model_path: str,
    input_paths: str,
    output_paths: str,
    loss_approx_path: str,
    loss_one_shot_path: str,
    perf_path: str,
    sparsity_levels: Union[List[float], None],
):
    dataloader = DataLoader(input_paths, output_paths, 1)
    analysis = pruning_loss_sens_magnitude(model_path)
    analysis.save_json(loss_approx_path)

    analysis = pruning_loss_sens_one_shot(
        model_path,
        dataloader,
        1,
        1,
        show_progress=False,
        sparsity_levels=sparsity_levels,
    )
    analysis.save_json(loss_one_shot_path)

    if deepsparse is not None:
        analysis = pruning_perf_sens_one_shot(
            model_path,
            dataloader,
            1,
            None,
            iterations_per_check=10,
            warmup_iterations_per_check=5,
            sparsity_levels=sparsity_levels,
            show_progress=False,
        )
        analysis.save_json(perf_path)
def test_one_shot_ks_perf_sensitivity(
    onnx_models_with_analysis: OnnxModelAnalysisFixture, ):
    expected_analysis = PruningLossSensitivityAnalysis.load_json(
        onnx_models_with_analysis.perf_path)

    dataloader = DataLoader(onnx_models_with_analysis.input_paths,
                            onnx_models_with_analysis.output_paths, 1)

    analysis = pruning_perf_sens_one_shot(
        onnx_models_with_analysis.model_path,
        dataloader,
        1,
        None,
        iterations_per_check=10,
        warmup_iterations_per_check=3,
        sparsity_levels=onnx_models_with_analysis.sparsity_levels,
        show_progress=False,
    )

    expected_layers = sorted(expected_analysis.dict()["results"],
                             key=lambda x: x["index"])

    actual_layers = sorted(
        analysis.dict()["results"],
        key=lambda x: x["index"],
    )

    _test_analysis_comparison(expected_layers, actual_layers)