DeepStream Container on Windows11 with WSL

• Hardware Platform → GeForce RTX 3060
• DeepStream Container
• NVIDIA GPU Driver Version -->510.06

I was experimenting to run DeepStream container from NGC to run on Windows 11 with WSL. I was successful in the installation and loading of the drivers. But the DeepStream nvinfer plugin is not able to find cuGraphicsEGLRegisterImage which should have been defined in libcuda.so.1. Any solution or fix that can be expected in future releases ?

(gst-plugin-scanner:12): GStreamer-WARNING **: 17:45:15.827: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_infer.so': /usr/lib/x86_64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_infer.so: undefined symbol: cuGraphicsEGLRegisterImage

I’m on the same path of pain and was writing up nearly the same exact question today. I think the WSL provided cuda lib is indeed lacking that symbol,

root@df73c39e9cb5:/opt/nvidia/deepstream/deepstream-5.1$ nm -gD /usr/lib/x86_64-linux-gnu/libcuda.so.1 | grep cuGraphicsEGLRegisterImage
root@df73c39e9cb5:/opt/nvidia/deepstream/deepstream-5.1$ nm -gD /usr/lib/x86_64-linux-gnu/libcuda.so.1 | grep cuGraphics
000000000001c58d T cuGraphicsGLRegisterBuffer
000000000001c593 T cuGraphicsGLRegisterImage
000000000001c575 T cuGraphicsMapResources
000000000001c57b T cuGraphicsMapResources_ptsz
000000000001c557 T cuGraphicsResourceGetMappedMipmappedArray
000000000001c55d T cuGraphicsResourceGetMappedPointer
000000000001c563 T cuGraphicsResourceGetMappedPointer_v2
000000000001c569 T cuGraphicsResourceSetMapFlags
000000000001c56f T cuGraphicsResourceSetMapFlags_v2
000000000001c551 T cuGraphicsSubResourceGetMappedArray
000000000001c581 T cuGraphicsUnmapResources
000000000001c587 T cuGraphicsUnmapResources_ptsz
000000000001c54b T cuGraphicsUnregisterResource
000000000001c545 T cuGraphicsVDPAURegisterOutputSurface
000000000001c53f T cuGraphicsVDPAURegisterVideoSurface

Looks like only the GL graphics symbols are available, not EGL. I suppose with more time and effort you might be able to modify and recompile the nvinfer plugin to not use EGL? I don’t even know how possible that is yet.

I don’t know if you need the latest version, but I can at least get gst-inspect-1.0 nvinfer to work on the older Deepstream container version, 5.0.1-20.09-devel

Thanks @3martini !

Hi @3martini , @gnyanateja
Could you check if libcuda.so includes cudaGraphicsEGLRegisterImage ?
We didn’t verify DS on WSL, and AFAIK, few users are using WSL, could you help us understand why can’t use Linux and WLS is necessary?

Thanks!

No cudaGraphicsEGLRegisterImage symbol exists in libcuda.so.

Thanks for asking about the use case. For me, my company is very small, remote only, and we do development for both Windows and Linux. Using a powerful Windows laptop like the Alienware Area51m R2 with an RTX2080 almost covers every use case in our development plan… except for Deepstream so far.

The development experience with Windows + WSL2 Ubuntu and VsCode is very efficient and slick, I’ve been able to jump from Windows development, to Linux, to containerized Linux very smoothly. We plan to create our own Deepstream based application and it would be really awesome if we didn’t have to resort to dual boot (clunky, not supported by laptop manufacturer, and tricky since we have a Intel RAID array on the laptops), or having to set up Linux Workstations (discrete GPU supply shortage), or Linux Laptops (short supply, rare).

Of course, it’s entirely possible that Nvidia Optimus gets in the way (always seems to!) and causes issues with the Integrated/Discrete switching on these laptops. Basically, I’m pushing to see how far I can practically take single machine development before I have to throw in more complexity.

Thanks for sharing!

Will discuss this option internally.

1 Like