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,去掉相关的主机记录即可。

img

posted @ 2022-09-08 19:53  楷哥  阅读(640)  评论(0)    收藏  举报