将Carla和代码全部部署到云服务器上,实现carla在服务器上运行。
一、为什么要这样做?
这样做的目的是能够让Carla在服务器上跑,主要的解决问题如下:
1.1 多台机器同时运行
Carla由于是以客户端的形式将数据与代码进行交互,如果想实现多个Carla窗口的启动,通常在启动Carla的时候要设置不同的端口来实现不同的Client连接。以上的操作要求电脑主机的配置需要非常高,且每个任务需要平衡性能分配,避免占用爆表导致程序中断。
但是通常往往一个任务就已经占据了电脑的大部分性能,导致无法实现多开。而通过租赁服务器,可以将Carla和代码全部上传到服务主机当中,实现每台云服务模拟一个主机,这样想开多少客户端就开多少客户端。
1.2 弥补硬件不足
使用Carla并进行相关的场景设置或者任务训练需要一个相当庞大的硬件支持,由于目前绝大多数科研工作者使用的是笔记本电脑或者性能不高的台式机,就会导致注入环境过慢或训练速度过慢等问题。而试想,如果把所有的代码都传到一个高性能的主机上面,这样不就可以轻松弥补了么?当我需要的时候我就上传到服务器上运行,不需要的时候就不运行,确实很方便。
1.3 个人主机可以开展其他工作
由于我是搞深度强化学习的,在我的代码训练过程中,基本上是会把个人电脑的性能拉满。但这就会导致我无法正常使用我的个人电脑,如果我开了一个其他软件(需要硬件加速)或者看视频、编译东西等等,就会有可能导致代码中断。因为内存或者显卡的显存被利用到了很高的程度,当其他程序或软件的加入,就会超出电脑的内存,同样显存也是,如果出现了这些问题可能就会使程序中断。
如果将所有代码上传到服务器上运行,这样的问题就不会出现,而且也不会耽误我们正常使用个人主机去办公等一系列操作,这也很方便。
以上只是我个人为什么要使用服务器进行运行的原因,但是想必你也肯定会遇到其他问题从而选择使用服务器运行程序,如果赞同的话,那就可以继续往下看,反之则可以关闭该帖子了。
二、选择云服务器类型是关键
注意,不是市面上所有的AI服务器算力租赁商都支持Carla运行的。因为Carla需要先启动客户端引擎后,才能将代码注入进去并执行相关的命令,虽然Carla官方也给出了docker无显示模式的启动方法,但我没有进行相关的尝试,所以这里就不讨论docker的方法。
图形化界面是你所租赁的服务器主机必须要有的,再次跟大家重复一下,如果没有该功能就会导致无法启动Carla。不管您是使用Ubuntu还是Win也好,虚拟机还是物理机也好,只要它能实现图形化界面(你可以不用图形化界面,但是它不能没有),这条路就走的通。
这里要说一下,如果云服务器是虚拟机的话,需要更改虚拟显示模式和视频缓冲区大小,视频缓冲区的大小会影响相关的执行性能。而物理机因为自带有显示器(只要能让显卡正常工作)就不需要虚拟机的操作。
以下是常出现的问题:
问题1:world.tick() 连接超时:如果第一次与Carla客户端能够连接上,后面注入程序时,遇到频繁的world.tick()连接超时,这意味着虚拟显示模式是有问题的,需要更改。将虚拟显示模式更改为virtio,具体如何更改请参考这里。
问题2:opengl4.3不支持:需要更换显卡驱动,显卡驱动不支持。
问题3:Segmentation fault (core dumped):系统的显卡驱动问题,没有安装成功或者驱动掉了。
问题4:libGL error: failed to load driver: swrast:请看三、下载MobaXterm软件章节的介绍。
这里我推荐的两种方式是:
1、租赁物理机,途径渠道可以是某宝、某鱼。
2、通过智星云AI服务器租赁商(它家我实现了该功能,如果你发现了其他租赁商业能实现,也可以),但对于以docker容器为实例的云服务器,只能以VScode通过SSH形式连接无图形化界面的服务器是不能实现的,这里要切记,划重点。
三、下载MobaXterm软件
如果您是使用Ubuntu系统,程序中用到了相关的渲染,如pygame,您如果想直接在服务器上显示的话,还需要安装相关渲染的环境。否则就会报错:
libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request:152(GLX) Minor opcode of failed request:3(X LXCreatecontext) Value in failed request:x Serial number of failed request: 167 Current serial number in output stream:168
但还有另外一种方法,不使用VNC连接,选择以SSH连接,还需要通过MobaXterm软件,它可以将pygame通过SSH直接显示在你的本机电脑上,神奇吧!!!这样你就不需要在服务器上安装pygame的渲染编译环境,而且还不会报错。
效果如下: (pygame的黑点问题我怀疑是由于网络传输的问题,但我没做查验,这里大家自行斟酌)
四、脚本部署
在这里首先要感谢智星云的大佬-追风,他给予了相关的技术支持,并贴心的写了一个自动化的ubuntu部署脚本(包括更改显卡驱动,调整视频缓冲区等等)。
该脚本是以ubuntu 20.04.4LTS为版本编写的,至于其他版本的ubuntu是否支持,大家需要自行测试。
脚本下载地址请点这里。
下载后用unzip命令解压,然后执行该脚本即可。
五、最后
如果大家想关闭本机的命令窗口,可以通过nohup实现后台运行,大家可以自行了解该命令的功能,这里就不再赘述。
欢迎大家在评论区里积极的讨论和交流,有不对的地方恳请大家批评指正,我会及时的更改。