From f5b207904c7632dc0219f238461d6393f50b498b Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 27 Sep 2025 06:39:42 -0600 Subject: [PATCH] Get basic detection working --- docker/rocm/Dockerfile | 6 +++- docker/rocm/requirements-wheels-rocm.txt | 2 +- docker/rocm/rocm.hcl | 2 +- frigate/detectors/detection_runners.py | 4 ++- frigate/util/model.py | 35 ++++++++++++++++++++++-- 5 files changed, 42 insertions(+), 7 deletions(-) diff --git a/docker/rocm/Dockerfile b/docker/rocm/Dockerfile index b19e4dad9..c53505a50 100644 --- a/docker/rocm/Dockerfile +++ b/docker/rocm/Dockerfile @@ -22,7 +22,7 @@ RUN apt update -qq && \ RUN mkdir -p /opt/rocm-dist/opt/rocm-$ROCM/lib RUN cd /opt/rocm-$ROCM/lib && \ - cp -dpr libMIOpen*.so* libamd*.so* libhip*.so* libhsa*.so* libmigraphx*.so* librocm*.so* librocblas*.so* libroctracer*.so* librocsolver*.so* librocfft*.so* librocprofiler*.so* libroctx*.so* /opt/rocm-dist/opt/rocm-$ROCM/lib/ && \ + cp -dpr libMIOpen*.so* libamd*.so* libhip*.so* libhsa*.so* libmigraphx*.so* librocm*.so* librocblas*.so* libroctracer*.so* librocsolver*.so* librocfft*.so* librocprofiler*.so* libroctx*.so* librocroller.so* /opt/rocm-dist/opt/rocm-$ROCM/lib/ && \ mkdir -p /opt/rocm-dist/opt/rocm-$ROCM/lib/migraphx/lib && \ cp -dpr migraphx/lib/* /opt/rocm-dist/opt/rocm-$ROCM/lib/migraphx/lib RUN cd /opt/rocm-dist/opt/ && ln -s rocm-$ROCM rocm @@ -64,6 +64,10 @@ COPY --from=rocm /opt/rocm-dist/ / ####################################################################### FROM deps-prelim AS rocm-prelim-hsa-override0 +ENV MIGRAPHX_DISABLE_MIOPEN_FUSION=1 +ENV MIGRAPHX_DISABLE_SCHEDULE_PASS=1 +ENV MIGRAPHX_DISABLE_REDUCE_FUSION=1 +ENV MIGRAPHX_ENABLE_HIPRTC_WORKAROUNDS=1 COPY --from=rocm-dist / / diff --git a/docker/rocm/requirements-wheels-rocm.txt b/docker/rocm/requirements-wheels-rocm.txt index c97092649..611dc27cc 100644 --- a/docker/rocm/requirements-wheels-rocm.txt +++ b/docker/rocm/requirements-wheels-rocm.txt @@ -1 +1 @@ -onnxruntime-rocm @ https://github.com/NickM-27/frigate-onnxruntime-rocm/releases/download/v7.0.1/onnxruntime_migraphx-1.23.0-cp311-cp311-linux_x86_64.whl \ No newline at end of file +onnxruntime-migraphx @ https://github.com/NickM-27/frigate-onnxruntime-rocm/releases/download/v7.0.1/onnxruntime_migraphx-1.23.0-cp311-cp311-linux_x86_64.whl \ No newline at end of file diff --git a/docker/rocm/rocm.hcl b/docker/rocm/rocm.hcl index 0745a9f3d..6d2e6610b 100644 --- a/docker/rocm/rocm.hcl +++ b/docker/rocm/rocm.hcl @@ -2,7 +2,7 @@ variable "AMDGPU" { default = "gfx900" } variable "ROCM" { - default = "6.4.1" + default = "7.0.0" } variable "HSA_OVERRIDE_GFX_VERSION" { default = "" diff --git a/frigate/detectors/detection_runners.py b/frigate/detectors/detection_runners.py index 19c91e487..b0f43708d 100644 --- a/frigate/detectors/detection_runners.py +++ b/frigate/detectors/detection_runners.py @@ -415,7 +415,9 @@ def get_optimized_runner( if rknn_path: return RKNNModelRunner(rknn_path) - providers, options = get_ort_providers(device == "CPU", device, **kwargs) + providers, options = get_ort_providers( + device == "CPU", device, model_path=model_path, **kwargs + ) if providers[0] == "CPUExecutionProvider": # In the default image, ONNXRuntime is used so we will only get CPUExecutionProvider diff --git a/frigate/util/model.py b/frigate/util/model.py index 55b33d8e8..7dd4351f5 100644 --- a/frigate/util/model.py +++ b/frigate/util/model.py @@ -284,7 +284,10 @@ def post_process_yolox( def get_ort_providers( - force_cpu: bool = False, device: str | None = "AUTO", requires_fp16: bool = False + force_cpu: bool = False, + device: str | None = "AUTO", + requires_fp16: bool = False, + model_path: str | None = None, ) -> tuple[list[str], list[dict[str, Any]]]: if force_cpu: return ( @@ -351,8 +354,34 @@ def get_ort_providers( } ) elif provider == "MIGraphXExecutionProvider": - providers.append(provider) - options.append({}) + # Create MIGraphX cache directory + migraphx_cache_dir = os.path.join(MODEL_CACHE_DIR, "migraphx") + os.makedirs(migraphx_cache_dir, exist_ok=True) + + if model_path: + model_filename = os.path.basename(model_path) + model_name = os.path.splitext(model_filename)[0] # Remove extension + compiled_model_path = os.path.join( + migraphx_cache_dir, f"{model_name}.mxr" + ) + + if os.path.exists(compiled_model_path): + providers.append(provider) + options.append( + { + "migraphx_fp16_enable": 0, + } + ) + else: + providers.append(provider) + options.append( + { + "migraphx_fp16_enable": 0, + } + ) + else: + providers.append(provider) + options.append({}) elif provider == "CPUExecutionProvider": providers.append(provider) options.append(