一个python跨节点并行计算的问题

1. 问题描述:

  • 服务器主节点联网,子节点不联网

  • 主节点和子节点均是单独安装的操作系统(系统版本号均相同),未通过网线共享操作系统(无宿主机设定)

  • 主节点自己编译的软件、库以及用户等均可通过NFS、NIS共享,通常在一般性计算下,无任何报错和警告。

  • 但是由于主节点通过yum等安装的软件包形成的环境和子节点的不相同,会导致python脚本跨节点运行会出现警告提示。

  • 警告提示如下(不是报错):

[node04:05729] mca_base_component_repository_open: unable to open mca_mtl_psm: libpsm_infinipath.so.1: cannot open shared object file: No such file or directory (ignored)
[node04:05728] mca_base_component_repository_open: unable to open mca_oob_ud: libosmcomp.so.3: cannot open shared object file: No such file or directory (ignored)
[node04:05729] mca_base_component_repository_open: unable to open mca_mtl_psm2: libpsm2.so.2: cannot open shared object file: No such file or directory (ignored)
......
  • 我自己也找了一下这些文件的位置:

    • 主节点

      (base) [root@node01 ~]# locate libpsm2.so.2
      /usr/lib64/libpsm2.so.2
      /usr/lib64/libpsm2.so.2.1
      (base) [root@node01 ~]# locate libosmcomp.so.3
      /usr/lib64/libosmcomp.so.3
      /usr/lib64/libosmcomp.so.3.0.6
      (base) [root@node01 ~]# locate libpsm_infinipath.so.1
      /usr/lib64/libpsm_infinipath.so.1
      /usr/lib64/libpsm_infinipath.so.1.16
      
  • 但是子节点没有这些文件

2. 提出问题:

  • 以上警告缺少的一些文件均位于/usr/lib64/*或者系统路径下,我想知道这种路径是否可以共享(个人感觉不能共享),如果不能共享,那么有什么比较好用且稳定的方法使子节点保持和主节点一样的环境,换句话说,如何让子节点的系统保持和主节点一样样的,比如安装的软件包相同等等。

  • 之前使用过子节点无盘启动这种方式,这种方式当然就不存在上述问题,但是我相信上面的这种情况也应该有完美的解决方案。

3. 解决方案:

  • /usr/lib64/libpsm2.so.2/usr/lib64/libpsm2.so.2.1 这两个文件看起来像是某个支持RDMA(远程直接内存访问)通信的库的链接。RDMA 是一种用于网络数据传输的高速传输技术,常用于高性能计算和网络存储等场景。

  • libpsm2 库是 Intel 平台 scalablE Protocol for Unified Communication (PSM2) 的实现,它允许应用程序使用 RDMA 进行通信。这个库通常由支持 RDMA 的软件包提供,比如 psm2 或者 opa-psm2 这样的软件包。

  • 在基于 RPM 的系统(如 Red Hat Enterprise Linux、CentOS)上,您可以使用 rpm 命令来查找这些文件属于哪个软件包。命令如下:

rpm -qf /usr/lib64/libpsm2.so.2 
rpm -qf /usr/lib64/libpsm2.so.2.1 
  • 这些命令将返回拥有这些文件的软件包名称。如下:

(base) [root@node01 ~]# rpm -qf /usr/lib64/libpsm2.so.2
libpsm2-11.2.78-1.el7.x86_64
(base) [root@node01 ~]# rpm -qf /usr/lib64/libosmcomp.so.3
compat-opensm-libs-3.3.15-3.el7.x86_64
(base) [root@node01 ~]# rpm -qf /usr/lib64/libpsm_infinipath.so.1
infinipath-psm-3.3-26_g604758e_open.2.el7.x86_64
  • 在主节点上只下载不安装软件,然后分发到子节点上。【/share是一个所有节点共享的文件夹】

yumdownloader --destdir=/share --resolve libpsm2-11.2.78-1.el7.x86_64
yumdownloader --destdir=/share --resolve compat-opensm-libs-3.3.15-3.el7.x86_6
yumdownloader --destdir=/share --resolve infinipath-psm-3.3-26_g604758e_open.2.el7.x86_64
  • 然后在子节点的 /share文件夹下使用 rpm -ivh * 将所有的软件安装在子节点上。

rpm -ivh libpsm2-11.2.78-1.el7.x86_64.rpm
rpm -ivh compat-opensm-libs-3.3.15-3.el7.x86_64.rpm
rpm -ivh infinipath-psm-3.3-26_g604758e_open.2.el7.x86_64.rpm
  • 最后检查一下子节点上有没有安装上上述缺失的文件:

[root@node04 ~]# updatedb
[root@node04 ~]# locate libpsm2.so.2
/usr/lib64/libpsm2.so.2
/usr/lib64/libpsm2.so.2.1