基于服务器利用VS调试远程代码
一、需求
本次想要运行的项目是一个表格识别的任务叫TGRNet,具体的https://github.com/xuewenyuan/TGRNet代码放在服务器上,最初使用docker配置环境,仅仅希望能够在上面运行训练起来。但是代码的数据集中包含了一些问题,里面包含了大量绝对路径,导致需要修改代码,当时由于代码放在docker中,映射回宿主机的路径放在/data/
下面,当时我还没有直接修改权限,只能在docker环境中使用命令sudo vim train.py
的命令,还看不到代码。所以需要将代码实现vs和服务器互联起来。互联起来之后,便直接通过vs下面的终端将模型跑起来。模型跑起来后,我们需要可视化看到损失函数的具体变化过程,很多都是使用的基于visdom的可视化包,所以我们另外的需要是如何将docker中的端口映射出来,如何在我们本地机器中访问指定的Ip+ 端口。模型跑起来显然是最基础的过程,重要的是理解模型中每个数据的流通情况,我们需要利用本地的vs设置断点,能够将服务器的环境和服务器的代码能够实现像是在本地环境调试一样。
总结整个过程需要解决的问题:
- 将服务器的项目展现在VS中,每个具体文件的代码都可以访问
- 可以直接在vs中修改代码,实现vs和服务器中的代码互联起来。
- 将服务器中visdom端口映射出来,可视化loss的过程
- 本地可以调试代码,理清模型的信息传送过程
二、解决方案(直接给出参考的博客)
- 将服务器代码拉到vs,通过下面的文章可以实现vs,连接远程服务器。
vscode连接远程服务器(傻瓜式教学)_master-计算机科学专栏-CSDN博客_vscode连接服务器
- (选)将代码拉到本地之后,你可能可以直接 ctrl + s 保存代码至服务器上,也许会给出
“Permission denied
无法保存,需要借助linux 文件系统的权限修改命令,直接使用了777,虽然不太安全
linux 用户权限不够,linux .权限不够怎么办_evv安的博客-CSDN博客
- 本地可以访问服务器中的loss可视化loss情况
visdom远程连接服务器_shuolingzhou的博客-CSDN博客_visdom 远程服务器
- 解决docker环境中损失可视化映射问题
开启Docker内Visdom的映射端口,使用MobaXterm将其转发到本地实现本地化动态监视_我承认这里有赌的成分的博客-CSDN博客
- 本地调试整个模型的信息流动过程
VS Code中如何调试pytorch分布式训练脚本torch.distributed_冰海的博客-CSDN博客
三、我的踩粪过程
1. 关于项目(TGRNet)
这是一个表格重建的项目,首先从GitHub上下载了具体的项目,同时项目也给出了具体的环境要求。
https://github.com/xuewenyuan/TGRNet
项目中介绍使用conda env create --file environment.yml
命令,首先利用conda命令创建一个新的空环境,这就仅仅是使用了conda
命令。但是我在两次创建环境的时候出错了。第一次我是在docker中直接使用该命令创建,但是第二次我是直接在服务器环境(没有进入docker,直接通过服务器连接的)在docker中可以很快安装,但是在外机中,安装完之后一直给我报错警告,显示当前conda的版本只有4.5几,并且告知了最新版,告诉我通过使用命令conda update -n base -c defaults conda
升级,但是无论如何不能升到4.11.0。最多到4.6.4。主要是在这个4.6.4的环境下我安装pytorch,无法安装,一直报错显示HTTP errors are often intermittent, and a simple retry will get you on your way
,网上给出的解决办法是换源,比如下面的。不过这些方法确实可以解决一些问题,尤其是下面推荐的第二种方法:
解决:An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent......
conda使用清华源一直出现HTTP错误问题_zqm_0015的博客-CSDN博客
但是通通不适用我,然后我把当前的annaconda卸载了,从官网上下载了最新版,重新进行安装,查询版本号,同样需要升级,但是这次执行命令就可以直接升级到4.11.0.不会装的可以参考下面的博客安装。
如何在Linux服务器上安装Anaconda(超详细)_あなたを待って-CSDN博客_服务器安装anaconda
根据要求,接下里需要安装pytorch,因为我使用的3090显卡,我安装最新版的pytorch,至于为什么安装最新版的原因是:3090的算力太高,需要安装cuda 11.0版本以上,所以也是抱着试试的想法,看看到底能不能将模型跑起来。
在pytorch官网找到安装最新版的命令,接下来需要安装geometric,下面的这篇文章给出了详细过程
安装 pytorch-geometric_LaineGates的专栏-CSDN博客
其实就是利用命令conda install pyg -c pyg -c conda-forge
相比,原来的项目给出的处理过程要简单的多。下面就是项目本身给出的下载安装过程,相对来说比较繁琐:
项目过程中遇到的问题:
- 数据集路径问题,项目中给出的每个数据集中的train.txt,val.txt,test.txt.里面的路径都是绝对路径,我们采用全局替换,一个个打开每一个文件进行替换,就是将前面的路径地址替换成dataset,替换后的效果如下所示:
datasets/cmdd/gt/scan_item10+_1_t1.pkl
parser.add_argument('--num_threads', default=0, type=int, help='# threads for loading data')
将默认数量改为了0,因为运行过程中出现了内存超出的现象,这个应该是docker专属的,报错内容(Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm))
- 就是在是否继续训练的选项注释了一点东西,下面的四行就是注释掉的。
2. 关于VS与服务器代码互联
按照上面介绍的教程可以将代码连接起来。连接起来后,如果不能正确保存就使用一个ll命令查看一下文件的权限问题,使用文件权限的处理命令处理,这样就可以实现在VS中自由编辑代码了。
3 建立远程映射过程(可视化los)
3.1 没有使用docker情况下
- 首先在服务器环境中安装visdom
pip install visdom
- 在服务器中启动visdom
python -m visdom.server
- 在本地终端输入映射
ssh -L 18097:127.0.0.1:8097 username@xxx.xxx.xx.xx
其中上面username表示服务器的用户名,@后面的表示服务器的ip地址。
- 在本机的浏览器上输入http://localhost:18097即可打开visdom图形界面。http://localhost:18097表示服务器的visdom启用,如果用本机的visdom则是输入http://localhost:8097.也即是说18097这个地方代表我们在自己的机器上访问的端口,后面的8097表示服务器映射出来的端口。我们只要对应好就行了。
3.2 使用docker情况
这里使用docker之所以麻烦的原因是在创建容器的时候,我没有将端口映射好,导致我需要重新在配置文件中配置相应的端口映射。按照下面的博客一步步进行下去,需要注意的是,关闭docker服务的时候是在宿主机中进行的(也就是直接进入的服务器环境)
- 关闭容器,查询容器的id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ERzM87y-1646114916772)(%E5%9F%BA%E4%BA%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%A9%E7%94%A8VS%E8%B0%83%206af2e/Untitled%204.png)]
docker :查询容器id_feiger的专栏-CSDN博客_docker查看容器id
(我按照上面的教程修改配置文件之后,然后就启动了我的容器,当时发现并没有配好,我尝试了两次,但是第二次配好之后,我好像把所有的应用都想关掉,推出了服务器的环境,重新登录,结果莫名奇妙的发现就好了,很离谱)
4. 本地调试
我想要使用服务器的环境来运行远程的代码,我想要本地调试。问题就在于,我不知道怎么配置docker中的环境到vs中,后来我重新在服务器中直接利用conda装了一个新的环境,等到一切正常以后,开始配置本地调试过程。网上远程调试的一大堆,其实发现那些都是复杂的。朋友告诉我通过编写launch.json文件就可以了。在里面具体的字段给出相应的值,下面的这篇文章真的就是大救星,因为训练的代码还利用什么分布式,一堆参数。最后的这篇文章足矣!
VS Code中如何调试pytorch分布式训练脚本torch.distributed_冰海的博客-CSDN博客
四 总结
上面的内容,都是在我的notion中记录的,可以直接访问下面的网站查看。配环境绝对是个头大的玄学的东西。
https://fifth-gazelle-a85.notion.site/VS-061208f93e88448882209be8938a67b3