Skip to main content
Version: 0.9.x

Troubleshooting

When reporting a problem, always include:

  1. your OS and architecture
  2. your SDK language and version (Python version or C compiler)
  3. example files with which the problem can be reproduced
  4. a minimal reproduction script or project
  5. your hardware details
  6. your execution provider or export target
  7. the full initialization error or stack trace

Enable SDK logs​

import denkflow
denkflow.set_log_level("DEBUG")

Use TRACE only when you need maximum detail.

Enable ONNX runtime logs​

export DENKFLOW_ENABLE_ORT_LOGS=true

Common problems​

Provider not available​

Symptoms:

  • Initialization fails immediately
  • The expected execution provider is missing

Check:

  1. whether the correct denkflow[...] extra was installed
  2. whether the required system stack is installed, for example CUDA, TensorRT, or Intel drivers
  3. whether your Python environment can import onnxruntime
  4. whether ORT_DYLIB_PATH must be set manually
import onnxruntime as ort
print(ort.get_available_providers())

TensorRT is slow on first run​

This is expected. TensorRT builds an optimized engine on the first run of a new model. Persist the SDK data directory (by default $HOME/.config/denkflow on Linux, e.g. mount a host volume at /root/.config/denkflow in Docker) so later runs can reuse the cache.

Offline license stops working after container restart​

Usually one of these is missing:

  • persistent storage for the SDK data directory (default path on Linux as root: /root/.config/denkflow, or a host mount at whatever path DENKFLOW_DATA_DIRECTORY points to)
  • stable /etc/machine-id
  • reused container volume

OpenVINO runs on the wrong device​

Check the device_id mapping. See Runtime and Device Selection > Runtime specific notes.

OpenVINO fails with "Failed to load shared library"​

This error from ONNX Runtime usually means one of two things:

1. Provider shared libraries not found​

ONNX Runtime loads the OpenVINO execution provider via dlopen at runtime. On Linux, the directory containing libonnxruntime_providers_shared.so and libonnxruntime_providers_openvino.so must be discoverable by the dynamic linker.

For packaged releases where all .so files are in the same directory as the binary:

export LD_LIBRARY_PATH="$(dirname ./denkflow-ui):$LD_LIBRARY_PATH"

For development builds with cargo run:

export LD_LIBRARY_PATH="$(pwd)/target/release:$LD_LIBRARY_PATH"
cargo run --release -p denkflow-ui --features camera

On Windows this is not needed because DLLs next to the .exe are found automatically.

2. OpenVINO GPU plugin cannot find the OpenCL runtime​

When using OpenVINO with an Intel GPU (device_id >= 0), the OpenVINO GPU plugin requires:

  • libOpenCL.so.1 — the OpenCL ICD loader
  • Intel compute-runtime — the Intel GPU OpenCL driver, registered via an ICD file

On Ubuntu / Debian:

sudo apt install ocl-icd-libopencl1 intel-opencl-icd

On Fedora / RHEL:

sudo dnf install ocl-icd intel-opencl

On NixOS, these are available but not always on the default library path. Set the environment manually:

# Point to the OpenCL ICD loader
export LD_LIBRARY_PATH="/path/to/ocl-icd/lib:$LD_LIBRARY_PATH"

# Tell the ICD loader where to find the Intel GPU driver
export OCL_ICD_VENDORS=/path/to/intel-compute-runtime/etc/OpenCL/vendors

On Windows, the Intel GPU driver installation includes OpenCL support — no extra steps are needed.

To verify OpenCL device visibility:

# Install clinfo if needed, then:
clinfo -l

If no Intel GPU appears, the compute-runtime driver is missing or OCL_ICD_VENDORS is not set correctly.

DirectML QDQ or Intel export does not behave like FP32​

That is expected. Intel export targets (INTEL_CPU, INTEL_GPU, INTEL_NPU) and DirectML QDQ exports include INT8 quantization by design. The SDK does not convert FP32 to QDQ locally during inference.

Import fails because ONNX runtime library cannot be found​

Set ORT_DYLIB_PATH manually to the ONNX Runtime shared library path. Then retry the import.

Benchmark numbers look worse than expected​

Common reasons:

  • measuring the first TensorRT run instead of steady state
  • not pinning the deployment to the actual target hardware
  • missing GPU driver or runtime dependency, causing CPU fallback
  • not using the export target intended for that hardware