莫名其妙有一个卡在作sim_device的时候,viewer窗口弹出来几秒就会闪退掉,而且画面也不太正常。之前重装完显卡驱动发现的。

isaac gym里有一条warning:

WARNING: lavapipe is not a conformant vulkan implementation, testing use only.

于是检查了一下vulkan,

$ vulkaninfo | grep "GPU id"
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: 'layers' tag not supported until file version 1.0.1, but /etc/vulkan/implicit_layer.d/nvidia_layers.json is reporting version 
'DISPLAY' environment variable not set... skipping surface info
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
                GPU id  : 0 (NVIDIA GeForce RTX 4090)
                GPU id  : 1 (llvmpipe (LLVM 12.0.0, 256 bits))
                GPU id  : 2 (NVIDIA GeForce RTX 4090)
                GPU id  : 3 (NVIDIA GeForce RTX 4090)
                GPU id  : 4 (NVIDIA GeForce RTX 4090)
$ vulkaninfo | grep "deviceName"

WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: 'layers' tag not supported until file version 1.0.1, but /etc/vulkan/implicit_layer.d/nvidia_layers.json is reporting version 
'DISPLAY' environment variable not set... skipping surface info
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = llvmpipe (LLVM 12.0.0, 256 bits)
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = NVIDIA GeForce RTX 4090

看到cpu id1对应了llvmpipe,GPU id 1 错误地对应到 llvmpipe (CPU 软件渲染),导致可视化失败。需要让 Vulkan 只看到 NVIDIA GPU。

通常的Vulkan ICD文件在/usr/share/vulkan/icd.d/里,可能包含了:

nvidia_icd.json
lvp_icd.x86_64.json

用于告诉vulkan加载器如何加载vulkan实现库,但是我的这个目录里并没有,鉴于我有另外三张卡是正常的,于是check了一下其他三个卡是从哪load的:(于是开始人口大普查x)

cat /etc/vulkan/icd.d/*.json
cat /usr/share/vulkan/icd.d/*.json
cat /usr/local/share/vulkan/icd.d/*.json

发现了:

$ cat /etc/vulkan/icd.d/*.json
cat /usr/share/vulkan/icd.d/*.json
cat /usr/local/share/vulkan/icd.d/*.json

{
    "file_format_version" : "1.0.1",
    "ICD": {
        "library_path": "libGLX_nvidia.so.0",
        "api_version" : "1.4.303"
    }
}
{
    "ICD": {
        "api_version": "1.2.182",
        "library_path": "/usr/lib/x86_64-linux-gnu/libvulkan_intel.so"
    },
    "file_format_version": "1.0.0"
}{
    "ICD": {
        "api_version": "1.1.182",
        "library_path": "/usr/lib/x86_64-linux-gnu/libvulkan_lvp.so"
    },
    "file_format_version": "1.0.0"
}{
    "ICD": {
        "api_version": "1.2.182",
        "library_path": "/usr/lib/x86_64-linux-gnu/libvulkan_radeon.so"
    },
    "file_format_version": "1.0.0"
}cat: '/usr/local/share/vulkan/icd.d/*.json': No such file or directory

我的VULKAN ICD在/etc/vulkan/icd.d/*.json里,于是

export VK_ICD_FILENAMES=/etc/vulkan/icd.d/nvidia_icd.json

于是正常!

$ vulkaninfo | grep "deviceName"

WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: 'layers' tag not supported until file version 1.0.1, but /etc/vulkan/implicit_layer.d/nvidia_layers.json is reporting version 
'DISPLAY' environment variable not set... skipping surface info
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = NVIDIA GeForce RTX 4090
        deviceName     = NVIDIA GeForce RTX 4090
$ vulkaninfo | grep "GPU id"                               
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: 'layers' tag not supported until file version 1.0.1, but /etc/vulkan/implicit_layer.d/nvidia_layers.json is reporting version 
'DISPLAY' environment variable not set... skipping surface info
                GPU id  : 0 (NVIDIA GeForce RTX 4090)
                GPU id  : 1 (NVIDIA GeForce RTX 4090)
                GPU id  : 2 (NVIDIA GeForce RTX 4090)
                GPU id  : 3 (NVIDIA GeForce RTX 4090)
                GPU id  : 0 (NVIDIA GeForce RTX 4090)

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐