PaddlePaddle 远程开发环境配置
摘要
本文介绍了如何使用 VSCode 远程开发 PaddlePaddle。本文使用 VSCode 进行远程开发,使用了 clangd 插件作为代码提示。clangd 需要一个 compile_commands.json 文件,这个文件可以使用 cmake 的 CMAKE_EXPORT_COMPILE_COMMANDS 选项导出。可是,本人在搭建开发环境的过程中,遇到了一个问题。PaddlePaddle 是在容器中构建,编译器、头文件等都在容器里面。以前直接通过修改导出的 compile_commands.json 对应的路径,让 clangd 可以使用对应的头文件。这个做法只是为了简单方便,在使用的过程中,总会遇到一些不舒服的地方。因此有了这一篇博客。
这篇博客在构建 PaddlePaddle 的容器中搭建 ssh 服务,使用宿主机作为跳板机,进入到容器中进行开发。
搭建 ssh 服务
首先是拉取构建 PaddlePaddle 的容器,然后启动。先 clone 一份 paddle 的代码,然后在目录里面,运行如下命令。
docker run --name paddle-test -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
运行好了之后,通过 docker attach 绑定到容器中。接下来就是安装配置启动 ssh 服务器。
whoami # 容器里面是 root 用户
apt update # 更新一下
apt install openssh-server # 安装 ssh 服务器
service ssh start # 启动 ssh 服务器
service ssh restart # 重启 ssh 服务器
service ssh status # 检查 ssh 启动状态
因为前面启动 paddle 的容器的时候,配置使用了宿主机上的网络,因此端口都是共用的。默认的 ssh 服务器使用 22 端口,可能会和宿主机器上的端口产生冲突,为了避免冲突,需要修改 ssh 的配置文件。
vim /etc/ssh/sshd_config # 找到 Port 22 那一行,取消注释,将端口改成 2222
# 将以下行打开
PubkeyAuthentication yes
之后为了在启动的时候可以避免输入密码,可以生成配置密钥和公钥。
# 如果客户端没有公钥,那么需要在 Windows 或者 Linux 上生成
ssh-keygen -t rsa -C "your_email@qq.com" # 生成 ssh 密钥和公钥
# 查看公钥并复制
cat ~/.ssh/id_rsa.pub
# 将公钥放到认证的 keys 里面
~/.ssh/authorized_keys
至此,服务端的配置基本完毕。下面来看看 VSCode 这边应该要怎么配置。
VSCode SSH 登录服务器
VSCode 本机上需要安装 Remote SSH,服务器上需要安装 clangd

因为我们需要进入到的是容器,所以我们先使用远程服务器作为跳板,跳转到容器里面。远程服务器的 SSH 使用默认的 22 端口,容器使用 2222 端口。在 VSCode 的 SSH 配置中,可以使用下面的配置。
Host host_name
HostName host_ip_address
User your_user_name
Host paddle
HostName 127.0.0.1
Port 2222
User root
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -W %h:%p host_name
配置好了之后,就可以登录了。
登录之后,有时候使用 grep 命令会有一些讨厌的提示,unset 那个环境变量即可。
代码提示
为了可以使用代码提示,需要在远程服务器上安装 clangd。安装了之后,在使用 CMake 编译 paddle 的时候,可以指定 CMAKE_EXPORT_COMPILE_COMMANDS 来生成 compile_commands.json,生成之后,将这个文件复制到源码目录下面,之后就可以使用代码提示,代码补全了。
至此,PaddlePaddle 的远程开发环境就配置好了。接下来就开始开开心心码代码吧。
问题记录
cmake 找不到的问题
在将上面的流程跑通之后,可以登录服务器,可以代码补全。但是在编译的时候又出现了问题,提示 cmake 找不到。后面发现是环境变量发生了改变,但是原因未详,先记录下来。
使用 ssh 登录

使用 docker 绑定

上面的环境变量的不同,会导致找不到 cmake,解决办法不难,先使用 docker 绑定,导出 PATH 变量,然后再在 ssh 中执行一次。
export PATH=/home/cmake-3.16.0-Linux-x86_64/bin:/usr/local/gcc-8.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/root/gopath/bin
登录认证失败
有时候登录认证会失败,可能之前的 known_hosts 和现在的发生了改变,因此修改 .ssh\known_hosts,去掉相关的主机记录即可。


浙公网安备 33010602011771号