Issue with tensorrt:r8.2.1 l4t container, Import error libnvmedia.so: cannot open shared object file:

HI, After i ran docker L4t-tensorrt:r8.2.1-runtime & then tried importing tensorrt , Getting this error :

Python 3.8.0 (default, Dec  9 2021, 17:53:27) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorrt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/tensorrt/__init__.py", line 67, in <module>
    from .tensorrt import *
ImportError: libnvmedia.so: cannot open shared object file: No such file or directory

Hi @gshiva5, did you start the container with --runtime nvidia ?

libnvmedia.so should automatically get mounted into the container from the device when --runtime nvidia is used.

docker default runtime is nvidia. So i didn’t mentioned it in the command.

Same error even with runtime sent to nvidia

root@core-io:/data/home/spot/Desktop# docker run -it --runtime nvidia --network host nvcr.io/nvidia/l4t-tensorrt:r8.2.1-runtime bash
root@core-io:/# python3
Python 3.8.0 (default, Dec  9 2021, 17:53:27) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorrt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/tensorrt/__init__.py", line 67, in <module>
    from .tensorrt import *
ImportError: libnvmedia.so: cannot open shared object file: No such file or directory
>>> 

Can you confirm that libnvmedia exists on both your device (outside container) and inside the container, and has valid size?

ls -ll /usr/lib/aarch64-linux-gnu/tegra/libnvmedia*
-rw-r--r-- 1 root root 125296 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_2d.so
-rw-r--r-- 1 root root  47192 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia2d.so
-rw-r--r-- 1 root root  72152 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_dla.so
-rw-r--r-- 1 root root  30904 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ide_parser.so
-rw-r--r-- 1 root root  47464 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ide_sci.so
-rw-r--r-- 1 root root  51576 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_iep_sci.so
-rw-r--r-- 1 root root  39296 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ijpd_sci.so
-rw-r--r-- 1 root root  39296 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ijpe_sci.so
-rw-r--r-- 1 root root  43424 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_iofa_sci.so
-rw-r--r-- 1 root root 125424 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_isp_ext.so
-rw-r--r-- 1 root root  55416 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedialdc.so
-rw-r--r-- 1 root root  43320 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_sci_overlay.so
-rw-r--r-- 1 root root 425840 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia.so
-rw-r--r-- 1 root root  68016 Jul  8 21:10 /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_tensor.so

And can you check that it’s in /etc/nvidia-container-runtime/host-files-for-container.d/l4t.csv ?

cat /etc/nvidia-container-runtime/host-files-for-container.d/l4t.csv | grep libnvmedia*
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_2d.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia2d.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_dla.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ide_parser.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ide_sci.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_iep_sci.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ijpd_sci.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_ijpe_sci.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_iofa_sci.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_isp_ext.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedialdc.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_sci_overlay.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia.so
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia_tensor.so

Just realized that you are on TX1 - if you have JetPack 4.6, then you can use nvcr.io/nvidia/l4t-tensorrt:r8.0.1-runtime

Otherwise, the newer l4t-tensorrt containers are for JetPack 5.x. But on JetPack 4.x, you can just use l4t-base and that will already include TensorRT (as long as --runtime nvidia is used)

ls -ll /usr/lib/aarch64-linux-gnu/tegra/libnvmedia*

The above one returned as no such file or directory in both container & host system.

cat /etc/nvidia-container-runtime/host-files-for-container.d/l4t.csv | grep libnvmedia*

this resulted in this :

root@core-io:/etc# cat /etc/nvidia-container-runtime/host-files-for-container.d/l4t.csv | grep libnvmedia*
lib, /usr/lib/aarch64-linux-gnu/tegra/libnvmedia.so
root@core-io:/etc# 

Just checked , l4t-base:r32.7.1 doesn’t have tensorrt installed. When importing the module it says

ImportError: No module named tensorrt

Fixed the issue : Installed nvidia-l4t-core nvidia-l4t-multimedia packages on the host system & then ran tensorrt on the docker & it worked.
@dusty_nv : thanks for the Help…

OK yes, on JetPack 4.x you need the CUDA/cuDNN/TensorRT packages to be installed on the host in order for them to get automatically mounted into the container. On JetPack 5.x, CUDA/cuDNN/TensorRT are installed inside the containers themselves. Regardless, glad that you got it working!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.