常见IDE利用Docker完美查看Paddle源码跳转

前言

最近在接触部分paddle源码,但由于本地搭建特容易出现环境依赖问题和其他奇怪的问题,故选择了docker编译。有很多朋友遇到这类问题第一想法便是:

  • 直接用vscode gnu global凑合就完事了 (缺点:符号信息缺失)
  • 找个其他可以的服务器编译 (缺点:需要钱)
  • 其他codespace之类的东西 (缺点:速度慢)
  • 直接用 vscode attach docker就完事了(缺点:想要用到clangd配合cmake的compile的json生成完整符号信息,但是attach后我发现我不能给它安装vscode的clangd插件)

综上所述,我们需要一个强大的统一开发环境使用,这时候最好的选择就是docker了,clion可以完美支持c++项目的跳转以及cmake的调试以及符号信息的获取,所以我们使用clion进行符号跳转的查看。(vscode也可以,在后续会提到使用方法)

但clion不像vscode可以很方便的attach,我们需要远程ssh进行处理,所以接下来我们需要解锁docker的远程功能。

具体编译细节和各平台的编译过程可参考paddle官方手册:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/compile/linux-compile.html#paddlepaddle-paddlepaddle-github-paddle

一、docker基础依赖安装

如果没有pull docker,先使用:nvidia-docker pull paddlepaddle/paddle:latest-gpu-cuda10.2-cudnn7-dev

因为我的是11.5的cuda,所以使用nvidia-docker pull paddlepaddle/paddle:latest-dev-cuda11.2-cudnn8-gcc82

pull之后直接run:

注意!【这里和官方建议不同的是我没有用--network=host而是用-p 50003:22,为了ssh的端口映射】

nvidia-docker run --name paddle-test -v $PWD:/paddle -p 50003:22 -it registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.2-cudnn8-gcc82 /bin/bash

如果你已经run了,直接docker exec -it即可,或者在vscode或clion中直接attach到终端。

二、换源

进入docker终端后首先对docker内进行一波换源:vim 修改 /etc/apt/sources.list 全部替换为:


deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

三、ssh依赖安装与启动

第一步:安装依赖

apt-get update
apt-get install passwd
apt-get install openssh-server
apt-get install rsync  #后续clion同步文件需要用到

第二步:设置登录名密码:通过passwd命令来设置root的密码,比如123456

第三步:启动ssh服务

service ssh start

可以通过ps -e |grep ssh查看服务是否启动

第四步:修改配置文件,通过vim编辑器打开配置文件 vim /etc/ssh/sshd_config

在配置文件中随便找个地方写入以下内容(#号后是注释)

PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径
PermitRootLogin yes #root能使用ssh登录

第五步:重启服务

service ssh restart

这时候就可以愉快的ssh操作docker了!

你可以在终端中进行测试,使用:

ssh -p 50003 root@127.0.0.1

输入123456密码发现可以成功进入,这时候已经基本成功,接下来进入到clion配置的环节

四、Clion配置

接下来进入到clion配置的环节,只要处理好这几个部分就可以完美体验!

在这我参考了:[https://imhuwq.com/2018/12/02/Clion 使用 Docker 作为开发环境/](https://imhuwq.com/2018/12/02/Clion 使用 Docker 作为开发环境/)

一、工具链设置

在 Clion Settings-Build,Execution,Deployment-Toolchains 页面先新建一个 Toolchains 设置(点+号选择远程主机),名字叫 my-project 吧,类型选 Remote Host。 Credential 设置里面填入 Container 的 IP。端口、用户名和密码按自己创建 Docker 镜像的时候来设置。【如果没有检测到,到cmake或者其他东西,在docker内apt安装一下就好;g++编译器可能自动搜索不到,所以whereis g++看一下地址,然后填入即可】

二、CMAKE设定

创建 Toolchains 配置后,在 Settings-Build,Execution,Deployment-CMake 页面的 Toolchain 下拉菜单里面选择刚才创建的 my-project。 然后点击 Apply 保存到目前为止的配置

cmake选项中需要加入-DPY_VERSION=3.7 -DWITH_GPU=ON 这是我们需要的cmake参数

环境处需要带上PATH=/usr/local/cuda/bin/nvcc是因为有可能cmake过程中(我遇到了)遇到了这个提示

  No CMAKE_CUDA_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CUDACXX" or the CMake cache entry CMAKE_CUDA_COMPILER to the full
  path to the compiler, or to the compiler name if it is in the PATH.

你可以把export PATH=/usr/local/cuda/bin:$PATH直接附加到终端或者是加入到环境变量中。

三、管理同步

其实他的用法就是创建一个tmp(你可以在映射中看到)

然后把文件拷贝进去编译后再把信息拿回来。

记得测试连接,根路径自动检测即可

五、快乐体验

注释:每次重启docker后的操作

需要注意的是,每次重启后我们都需要在docker终端内启动一下ssh服务否则不能使用:

service ssh start

这时候已经大功告成,我们可以在下面选择对应的开发环境(如果它没有自动切换的话)

这时候你会看到它正在传输文件,并且开始有个漫长的符号表加载过程(需要一点点时间,但重复打开后就不需要时间了!)

如果出现问题可以修改后(大部分是环境变量的问题,根据上面的第二步骤进行修改即可)

经过漫长的等待我们就可以看到结果了。

cmake过程坑点注意

cmake过程中可能需要下载一些仓库,但无法成功下载(网络原因),你可以bind 172.17.0.1 走proxy,或者使用这个方法:参考自https://www.cnblogs.com/isLinXu/p/16693491.html

由于在paddle源码编译过程中,需要安装相应的依赖库,这些依赖库是通过github仓库拉取源码的形式下载下来的。
若docker环境下能够网络通畅的使用github,可跳过此项。
若网络情况不稳定,那么这里建议参考下面,分别将这些仓库手动clone下来,同时要注意当前的目录(放在根目录)。(因为是映射目录,你可以找各种方法在本地下载后放到目标位置即可,有必要的话弄一下DNS)

虽然有些符号还是不能看到定义和实现,但已经足够看代码了(支持绝大部分,而且可以自由跳转)!(有些是cuda调用so本来就不能看到)

享受符号跳转带来的遍历把。(有了那个小标志就说明全部加载完成,如果加载符号表过程中卡住了卡了非常久,可以尝试重启clion)

外传——没clion但用vscode凑合

“放过vscode吧!他只是一个编辑器,不是IDE!”——沃兹季硕德

vscode下我们可以使用clangd+cmake插件实现一定的跳转功能,之前我们知道了用docker直接attach到vscode是失败的,不能安装插件。

但clion展示了他的强大功力(可以ssh后使用目标编译链进行编译和符号表的导入操作),那我们可以大胆猜想可以用vscode也直接ssh到docker然后看下是否可以安装插件。

幸运的是,vscode 在ssh链接docker后是可以安装clangd和cmake插件的,我们只需安装好插件然后配置好下方的build的相关参数,等他自己构建即可。

我的话是生成了clangd需要使用的compile_commands.json 文件。在paddle的根目录下使用这个即可成功!(CMAKE_EXPORT_COMPILE_COMMANDS为了生成json)

cmake .  -B build  -DPY_VERSION=3.7 -DWITH_GPU=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=1

安装生成完后重启vscode即可看到一个index加载过程,等待全部完成后就可以体验基本功能的跳转了(虽然肯定还是没有clion强大,但是对于没有clion的情况下还需要什么自行车呢?而且比GNU global的提示肯定是更全更舒适的)

reference

使用ssh连接docker服务器的方法_docker

https://www.anquanclub.cn/6674.html

【健忘笔记】Clion连接docker远程开发

https://zhuanlan.zhihu.com/p/429270402

备忘-Docker常用命令

参考:https://zhuanlan.zhihu.com/p/410056073

关于我:

图像算法炼丹工程师一枚,PFCC成员,参加PPDE培训ing

喜爱写博客&参加开源活动

欢迎来访博客:https://sanbuphy.github.io/

我的github:https://github.com/sanbuphy

此文章为搬运
原项目链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值