背景
在使用 deepspeed 进行多机训练的时候,会使用到 pdsh
至于为什么采用编译安装的方式,是因为我之前使用 apt/yum 安装的 pdsh,连 pdsh -V 都运行不起来,所以直接采用编译安装
编译安装
配置环境
# Debian/Ubuntu:
sudo apt-get install -y autoconf automake libtool m4
# RedHat/CentOS:
sudo yum install -y autoconf automake libtool m4
安装步骤
- 先把代码 clone 下来,git clone github.com/chaos/pdsh.…
- 执行 cd pdsh && autoreconf -fiv 命令,生成 configure
- 按照训练需求配置编译选项,我这里执行的命令是
# --prefix=/root/pdsh 安装到用户目录(避免系统权限问题),容器内我的用户名是 root,所以直接将代码 git clone 到 /root 目录下了
# --with-ssh 强制启用 ssh 通信模块
# --enable-static-modules 静态链接模块(避免动态库路径问题)
# 还可以使用 --without-rsh 禁用不安全的rsh协议;以及 --disable-xml 禁用不需要的XML支持(减少依赖)
./configure --with-ssh --enable-static-modules --prefix=/root/pdsh
- 直接编译安装,执行 make && make install 命令,普通用户就行,因为安装到用户目录,所以不需要 sudo,如果你想安装到用户目录,比如 /usr/local 下,同时你当前使用的用户是普通用户,那么就需要 sudo 权限
- 将编译好的 pdsh 永久的添加到环境变量中,执行 echo 'export PATH=/root/pdsh/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
- 还需要配置这个环境变量,来设置强制使用 SSH 通信,执行 echo 'export PDSH_RCMD_TYPE=ssh' >> ~/.bashrc && source ~/.bashrc
- 验证是否安装成功
pdsh -V # 查看版本及模块,确认包含"ssh"
pdsh -q -w localhost # 检查配置,应显示"Rcmd type: ssh"
- 因为使用编译安装的方式,所以如果后续想要卸载,到时候直接进入 pdsh 代码路径里面,执行 make uninstall 卸载掉就好