当包含不兼容的 nvml 库时,nvidia-smi 失败
nvidia-smi fails when an incompatible nvml library included
意外地将不兼容的 nvml
库添加到 linux 环境中的库路径。在该设置中,当我尝试查询 nvidia-smi
时,它给出了以下错误
Failed to initialize NVML: Driver/library version mismatch
当我从库路径中删除那个不兼容的库并再次查询 nvidia-smi
时,查询运行成功并且输出按预期显示。
然而,当我通过为 nvidia-smi
输入 ldd
来查看依赖库时,它并没有显示进程依赖于 nvml
库。
$>ldd /usr/bin/nvidia-smi
linux-vdso.so.1 => (0x00007fffa84db000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f58ba044000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f58b9e3f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f58b9a7e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f58b9876000)
/lib64/ld-linux-x86-64.so.2 (0x00007f58ba27d000)
如果不依赖nvml
库,为什么在有不兼容的nvml
库时会报错?
ldd
提供应用程序对库的依赖项列表,这些库动态 linked 到应用程序。
推测此应用程序使用了(共享)库的 runtime loading(例如,strace nvidia-smi 2>&1 |grep ml
)
在运行时加载库时,没有必要显式 link 应用程序针对库,并且库不会在 ldd
输出中显示为依赖项(如果它是未在应用程序构建时明确 linked)。
意外地将不兼容的 nvml
库添加到 linux 环境中的库路径。在该设置中,当我尝试查询 nvidia-smi
时,它给出了以下错误
Failed to initialize NVML: Driver/library version mismatch
当我从库路径中删除那个不兼容的库并再次查询 nvidia-smi
时,查询运行成功并且输出按预期显示。
然而,当我通过为 nvidia-smi
输入 ldd
来查看依赖库时,它并没有显示进程依赖于 nvml
库。
$>ldd /usr/bin/nvidia-smi
linux-vdso.so.1 => (0x00007fffa84db000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f58ba044000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f58b9e3f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f58b9a7e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f58b9876000)
/lib64/ld-linux-x86-64.so.2 (0x00007f58ba27d000)
如果不依赖nvml
库,为什么在有不兼容的nvml
库时会报错?
ldd
提供应用程序对库的依赖项列表,这些库动态 linked 到应用程序。
推测此应用程序使用了(共享)库的 runtime loading(例如,strace nvidia-smi 2>&1 |grep ml
)
在运行时加载库时,没有必要显式 link 应用程序针对库,并且库不会在 ldd
输出中显示为依赖项(如果它是未在应用程序构建时明确 linked)。