Troubleshooting
When reporting a problem, always include:
- your OS and architecture
- your SDK language and version (Python version or C compiler)
- example files with which the problem can be reproduced
- a minimal reproduction script or project
- your hardware details
- your execution provider or export target
- the full initialization error or stack trace
Enable SDK logs
- Python
- C / C++
import denkflow
denkflow.set_log_level("DEBUG")
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
- Python
- C / C++
Check:
- whether the correct
denkflow[...]extra was installed - whether the required system stack is installed, for example CUDA, TensorRT, or Intel drivers
- whether your Python environment can import
onnxruntime - whether
ORT_DYLIB_PATHmust be set manually
import onnxruntime as ort
print(ort.get_available_providers())
Check:
- whether
libdenkflow.soordenkflow.dllis on the library search path - whether all ONNX Runtime and accelerator-specific shared libraries are loadable
- whether
ORT_DYLIB_PATHmust be set manually
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 pathDENKFLOW_DATA_DIRECTORYpoints 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