快回来,组里发显卡了

目录

可以用组里的显卡采数据了!怕自己忘了怎么弄,在这里记录一下。

Carla transfuser 数据采集

transfuser 的数据采集脚本在 leaderboard/scripts/datagen.sh,readme原文如下:

Data generation

In addition to the dataset itself, we have provided the scripts for data generation with our autopilot agent. To generate data, the first step is to launch a CARLA server:

./CarlaUE4.sh --world-port=2000 -opengl

For more information on running CARLA servers (e.g. on a machine without a display), see the official documentation. Once the server is running, use the script below for generating training data:

./leaderboard/scripts/datagen.sh <carla root> <working directory of this repo (*/transfuser/)>

The main variables to set for this script are SCENARIOS and ROUTES.

实际上在运行脚本时terminal所在路径并不重要,只要

  1. 运行./CarlaUE4.sh --world-port=2000 -opengl

  2. 运行datagen.sh,不用传入参数。

不过要确保 datagen.sh 中变量的正确性:

设置路径:

export CARLA_ROOT=${1:path/to/carla}
export WORK_DIR=${2:-/path/to/transfuser}

设置Town和Scenario:

export SCENARIOS=${WORK_DIR}/leaderboard/data/training/scenarios/Scenario10/Town05_Scenario10.json
export ROUTES=${WORK_DIR}/leaderboard/data/training/routes/Scenario10/Town05_Scenario10.xml

搬运文件

这时候就需要在带有显卡的服务器上跑自己的程序了。不过出现了一个小插曲:远程服务器的网络似乎不很顺畅,几乎没有办法用它自己下载任何东西。于是我们只好从自己的电脑传递文件过去。

由于可以使用 ssh,于是使用 scp 进行传输。

传输文件夹:

scp -r /path/to/local/folder username@ipaddress:/path/to/remote/folder

其中 -r 表示 recursive ,即上传文件夹和文件夹里所有文件。注意,scp 会把这个文件夹传送到目标文件夹,我忘了这一点所以叠了两个同名文件夹,有点搞笑。

首先本地下载了anaconda的安装包等等文件,传输到了远程机器进行安装;

安装完毕之后,输入conda --version可以成功显示版本号。之后就要迁移conda环境了。

迁移虚拟环境

首先用 conda env list 查看本地 conda 虚拟环境都存储在了哪里,然后将这个文件夹传送到远程机器上去。

接着使用

conda config --append envs_dirs /path/to/env

这里注意,后面的路径应当是你传入的虚拟环境所在路径的上一个目录,因为这个命令的本质是增加 conda 存放虚拟环境的文件夹,而每个虚拟环境都是这个文件夹下的子文件夹。

这时候运行 conda env list,就可以发现我们的新虚拟环境已经被添加,然后使用 conda activate 激活环境就可以使用了。

不过值得注意的是,新版 conda 取消了 conda activate,需要用 source activate 替代。但是退出虚拟环境仍然是 conda deactivate,十分神秘。

运行数据采集

然后就是按照上面的流程进行数据采集了。cdtransfuser 文件夹,首先运行 Carla

./carla/CarlaUE4.sh --world-port=2000 -opengl

然后运行数据采集脚本:

./leaderboard/scripts/datagen.sh

注意,当终端退出时,挂在 2000 端口的 Carla 不会停止。停止它的一种方法是在原终端直接 Ctrl + C,另一种是直接杀掉进程。(可以使用 ps aux | grep Carla 获得进程号,然后 kill -9 <pid>);

datagen 脚本比较烦人,对它进行 Ctrl + C 仅仅会停止当前组数据的采集,它还会开始下一组。直接关掉终端或者杀掉进程(ps aux | grep leaderboard 获得进程号)会比较管用。

为了在退出终端后程序可以继续运行,可以使用gnu screen。我让 iris 一直运行使用的就是 screen,可以说是打过不少交道了。

但是需要注意一下:screenconda 虚拟环境的支持似乎存在bug,请在创建 screen 之前退出虚拟环境,在正确的路径下用 screen 创建虚拟屏幕之后再 conda activate 或者 source activate ,否则可能出现问题。

screen 常用指令:

  • screen 创建一个虚拟屏幕

  • screen -ls 查看已有的 screen 列表;

  • screen -r <sid> 将编号为sid的虚拟屏幕连接到当前的终端窗口;

  • screen -d <sid> 使编号为sid的虚拟屏幕解除挂载;

  • 在虚拟屏幕里输入 exit 终止该虚拟屏幕。