天河二号超级计算机于2013年在国家超算广州中心已正式投入运行,委托中山大学管理,目前是中国超算能力排名第二、全球排名前十的超级计算机。天河二号价格大约是0.1元/小时/cpu,费用不算高。

本文简要介绍天河二号的使用步骤,包括连接到超级计算机、运行并行程序等。内容主要参考天河二号官方下方的文档,如遇到请问,请查看官方文档或联系工作人员。

准备工作:联系天河二号工作人员,填写申请表,审核通过后获得账号、密码、登录密钥和使用说明手册。

连接天河二号

连接天河二号机器前,需先登录VPN。如果未安装VPN,先进入网页https://vpn3.nscc-gz.cn:4433下载Windows客户端,然后安装并运行程序。在出现的登录界面中填入以下信息:

服务器:vpn1.nscc-gz.cn
端口: 4433
账号: 账号
密码: 密码

如果信息无误,点解登录后VPN客户端会最小化到右下角托盘并显示绿色图标。

登录VPN后,才可以用SSH方式连接到天河二号的登录节点。登录节点默认的认证方式是免密私钥认证,需提供开设账号时分发的私钥作为凭证。使用OpenSSH客户端连接的示例为:

chmod 600 private_key && ssh -i private_key username@172.16.22.11

private_key在windows下默认为755权限,OpenSSH会拒绝使用安全性低的私钥,chmod保证读写权限均为私有。

天河二号运行环境

通过一些命令可以探测到天河登录系统的运行环境。

  • uname -a: 系统的内核版本是2.6.32
  • cat /proc/cpuinfo: 登录节点使用了intel芯片,含4个物理CPU,每个CPU8核心16线程
  • free -g: 登录节点配备了128G内存
  • df -h: 大约5P的硬盘存储
  • gcc -v: gcc版本为4.4.7
  • icc -v: 系统默认的icc版本为14.0.2,其他版本需使用module命令加载
  • mpicc -v: mpi版本为3.1.3,使用icc 14.0.2编译
  • make -v: make版本为3.81
  • cat /etc/hosts|grep ln: 系统有几十个登录节点,这也解释为了登录的时候会经常提示指纹不匹配
  • module avail: 系统支持模块,高版本的GCC/CUDA/FFT等均可以模块方式加载,无需自行编译
  • ping cn.bing.com/ping 114.114.114.114: 提示找不到主机,表明机器无法访问外网

通过查看yhinfo等命令的帮助,可以看到任务管理系统使用的是slurm。把slurm命令中的s替换成yh,则是yh系列的各个命令。

计算节点无法登录,可以通过yhrun执行程序探测。以下是一些计算节点的信息:

CPU: Xeon(R) CPU E5-2692 v2 @ 2.20GHz(未启用超线程) 内存: 64G 操作系统:天河自编译的Linux系统,内核版本2.6.32

天河二号运行程序

按照官方指南,程序的源码和编译可在主目录下,运行时的存储应放置在BIGDATA目录中。程序运行的命令主要是yhrun和yhbatch,yhrun是交互式提交作业,yhbatch是批量提交作业。实际使用中建议用yhbatch提交作业。

yhinfo/yhi

通过yhinfo或者yhi可查看用户可用的节点状态。命令的输出中,需要关注的是PARTITION和STATE两列。PARTITION指示任务可提交到的分区,在yhrun中会使用;STATE表示节点状态,只有idle的节点才是可直接使用的。

要查看所有分区/队列信息,可加上-a选项。

yhrun

yhrun用来交互式提交作业。基本用法是: yhrun [options] program [program-options]。options中,常见指定如下选项:

  • -n: 任务数。在MPI作业中,即进程数
  • -p: 任务运行分区。可用分区通过yhi命令查看
  • -N: 节点数。希望作业运行在几个节点上
  • -c: 任务使用的核心数。该值默认为1,非openMP程序一般用不到,指定了也不影响运行。

天河二号的每个计算节点配置24核,并且是独占式的。这意味着节点在同一时间只能被一个用户所使用,为了节省结算计时,尽量让N=[n/24],或者不指定-N参数。

yhrun可以替代mpirun使用,而不是简单的在各个主机上执行相同程序。例如在多个进程上运行非MPI程序:yhrun -n20 -p free hostname,结果将返回进程所在节点的主机名,结果类似于pssh执行同一条命令。通过yhrun运行的程序能否让MPI程序的各个进程正常进行通信和交互,刚开始尚有疑惑。

为了检测yhrun和mpirun有相同效果,写了一个小demo进行校验。以下的测试代码:

#include "mpi.h"
#include <stdio.h>

int main(int argc, char **argv)
{
    int rank, size, namelen;
    char name[1024];
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Get_processor_name(name, &namelen);
    printf("Hello world! I'm %s(%d) of %d\n", name, rank, size);
    MPI_Finalize();
    return 0;
}

编译和运行:

mpicc -o foo -O2 demo.cpp
yhrun -n20 -p free ./foo

从结果上看,yhrun的执行效果和mpirun一致,说明yhrun确实可以替代mpirun执行有通信的多进程程序。

yhbatch

mpirun是交互式的提交作业,这意味着会一直占据终端,直到程序开始计算并将结果返回回会释放终端。大部分的程序运行时间周期都较长,在等待期间,如果用yhrun,用户只能等待结果或另开连接,否则无法进行其他操作。实际使用中,应使用yhbatch提交作业,yhrun执行具体任务。作业系统在yhbatch提交时申请的资源满足后,调度执行任务并将结果存放到用户的目录下。

yhbatch命令选项和mpirun命令相差不大,猜测的主要不同是yhbatch是向调度中心进行资源申请,只有满足这些条件才运行用户的程序,否则继续等待。

使用yhbatch首先建立一个脚本文件,里面放入程序执行命令:

#!/bin/bash
yhrun -n10 -p free ~/foo

然后使用yhbatch提交:chmod u+x ./batch.sh; yhbatch -n10 -pfree ./batch.sh。yhbatch中的-N等参数应该不小于yhrun中的参数,否则运行时的进程数和节点可能并非所想,甚至出现资源错误提示。

yhqueue/yhq

yhbatch提交作业后,使用yhqueue/yhq可查看正在运行的任务状况。

yhcancal

提交到任务队列后,yhq可查看提交或者正在运行的任务id。如果想终止任务,使用yhcancel。

其他事项,请参考官方说明手册。