前言
虽然能够使用 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 工具:
apt install screen # 安装 screenscreen -S yolo # 开启名为 yolo 的 sessionpython train.py ... # 开始训练
完成后先不要放开不管,把当前的 ssh 连接断开,并重新连接。
输入如下指令,查看所有 screen 的 session :
screen -ls
输入如下指令,回到刚才创建的 session ,如果 yolo 训练在正常进行就没有问题了:
screen -r 350924 # screen -r yolo
如果想要关闭这个 session 可以使用如下指令:
screen -r 350924 # 回到创建的 sessionexit # 退出并关闭 session
训练
输入如下指令,使用 yolo 开始训练。
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
临时生效:
sysctl vm.overcommit_memory=1
- vm.overcommit_memory=1 : 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
永久生效:
vim /etc/sysctl.confvm.overcommit_memory=1
服务器只有 2GB 内存,可能是真的比较小,内存分配光了也没用😅
方法2:pip 独立安装 torch
使用 pip 安装 torch 的指令进行在线安装:
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 版本:
pip install xxx.whl
ImportError: libGL.so.1
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
碰到这个问题的时候,我是一脸懵逼的,因为之前配置从来没出过这个问题,还在我们有先辈的经验2:
sudo apt updatesudo apt install libgl1-mesa-glx
训练时出现 killed
这个问题和 pip 安装环境时出现 0:00:01Killed 很像,都是出现了内存不足的问题,之前在 YOLO入门 3 CUDA加速(GPU环境配置) 中出现的内存不足问题应该是一样的,修改模型参数 和 修改训练参数 两个方法可以到上述文章里找到,这里主要提一下 Ubuntu 下的虚拟内存分配34。
输入如下指令,分别查看剩余内存资源和磁盘空间分配:
free -mdf -m
服务器的总运行内存是 1987MB , 空余运行内存为 1051MB ;磁盘方面则是剩余 14782MB ,大约是 14GB 多一点。
按需分配一定磁盘给虚拟内存,这里分配 10GB:
mkdir swapcd swapsudo dd if=/dev/zero of=swapfile bs=1024 count=10000000
分配是需要加载一定时间的,需要耐心等候
分配完成后,输入如下指令,对分配的内存转换并激活:
sudo mkswap swapfile # 把生成的文件转换成 Swapsudo swapon swapfile # 激活
激活后,重新查看内存和磁盘:
输入如下指令,卸载分配的内存:
sudo swapoff swapfile # 卸载
还有一个问题:此时分配的虚拟内存会在开机后消失,如果需要永久保持,在 /etc/fstab 文件尾添加一下信息:
swapfilepath swap swap defaults 0 0
例如:在 /root/ 进行的内存分配,添加如下内容:
/root/swap/swapfile swap swap defaults 0 0
如此,保存并退出即可。
使用快捷键 Crtl+A 后按 D 能退出当前会话