1260 字
6 分钟
YOLO入门 4 远程部署训练

前言#

虽然能够使用 CUDA 加速了,但代价就是没有 Windows 电脑用了,没法打 FF14 了??

所以理所当然地,要尝试将项目进行远程部署,使用服务器进行训练,虽然我的服务器也没有 GPU …

我的服务器配置:Ubuntu 20.04 server 64bit 1vCPUs | 2GiB

应该是最丐的服务器配置了。

Ubuntu 下可以使用指令 lsb_release -a 查看系统版本


准备#

首先,通过 FTP 把文件都传到服务器上,由于我的服务器只是个小水管的问题,933MB 的项目文件用了近半个小时才完成传输。

发现一个问题:在使用 FTP 进行数据传输时,中间会时不时传输速度归零?

参考 YOLO入门 1 使用预训练模型进行检测 完成环境配置,使用 python train.py 进行模型训练了,但使用 ssh 连接的服务器有个问题:时间一长会自动断开连接,之前做的一切都会全部木大。

所以我们需要想办法让会话窗口始终开启。

这里,我所使用的是 screen 工具:

Terminal window
apt install screen # 安装 screen
screen -S yolo # 开启名为 yolo 的 session
python train.py ... # 开始训练

完成后先不要放开不管,把当前的 ssh 连接断开,并重新连接。

输入如下指令,查看所有 screen 的 session :

Terminal window
screen -ls

输入如下指令,回到刚才创建的 session ,如果 yolo 训练在正常进行就没有问题了:

Terminal window
screen -r 350924 # screen -r yolo

如果想要关闭这个 session 可以使用如下指令:

Terminal window
screen -r 350924 # 回到创建的 session
exit # 退出并关闭 session

训练#

输入如下指令,使用 yolo 开始训练。

Terminal window
python train.py ...

这里是训练时的资源占用,从 2022/01/09 22:00 至 2022/01/13 21:00,CPU 占用 100%, 磁盘方面只在加载训练资源时爆满了,其他时间均正常。


错误#

pip 安装环境时出现 0:00:01Killed#

当使用 pip3 install -r requirements.txt 进行环境配置时,在安装 torch 时,会出现 0:00:01Killed 的错误,安装进程被杀掉了。

Collecting torch>=1.7.0
Downloading torch-1.10.1-cp38-cp38-manylinux1_x86_64.whl (881.9 MB)
|████████████████████████████████| 881.9 MB 379 kB/s eta 0:00:01Killed
[^1]

问题出现的原因是 Linux 的内存分配策略了,在内核检测到系统内存不足后,会触发 oom-killer ,挑选最占用内存的进程杀掉。

根据这一特性,找到了如下三个方法:

方法1:修改内存分配策略1

临时生效:

Terminal window
sysctl vm.overcommit_memory=1
  • vm.overcommit_memory=1 : 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

永久生效:

vim /etc/sysctl.conf
vm.overcommit_memory=1

服务器只有 2GB 内存,可能是真的比较小,内存分配光了也没用😅

方法2:pip 独立安装 torch

使用 pip 安装 torch 的指令进行在线安装:

Terminal window
pip3 install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html

方法3:pip 离线安装 torch

另一种 pip 离线安装,避免下载占用的内存。

pypi.org 获取 torch 的 .whl 安装文件,注意系统和 python 版本:

Terminal window
pip install xxx.whl

ImportError: libGL.so.1#

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

碰到这个问题的时候,我是一脸懵逼的,因为之前配置从来没出过这个问题,还在我们有先辈的经验2

Terminal window
sudo apt update
sudo apt install libgl1-mesa-glx

训练时出现 killed#

这个问题和 pip 安装环境时出现 0:00:01Killed 很像,都是出现了内存不足的问题,之前在 YOLO入门 3 CUDA加速(GPU环境配置) 中出现的内存不足问题应该是一样的,修改模型参数修改训练参数 两个方法可以到上述文章里找到,这里主要提一下 Ubuntu 下的虚拟内存分配34

输入如下指令,分别查看剩余内存资源和磁盘空间分配:

Terminal window
free -m
df -m

服务器的总运行内存是 1987MB , 空余运行内存为 1051MB ;磁盘方面则是剩余 14782MB ,大约是 14GB 多一点。

按需分配一定磁盘给虚拟内存,这里分配 10GB:

Terminal window
mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=10000000

分配是需要加载一定时间的,需要耐心等候

分配完成后,输入如下指令,对分配的内存转换并激活:

Terminal window
sudo mkswap swapfile # 把生成的文件转换成 Swap
sudo swapon swapfile # 激活

激活后,重新查看内存和磁盘:

输入如下指令,卸载分配的内存:

Terminal window
sudo swapoff swapfile # 卸载

还有一个问题:此时分配的虚拟内存会在开机后消失,如果需要永久保持,在 /etc/fstab 文件尾添加一下信息:

Terminal window
swapfilepath swap swap defaults 0 0

例如:在 /root/ 进行的内存分配,添加如下内容:

Terminal window
/root/swap/swapfile swap swap defaults 0 0

如此,保存并退出即可。

使用快捷键 Crtl+A 后按 D 能退出当前会话

Footnotes#

  1. Ubuntu 16.04.01 解决进程跑一段时间就被killed

  2. ImportError: libGL.so.1: cannot open shared object file: No such file or directory——docker容器内问题报错

  3. ubuntu下配置虚拟内存

  4. 增加ubuntu的虚拟内存

YOLO入门 4 远程部署训练
https://fuwari.vercel.app/posts/人工智能/计算机视觉/yolo入门-4-远程部署训练/
作者
Asuwee
发布于
2022-01-14
许可协议
CC BY-NC-SA 4.0