Add: test code for CoreMLExecutionProvider on a trial basis

Currently ONNXRuntime's CoreML support is not very good, and on my environment, I get errors like “coreml_execution_provider.cc:192 operator() Input (/sdp/flows.3/GatherND_2_output_0) has a dynamic shape ({-1,-1}) but the runtime shape ({0,10}) has zero elements. This is not supported by the CoreML EP.” and inference fails.
I hope this will be fixed in a future version of ONNXRuntime, and leave the test code as it is.
This commit is contained in:
tsukumi
2024-09-23 21:07:27 +09:00
parent b67e50fd8d
commit d935d30e4c
4 changed files with 17 additions and 2 deletions

2
.gitignore vendored
View File

@@ -5,6 +5,8 @@ dist/
.coverage*
.ipynb_checkpoints/
.ruff_cache/
.DS_Store
._*
/*.yml
!/default_config.yml

View File

@@ -109,6 +109,8 @@ test = "pytest -s tests/test_main.py::test_synthesize_onnx_cpu"
test-cuda = "pytest -s tests/test_main.py::test_synthesize_onnx_cuda"
# Usage: `hatch run test-onnx:test-directml`
test-directml = "pytest -s tests/test_main.py::test_synthesize_onnx_directml"
# Usage: `hatch run test-onnx:test-coreml`
test-coreml = "pytest -s tests/test_main.py::test_synthesize_onnx_coreml"
# Usage: `hatch run test-onnx:coverage`
test-cov = "coverage run -m pytest -s tests/test_main.py::test_synthesize_onnx_cpu"
# Usage: `hatch run test-onnx:cov-report`

View File

@@ -5,10 +5,12 @@ def torch_device_to_onnx_providers(
device: str,
) -> Sequence[Union[str, tuple[str, dict[str, Any]]]]:
if device.startswith("cuda"):
return [
# cudnn_conv_algo_search を DEFAULT にすると推論速度が大幅に向上する
# ref: https://medium.com/neuml/debug-onnx-gpu-performance-c9290fe07459
return [
("CUDAExecutionProvider", {"cudnn_conv_algo_search": "DEFAULT"}),
# CUDA が利用できない場合、可能であれば DirectML を利用する
("DmlExecutionProvider", {"device_id": 0}),
("CPUExecutionProvider", {}),
]
else:

View File

@@ -125,3 +125,12 @@ def test_synthesize_onnx_directml():
("DmlExecutionProvider", {"device_id": 0}),
],
)
def test_synthesize_onnx_coreml():
synthesize(
inference_type="onnx",
onnx_providers=[
("CoreMLExecutionProvider", {}),
],
)