存在问题

目前超算linux系统CentOS7.x的glibc版本为2.17,许多软件的作者经常会在glibc版本非常高的Linux系统上编译软件然后在github上发布,用户下载之后由于系统的glibc版本较低而无法运行,报如下错误(本文示例基于已安装好的Node.js 18):
本文示例使用Node.js 18

解决方案

使用singularity容器

  1. 获取glibc版本较高的singularity镜像,如 Ubuntu,镜像拉取可参考超算用户手册-运行计算程序-运行Singularity
  2. 加载预装singularity容器加载singularity
  3. 申请所需超算资源
    #本次测试申请1节点4核资源,最长运行一小时,可根据自己情况来申请
    salloc -p hpib -N 1 -n 6 -t 1:00:00
    
  4. 以可写的方式运行高版本GLIBC的singularity容器,并将宿主机文件与容器中文件进行绑定

     test
     #home目录默认会被绑定,此时将自己的project目录与容器中的/mnt目录进行绑定
     singularity shell --bind /project2/{自己的用户名}:/mnt  -w ubuntu.sif
    
     #若有需要,可以将scratch目录也进行绑定
     singularity shell --bind /project2/{自己的用户名}:/mnt --bind /scratch/{自己的用户名}:/opt -w ubuntu.sif
    

    绑定的目录名与自己home目录下project(scratch)的软连接指向保持一致目录名字

  5. 进入容器后创建project目录,若你绑定了scratch目录则也要创建对应的scratch目录,并创建对应软连接
     #有的账号可能是/project,请参考自己home目录下的软连接实际指向
     mkdir /project2
     ln -s /mnt /project2/xiajunjie
    
    容器内操作
  6. 运行node命令 运行

singularity结合脚本运行程序

  1. 将上述进入singularity容器后,所要执行的准备操作写成一个脚本

     #本示例该脚本创建在自己的project下
     #此脚本考虑了project和scratch均与容器绑定的情况,用户可根据自己的实际情况进行调整
     vim preparation.sh
    
     #脚本内容
     #!/bin/bash
     mkdir {/project2,/scratch}
     ln -s /mnt /project2/xiajunjie
     ln -s /opt /scratch/xiajunjie
     source ~/.bashrc
     node --version
    
     #保存后添加权限
     chmod +x preparation.sh
    
  2. 准备提交脚本submit.sbatch

    #!/bin/bash
    
     #SBATCH --partition=hpib
     #SBATCH --nodes=1
     #SBATCH --account=xiajunjie
     #SBATCH --cpus-per-task=4
    
     module load singularity/3.10
     singularity exec --bind /project2/xiajunjie:/mnt --bind /scratch/xiajunjie:/opt -w ubuntu.sif /mnt/preparation.sh
    
  3. 提交脚本并查看运行结果 运行结果

备注

  • 若在软件安装过程中,遇到需要高版本glibc的问题或者文件数过大问题,强烈建议自己在虚拟机上制作打包好singularity镜像,然后上传至超算使用。 具体示例可参考超算用户手册
  • 若只想使用超算singularity环境完成软件编译安装,也可以参考本文使用singularity容器的思路

results matching ""

    No results matching ""