上一篇文章提到如何在笔记本电脑的Ubuntu 20.04上使用eGPU,但是反复实验后,发现了一点小问题,就是当eGPU拔掉后启动电脑,就没办法正常加载GPU了,后来找到了更简单的解决办法。
首先删除xorg.conf文件,然后在/usr/share/X11/xorg.conf.d目录下添加11-nvidia.conf文件,文件内容如下:

Section "OutputClass"
    Identifier "nvidia-egpu"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowExternalGpus" "True"
    Option "AllowEmptyInitialConfiguration"
    ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection

通过这一个文件,就可以成功使用eGPU,当然在系统启动时必须保证eGPU已经连接,不然就无法识别。
不过还有一步,使用xrandr来设置输出顺序,xandr --outputxxxx NVIDIA-G0 NVIDIA-0,然后运行指令xrandr --auto,就可以完成基本配置
不过这样还是无法解决去掉eGPU后系统启动的问题,不过这个可以通过systemd服务来自动解决问题。
首先在/etc/systemd/system下添加egpu.service

[Unit]
Description=Detect eGPU

[Service]
ExecStart=/usr/local/bin/egpu

[Install]
WantedBy=multi-user.target

然后添加/usr/local/bin/egpu

#!/bin/sh

DIR=/usr/share/X11/xorg.conf.d
FILE=11-nvidia.conf

TEST=$(lspci | grep -c "VGA")

# check gpu number
if ([ $TEST -eq 3 ]); then
  # egpu connected
  if ([ -e $DIR/$FILE ]); then
    break;
  else
    cp $DIR/disabled/$FILE $DIR/$FILE
  fi
else
  # no egpu
  if ([ -e $DIR/$FILE ]); then
    rm $DIR/$FILE
  fi
fi

其中由于加上eGPU我的笔记本电脑会显示3个显卡设备,因此通过这个数量来判断是否有eGPU。
然后通过命令sudo systemctl enable egpu启动服务,这样子就可以完成自动的显卡加载配置文件切换。
通过上述配置,就可以使用eGPU来运行Isaac Gym的例子了。
Screenshot from 2022-09-26 19-59-57
通过nvidia-smi查看显卡使用情况,通过内存使用情况可以判断,这个仿真是在eGPU上运行的。
Screenshot from 2022-09-26 20-00-26
PS:thinkpad的bios循环启动的问题实在是解决不了了,只能是依靠手速,在启动进入grub界面时插入egpu,这样才可以识别。