GPU集群Torque排队系统使用手册
GPU集群Torque排队系统使用手册

GPU集群Torque排队系统使⽤⼿册多媒体计算与通讯实验室GPU集群Torque排队系统使⽤⼿册袁平波 2016.5.20本实验室新购进24块K80 tesla GPU。
为了充分利⽤GPU计算资源,我们利⽤Torque来管理同学们的计算任务队列。
头结点的IP是192.168.17.240。
下⾯说明使⽤本GPU集群的⼏个步骤。
1.申请帐号.本集群有⼀个头结点和多个服务结点构成,因此提交计算作业需要在头结点上拥有帐号,需要使⽤集群的学⽣需要给我发⼀个申请邮件,同时cc给⾃⼰的导师,在导师批准后相应的帐号会被建⽴。
2.建⽴job脚本⽂件Torque管理系统不能直接提交⼆进制可执⾏⽂件,需要编写⼀个⽂本的脚本⽂件,来描述相关参数情况。
⼀个⽰例脚本⽂件myjob1.pbs如下:#PBS -N myjob1#PBS -o /home/username/myjob1.out#PBS -e /home/username/myjob1.err#PBS -l nodes=1:gpus=1:S#PBS -r ycd $PBS_O_WORKDIRecho Time is `date`echo Directory is $PWDecho This job runs on following nodes:cat $PBS_NODEFILEcat $PBS_GPUFILE./my_proc脚本⽂件中定义的参数默认是以#PBS开头的。
其中:-N 定义的是job名称,可以随意。
-o 定义程序运⾏的标准输出⽂件,如程序中printf打印信息,相当于stdout;-e 定义程序运⾏时的错误输出⽂件,相当于stderr。
-l 定义了申请的结点数和gpus数量。
nodes=1代表⼀个结点,⼀般申请⼀个结点,除⾮采⽤mpi并⾏作业;gpus=1定义了申请的GPU数量,根据应⽤实际使⽤的gpu数量来确定,S表⽰job类型,后⾯有详细描述。
北鲲云用户手册说明书

北鲲云用户手册Table of contents:登录一. 如何登录二. 下载客户端基本概念一. 计算区二. SSH连接三. 工作站四. 模板提交作业五. 镜像中心收费标准一. 收费项目二. 查看硬件资源价格功能介绍一. 仪表盘二. 应用中心三. 作业管理四. SSH连接五. 图形界面六. 文件传输七. 数据集八. 镜像中心提交作业模板提交命令行提交图形界面提交作业监控和查看结果视频专区一、 文件传输二、提交作业三、作业监控和查看结果四、镜像中心版本介绍一. 版本差别二. 功能介绍一. 个人中心二. 费用中心三. 代金券四. 收费标准计费规则五. 网络策略安全管理一. 基础设置二. 密钥对管理三. 网络策略管理四. 操作审计团队管理一. 用户管理二. 子用户管理配额管理一. 配额管理二. 配额申请存储目录介绍二. 其它隐藏目录(文件)介绍文件传输一. Windows数据传输二. Linux数据传输三. 结果文件下载四. 文件同步查询平台预装软件一. 使用命令行查询软件二. Python/Conda环境的查询三. 工作站软件的查询四. 未查询到所需软件加载预装软件一. SSH命令行加载软件环境1. 使用module工具查询和加载软件2. 加载Python/Conda虚拟环境二. 工作站启动软件自定义安装软件一. 安装须知如何选择安装方式?二. SSH连接命令行安装软件Linux编译安装软件Python/Conda环境安装软件三. Windows工作站安装软件四. Linux工作站安装软件五. 镜像中心安装软件如何提交作业模板提交一. 提交流程二. 操作步骤三. 提交后的监控命令行提交一. 操作步骤二. 计算节点资源使用率监控图形界面提交一. Windows工作站提交二. Linux工作站提交AlphaFold2一. 模板提交二. 命令行提交三. 结果文件介绍四. 使用PyMOL对结果进行图形化展示 Amber一. 模板提交二. 命令行提交CPU版 Amber 作业示例GPU Amber 作业示例Ansys CFX一. 图形界面提交二. 模板提交三. 命令行提交Ansys Fluent一. 图形界面提交二. 模板提交三. 命令行提交Ansys LS-DYNA一. 图形界面提交AutoDock-Vina一. 模板提交二. AutoDockToolsCOMSOL Multiphysics一. 图形界面提交二. 命令行提交CONVERGE一. 命令行提交CP2K一. 命令行提交步骤ColabFold一. 模板提交二. 命令行提交GROMACS一. 模板提交二. 命令行提交GPU版GROMACS作业示例CPU版GROMACS作业示例 Gaussian一. 模板提交二. 命令行提交三. GaussView 6对结果进行图形化展示 Jupyter Notebook一. 图形界面提交LAMMPS一. 模板提交二. 命令行提交LS-DYNA一. 图形界面提交二. 模板提交三. 命令行提交NAMD一. 模板提交二. 命令行提交ORCA一. 命令行提交PyTorchRoseTTAFold一. 模板提交二. 使用PyMOL对结果进行图形化展示STAR-CCM+一. 图形界面提交二. 模板提交三. 命令行提交TensorFlow一. 命令行提交TeraChem一. 命令行提交VASP一. 模板提交二. 命令行提交VirtualFlow一. 模板提交二. 后置处理失败基本功能使用问题1. 我该如何提交作业?2. 我该如何上传文件到服务器?3. 你们平台 文件传输 上传下载速度是否有限制,大文件无法上传如何解决?4. 我在通用计算区配置的环境在其它计算区怎么使用不了?5. 我在账号下创建一个子用户,子用户的目录和主用户进入的目录一样吗?6. 你们平台的模板功能,主要用于哪些场景?7. 我在您们平台提交作业,多核机器速度和自己本地电脑算起来速度没有快多少,会是什么原因呢?8. 可以设置工作站计算完自动释放吗?9. 作业结束后会有通知吗?10. 能看到下载到本地的文件在哪个目录下么?11. 请问下现在我们的WebSSH终端大概闲置多久才会断开连接?12. 我在通知设置里设置了闲置工作站自动释放,为什么没有释放?13. 您们平台是否支持自定义安装Linux系统其它发行版本?16. 停机与释放有什么区别?17. 我的作业为什么会执行失败?18. 使用模板提交方式,作业执行失败,我该怎么处理?19. 平台总共有哪些类型的节点,它们各自代表什么含义?应用软件使用问题2. 平台没有我要使用的软件怎么办?3. 你们平台是否提供商业软件?4. 普通用户没有权限安装软件,能否获取root权限?5. 每次登录都需要使用module add命令加载软件,可不可以实现自动加载?6. 使用slurm命令报错:“slurm_load_jobs error: Unable to contact slurm controller(connect failure)”如何解决?7. 执行module命令报错“Lmod has detected the following error:”,如何解决?8. 什么是队列?9. 为什么有些硬件资源无法选择?10. 使用Material Studio软件(Windows)时,CPU核数如何修改?11. Jupyter Notebook 如何远程使用虚拟环境?计费问题1. 平台是如何收费的?2. 如何充值?3. 如何查看消费记录?4. 工作站如何查看节点配置价格?5. 为什么我没有使用,还在一直扣费?6. 工作站停机还会收费吗?7. 已经赠送免费核时,但余额显示为零?8. 平台可以开发票吗?9. 节点选择经济型和标准型有什么区别?其他问题1. 我测试为什么工作站与本地笔记本同等CPU配置没有本地笔记本算的快?2. 提交作业需要排队吗?3. 节点启动需要多久?4. 超算资源有时候跑着跑着就被强制回收了,你们也会有这种情况吗?5. 为什么我的 CPU 使用率最高显示为 50%?6. 为什么我连接登录到Windows工作站没有看到H或者S盘,请问如何找回呢?7. 没有我想要的数据集怎么办?镜像中心使用问题1. 镜像中心有什么作用?2. 在哪里设置为默认镜像,如何启动默认镜像?3. 制作镜像需要多久,我已经制作了半个小时了还没结束?4. 我之前制作的镜像怎么不见了?5. 什么是容器镜像?6. 镜像中心磁盘大小设置方法Slurm作业管理系统1. 查看分区状态2. 查看作业队列3. 查看所有作业详细信息4. 取消作业号为20的作业二. 提交作业的方式1. 使用sbatch批处理模式提交作业2. 使用salloc分配模式提交作业 Module的使用一. 常用命令二. 使用例子Conda的使用一. 使用北鲲云的Conda环境二. Conda管理环境三. Conda管理包四. Conda/Pip软件安装进阶操作 Linux的常用命令linux快捷键以及帮助手册快捷键帮助手册软件安装yum用户和文件权限管理查看用户使用root查看文件权限变更文件所有者修改文件权限目录及文件操作基本目录操作基本文件操作搜索文件whichwhereislocatefind文件解压缩rartar管道与一些文本命令&& 和 ||管道文本处理sortcoltrpaste重定向重定向文件描述符永久重定向以及“丢弃”输出进程的基本操作前台/后台切换终止进程管理topps提交作业Body Attributes(Body属性)Request(请求)Response(响应) - 200Response Body Attributes(响应Body属性) 取消作业Body Attributes(Body属性)Request(请求)Response(响应) - 200Response Body Attributes(响应Body属性) 查询作业状态URL ParametersRequest(请求)Response(响应) - 200Response Body Attributes(响应Body属性) 获取文件服务器TokenRequest(请求)Response(响应) - 200查询集群配置Body Attributes(Body属性)Request(请求)Response(响应) - 200Response Body Attributes(响应Body属性) 修改集群配置Body Attributes(Body属性)Request(请求)Response(响应) - 200Response Body Attributes(响应Body属性)登录欢迎来到北鲲云一站式云超算平台!本文档提供了一些链接来帮助您登录。
曙光作业管理-调度系统安装配置手册

Torque + Maui配置手册之抛砖引玉篇本文将以应用于实际案例(南航理学院、复旦大学物理系、宁波气象局)中的作业调度系统为例,简单介绍一下免费开源又好用的Torque+Maui如何在曙光服务器上进行安装和配置,以及针对用户特定需求的常用调度策略的设定情况,以便可以起到抛砖引玉的作用,使更多的人关注MAUI这个功能强大的集群调度器(后期将推出SGE+MAUI版本)。
本文中的涉及的软件版本Torque 版本:2.1.7 maui版本:3.2.6p17。
1. 集群资源管理器Torque1.1.从源代码安装Torque其中pbs_server安装在node33上,TORQUE有两个主要的可执行文件,一个是主节点上的pbs_server,一个是计算节点上的pbs_mom,机群中每一个计算节点(node1~node16)都有一个pbs_mom负责与pbs_server通信,告诉pbs_server该节点上的可用资源数以及作业的状态。
机群的NFS共享存储位置为/home,所有用户目录都在该目录下。
1.1.1.解压源文件包在共享目录下解压缩torque# tar -zxf torque-2.1.17.tar.gz假设解压的文件夹名字为: /home/dawning/torque-2.1.71.1.2.编译设置#./configure --enable-docs --with-scp --enable-syslog其中,默认情况下,TORQUE将可执行文件安装在/usr/local/bin和/usr/local/sbin下。
其余的配置文件将安装在/var/spool/torque下默认情况下,TORQUE不安装管理员手册,这里指定要安装。
默认情况下,TORQUE使用rcp来copy数据文件,官方强烈推荐使用scp,所以这里设定--with-scp.默认情况下,TORQUE不允许使用syslog,我们这里使用syslog。
资源管理软件TORQUE 与作业调度软件Maui 的安装、设置及使用

资源管理软件TORQUE与作业调度软件Maui的安装、设置及使用李会民(hmli@)中国科学技术大学网络信息中心2008年1月目录1资源管理软件TORQUE的安装与设置21.1服务节点安装TORQUE (2)1.2服务节点初始化并设置TORQUE (2)1.3计算节点上安装TORQUE (4)1.4计算节点配置TORQUE (4)2安装与配置作业调度软件:Maui52.1服务节点上安装Maui (5)2.2服务节点上配置Maui (5)3作业运行63.1串行作业 (7)3.2并行作业 (8)3.3常用作业管理命令 (8)3.3.1查看队列中的作业状态:qstat (9)3.3.2挂起作业:qhold (10)3.3.3取消挂起:qrls (10)3.3.4终止作业:qdel和canceljob (10)3.3.5查看作业状态:checkjob (11)3.3.6交换两个作业的排队顺序:qorder (12)3.3.7选择符合特定条件的作业的作业号:qselect (12)3.3.8显示队列中作业的信息:showq (13)3.3.9显示节点信息:pbsnodes和qnodes (13)1资源管理软件TORQUE的安装与设置TORQUE和Maui可以从上下载。
以下仅是粗略配置,详细配置请参考相关手册:•TORQUE:/torquedocs21/•Maui:/products/maui/docs/mauiusers.shtml1.1服务节点安装TORQUE这里假设服务节点的机子名为kd50,其中一个计算节点的名字为node0101。
root@kd50#tar zxvf torque-2.2.1.tar.gzroot@kd50#cd torque-2.2.1root@kd50#./configure–prefix=/opt/torque-2.2.1–with-rcp=rcp上面–with-rcp=rcp设置为利用rsh协议在节点间传输文件,也可设置为–with-rcp=scp以利用scp协议进行传输。
1-Torque1.5中文教程

Torque 1.5 – 介绍教程欢迎来到Torque的世界祝贺你买了我们的Torque 游戏引擎。
这个教程会带领你参观大部分Torque的基本功能,也是你开始自己做游戏的一个起点。
做完这个教程时,我们已经做好了一个简单的3D游戏!在我们进入Torque世界以前,有两点值得注意。
在这个教程中,当你看到诸如“Select File > Open Mission”,它意味着点击File菜单中的“Open Mission”选项。
至于文件的位置,我们假定你把Torque安装在了某个硬盘根目录的/Torque/SDK目录。
第2点,这个教程是写给PC平台用户的,如果你使用的是苹果系统,我们强烈建议你使用两个按键的鼠标,同时用Option键代替Ctrl键的操作。
另外,应用程序文件在Mac中被叫做“二进制文件”的,我们在这里叫“可执行文件”。
开始页在Torque/SDK/example目录下,你会发现名为torqueDemo可执行文件。
当你运行torqueDemo的时候,你会发现如下的开始页面:那顶上的一群图标是到TGE工具和文档的快捷方式。
GUIEditor是制作图形用户界面的工具。
World Editor是创造你的游戏世界并添加物体。
Console是提供通过文字界面访问和控制游戏引擎的脚本。
在这个教程中,我们将要探索GUI和World编辑器,并且我们会快速浏览一下Console。
至于TDN,News,Docs,和Forums图标是关于Torque信息的网页的链接。
Tutorial是本教程的链接。
Options让你能设置普通的图形和声音选项,比如屏幕分辨率或音量等。
最后,Exit 就像你想象中的那样,退出这个引擎。
我们在这个教程中不会深入介绍Torque 的Consol (控制台),只是让你知道它能做什么,点击这个图标,在Consol 窗口你可以看到引擎启动后的一些进程记录。
你不仅仅可以用它来得到文字反馈,你也能直接在文字输入框中输入命令,举个例子,输入“quit();”,当然,这个命令退出了TGE 。
集群GPU队列使用指南

集群GPU队列使用指南1.单个GPU使用首先编写.cu文件,拷贝至用户的主目录下。
假设源文件是,编译出来vectorAdd, 编译指令如下(命令是一整行的):nvcc -I /opt/cuda/include -I /opt/cuda/NVIDIA_GPU_Computing_SDK/C/common/inc -I /opt/cuda/NVIDIA_GPU_Computing_SDK/shared/inc -L /opt/cuda/lib64 -L /opt/cuda/NVIDIA_GPU_Computing_SDK/C/lib -L /opt/cuda/NVIDIA_GPU_Computing_SDK/C/common/lib -L /opt/cuda/NVIDIA_GPU_Computing_SDK/shared/lib -o vectorAdd -lcutil_x86_64 –lcuda 接下来,编写提交的脚本内容如下:#!/bin/bash -x#PBS -N VectorAdd#PBS -l nodes=1:ppn=1:gpus=1#PBS -j oe#PBS -q gpu##define variables#PATH=/opt/cuda/bin:$PATHn_proc=$(cat $PBS_NODEFILE | wc -l)LD_LIBRARY_PATH=/opt/cuda/lib64:/opt/cuda/lib:$LD_LIBRARY_PATH:$LD_LIBRARY_PATH#binary file/home/users/yourname/vectorAddexit 0最后提交任务,qsub 即完成所有操作。
2.多个GPU使用(Cuda + Open MPI)由于目前gpu对列内每个节点有8个cpu核,只有1个gpu卡。
一般只需要一个cpu核绑定一块gpu卡。
所以在申请队列中如果需要同时申请多块gpu卡,那么需要控制好申请的cpu数。
GPU集群使用方法

学校GPU集群使用方法:1.使用一款客户端远程登录软件,如SSH,登录到GPU集群上上图中的Host Name是GPU集群的IP地址:202.38.95.84,User Name是在管理员那里已开好的用户名:XXXXX。
2.点击Connect,弹出出入密码的界面,如下图所示:输入密码:XXXXX,并点击OK,就远程登录到GPU集群上了。
3.GPU集群有很多节点,有些节点上的GPU可能并不是用来进行通用计算的,但1~18号节点是用来进行通用计算的。
如输入:rsh node1并回车就可以登录到节点1。
如下图:4.矩阵乘法程序就放在目录:/home/nic/cbo869/cbo869/MatrixMul下,输入:cd /home/nic/cbo869/cbo869/MatrixMul5.文件夹MatrixMul下的程序matrixmul.cu实现了矩阵乘法,还有一个makefile文件,用来编译的。
输入:Make生成可执行文件matrixmul;最后输入:./ matrixmul就可以运行程序了。
6.GPU上的矩阵乘法代码:#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#include <sys/time.h>// includes, project#include <cutil.h>#include <cuda.h>#include <cuda_runtime.h>// Thread block size#define BLOCK_SIZE 16// Matrix dimensions// (chosen as multiples of the thread block size for simplicity)#define WA (30 * BLOCK_SIZE) // Matrix A width#define HA (50 * BLOCK_SIZE) // Matrix A height#define WB (80 * BLOCK_SIZE) // Matrix B width#define HB W A // Matrix B height#define WC WB // Matrix C width#define HC HA // Matrix C height//sequential code implemented on cpuvoid computeGold(float* C, const float* A, const float* B, int hA, int wA, int wB) {for (int i = 0; i < hA; ++i) {for (int j = 0; j < wB; ++j) {double sum = 0;for (int k = 0; k < wA; ++k) {double a = A[i * wA + k];double b = B[k * wB + j];sum += a * b;}C[i * wB + j] = sum;}}}// Initialize a matrix with random float entries.void randomInit(float* data, int size){for (int i = 0; i < size; ++i)data[i] = rand() / (float)RAND_MAX;}//Compare the cpu's result with gpu'svoid printDiff(float *data1, float *data2, int width, int height) {int i,j,k;int error_count=0;for (j=0; j<height; j++) {for (i=0; i<width; i++) {k = j*width+i;if (data1[k] != data2[k]){printf("diff(%d,%d) CPU=%4.4f, GPU=%4.4f n", i,j, data1[k], data2[k]);error_count++;}}}printf(" nTotal Errors = %d n", error_count);}/////////////////////////////////////////////////////////////////////////////////////////////////////__global__ void matrixMul( float* C, float* A, float* B, int wA, int wB){// Declaration of the shared memory array As used to// store the sub-matrix of A__shared__ float As[BLOCK_SIZE][BLOCK_SIZE];// Declaration of the shared memory array Bs used to// store the sub-matrix of B__shared__ float Bs[BLOCK_SIZE][BLOCK_SIZE];// Block indexint bx = blockIdx.x;int by = blockIdx.y;// Thread indexint tx = threadIdx.x;int ty = threadIdx.y;// Index of the first sub-matrix of A processed by the blockint aBegin = wA * BLOCK_SIZE * by;// Index of the last sub-matrix of A processed by the blockint aEnd = aBegin + wA - 1;// Step size used to iterate through the sub-matrices of Aint aStep = BLOCK_SIZE;// Index of the first sub-matrix of B processed by the blockint bBegin = BLOCK_SIZE * bx;// Step size used to iterate through the sub-matrices of Bint bStep = BLOCK_SIZE * wB;// Csub is used to store the element of the block sub-matrix// that is computed by the threadfloat Csub = 0;// Loop over all the sub-matrices of A and B// required to compute the block sub-matrixfor (int a = aBegin, b = bBegin; a <= aEnd; a += aStep, b += bStep) {// Load the matrices from device memory// to shared memory; each thread loads// one element of each matrixAs[ty][tx] = A[a + wA * ty + tx];Bs[ty][tx] = B[b + wB * ty + tx];// Synchronize to make sure the matrices are loaded__syncthreads();// Multiply the two matrices together;// each thread computes one element// of the block sub-matrixfor (int k = 0; k < BLOCK_SIZE; ++k)Csub += As[ty][k] * Bs[k][tx];// Synchronize to make sure that the preceding// computation is done before loading two new// sub-matrices of A and B in the next iteration__syncthreads();}// Write the block sub-matrix to device memory;// each thread writes one elementint c = wB * BLOCK_SIZE * by + BLOCK_SIZE * bx;C[c + wB * ty + tx] = Csub;}/////////////////////////////////////////////////////////////////////////////////////////////int main(void){// set seed for rand()srand((unsigned)time(NULL));struct timeval tv_start, tv_end;double time_used;// allocate host memory for matrices A and Bint size_A = W A * HA;size_t mem_size_A = sizeof(float) * size_A;float* h_A = (float*) malloc(mem_size_A);int size_B = WB * HB;size_t mem_size_B = sizeof(float) * size_B;float* h_B = (float*) malloc(mem_size_B);// initialize host memoryrandomInit(h_A, size_A);randomInit(h_B, size_B);// allocate device memoryfloat* d_A;cudaMalloc((void**) &d_A, mem_size_A);float* d_B;cudaMalloc((void**) &d_B, mem_size_B);// copy host memory to devicecudaMemcpy(d_A, h_A, mem_size_A, cudaMemcpyHostToDevice) ;cudaMemcpy(d_B, h_B, mem_size_B, cudaMemcpyHostToDevice) ;// allocate device memory for resultint size_C = WC * HC;size_t mem_size_C = sizeof(float) * size_C;float* d_C;cudaMalloc((void**) &d_C, mem_size_C);// allocate host memory for the resultfloat* h_C = (float*) malloc(mem_size_C);// setup execution parametersdim3 BlockDim(BLOCK_SIZE, BLOCK_SIZE);dim3 GridDim(WC / BlockDim.x, HC / BlockDim.y);gettimeofday(&tv_start, NULL);// execute the kernelmatrixMul<<<GridDim, BlockDim>>>(d_C, d_A, d_B, WA, WB); cudaThreadSynchronize();gettimeofday(&tv_end, NULL);time_used=(tv__sec-tv__sec)*1000000+(tv__usec-tv__usec); printf("\nMA(%dx%d) X MB(%dx%d)\n\n", HA, W A, HB, WB);printf("GPU_USE_TIME=%fms\n\n", time_used/1000);// copy result from device to hostcudaMemcpy(h_C, d_C, mem_size_C, cudaMemcpyDeviceToHost) ;// compute reference solutionfloat* reference = (float*) malloc(mem_size_C);gettimeofday(&tv_start, NULL);computeGold(reference, h_A, h_B, HA, W A, WB);gettimeofday(&tv_end, NULL);time_used=(tv__sec-tv__sec)*1000000+(tv__usec-tv__usec); printf("CPU_USE_TIME=%fms\n\n", time_used/1000);// check resultCUTBoolean res = cutCompareL2fe(reference, h_C, size_C, 1e-6f);printf("%s\n\n", (1 == res) ? "Right!" : "Failed!");if (res!=1)printDiff(reference, h_C, WC, HC);// clean up memoryfree(h_A);free(h_B);free(h_C);free(reference);cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);cudaThreadExit();return 0;}。
Tesla GPU 集群服务器使用手册

T esla GPU集群服务器使用手册v0.93 (2010-1-11)一、系统环境简介T esla GPU集群服务器域名为,IP地址为159.226.49.76(暂定),内部用户可以在办公网内直接使用SSH登录该集群,外部用户同样需要经过防火墙身份认证之后(认证过程请参见《深腾7000远程登录指南》)再进行SSH登录。
数据的上传与下载仍然是通过scp或者sftp方式进行。
T esla GPU集群服务器的系统环境如下: 1)硬件环境:● 头节点1个,机器名console,配备一颗Intel Xeon E5504四核处理器,2.0GHz 主频,2*4MB缓存,8G内存,6块300GB SAS硬盘,工作于Raid5模式。
● 计算节点90个,存在两种不同硬件配置,其机器名分别如下:c0101-c0110、c0201-c0203、c0301-c0305(共18个节点)以上节点配置一颗AMD Phenom 9850四核处理器,2.5GHz主频,4*256KB 二级缓存,4MB三级缓存,3块T esla C1060 GPU处理器,8GB内存,一块500GB SATA硬盘。
c0204-c0233、c0401-0442(共72个节点)以上节点配置一颗Intel Xeon E5410四核处理器,2.33GHz主频,2*6MB二级缓存,2块T esla C1060 GPU处理器,8GB内存,一块500GB SATA硬盘。
各节点间通过DDR 4X Infiniband高速网络和千兆以太网进行连接,分别用于计算数据和系统管理信息的通讯。
2)软件环境:RHEL 5.3 x64操作系统,内核版本2.6.18-128.el5。
GNU C/C++/Fortran编译器。
Nvidia CUDA T oolkit 2.1开发工具。
Mvapich/OpenMPI并行编程环境。
Atlas/GotoBlas数学函数库。
T orque/Maui资源管理系统及作业调度器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多媒体计算与通讯实验室GPU集群Torque排队系统使用手册袁平波 2016.5.20本实验室新购进24块K80 tesla GPU。
为了充分利用GPU计算资源,我们利用Torque来管理同学们的计算任务队列。
头结点的IP是192.168.17.240。
下面说明使用本GPU集群的几个步骤。
1.申请帐号.本集群有一个头结点和多个服务结点构成,因此提交计算作业需要在头结点上拥有帐号,需要使用集群的学生需要给我发一个申请邮件,同时cc给自己的导师,在导师批准后相应的帐号会被建立。
2.建立job脚本文件Torque管理系统不能直接提交二进制可执行文件,需要编写一个文本的脚本文件,来描述相关参数情况。
一个示例脚本文件myjob1.pbs如下:#PBS -N myjob1#PBS -o /home/username/myjob1.out#PBS -e /home/username/myjob1.err#PBS -l nodes=1:gpus=1:S#PBS -r ycd $PBS_O_WORKDIRecho Time is `date`echo Directory is $PWDecho This job runs on following nodes:cat $PBS_NODEFILEcat $PBS_GPUFILE./my_proc脚本文件中定义的参数默认是以#PBS开头的。
其中:-N 定义的是job名称,可以随意。
-o 定义程序运行的标准输出文件,如程序中printf打印信息,相当于stdout;-e 定义程序运行时的错误输出文件,相当于stderr。
-l 定义了申请的结点数和gpus数量。
nodes=1代表一个结点,一般申请一个结点,除非采用mpi并行作业;gpus=1定义了申请的GPU数量,根据应用实际使用的gpu数量来确定,S表示job类型,后面有详细描述。
队列系统的默认job请求时间是一周,如果运行的job时间估计会超过,则可以使用下面的参数:#PBS -l nodes=1:gpus=1:S,walltime=300:00:00表示请求300小时的job时间。
-r 表示job立即执行。
my_proc是用户的可执行程序。
需要通过scp或winscp 复制到自己的home目录。
如果程序运行过程中需要读取数据文件和生成数据文件,也需要在运行前后上传和下传。
后面的cat和echo信息是打印出时间、路径、运行节点及GPU分配情况等信息,便于调试。
3.提交作业:qsub$qsub myjob1.pbsmyjob1.pbs 是前一步骤生成的脚本文件。
相应可执行文件和数据文件也必须就位。
4.查看作业:qstat -n上图中165是jobid 运行状态有以下几种状态:C - Job 已经运行结束E - Job 运行结束后退出H - Job 被挂起Q - job 被排队, 可被手动启动或路由R - job 在运行中.T - job 被移动W - job 等待其执行时间到来 (-a 选项设置job启动时间) 其中-n参数可以列出运行job 的结点。
其他常用命令:1)挂起作业:qholdQhold命令可以挂起作业,被挂起的作业将暂时停止执行,可以让其余的作业优先得到资源运行,被挂起的作业在qstat中显示为H状态,下面的命令将挂起id为165的job。
$qhold 1652)取消挂起:qrls被挂起的作业可以重新被运行,如下面的命令将重新运行id为165的job$qrls 1653)终止作业:qdel如果用户想放弃一个作业的执行,可以使用qdel命令,下面的命令将终止id为165的job。
$qdel 1654)查看结点pbsnodes$pbsnodes5)查看空闲结点pbsnodes -l free$pbsnodes –l free5.关于集群环境的说明应同学要求,集群的每一个结点都安装了caffe深度学习的环境。
包括Gcc4.8.5,cmake 3.1.3,python 2.7.5, blas3.4.2,numpy 1.9.1,opencv3.0.0。
头结点torqueServer没有编译环境,也没有GPU卡,如果需要测试自己的代码是否能在集群环境下运行,可以先写一个简单程序在第7结点上试运行:$ssh Gpu107$./myproc.sh #在这里运行你自己的测试程序。
另外,/opt/下面有下载好的caffe-master.zip,可以复制到自己目录下:(以下步骤可以在Gpu107上完成)$cp /opt/caffe-master.zip ~/.a)解压:$unzip caffe-master.zipb)配置并修改config文件$cp Makefile.config.example Makefile.config$vi Makefile.config 修改如下参数BLAS := atlasBLAS_LIB := /usr/lib64/atlasPYTHON_INCLUDE:=/usr/include/python2.7/usr/lib/python2.7/dist-packages/numpy/core/include PYTHON_LIB := /usr/lib64c)编译$make all –j12$make test –j 12$make runtestd)获取数据$ sh data/mnist/get_mnist.she)重建lmdb$ sh examples/mnist/create_mnist.shf)训练数据$ sh examples/mnist/train_lenet.sh也可以直接复制已经解压编译好并下载了数据的文件夹(复制过程中有权限错误,忽略不会影响后序过程),这样可以免去a-d)步骤的编译和数据下载,直接进行e|f),如下:$cp /opt/caffe-master ~/. -R$ sh examples/mnist/create_mnist.sh #重建lmdb$ sh examples/mnist/train_lenet.sh #训练6.关于GPU集群的存储问题用户登录pbs头节点(192.168.16.240)后默认的路径是/home/$USER,但/home下的总空间只有1T,主要用于存放代码等重要文档,同学们在运行代码过程中用到的数据文件尽量不要放在/home下,目前可以用于存放数据的mount点有/data、/data1、/data2、/data3、/data4、/data5、/data6、/data7,每个mount点约1.5T空间(使用df –h查看)。
同学们可以在/data$i($i=1..7)下建立自己的用户名为子目录,对于一些公共测试数据,可以不放在用户子目录下,而直接放在/datai下,供大家使用,避免存放大量重复的数据。
尤其是同一导师的学生,尽量减少重复下载和存储测试数据。
/data$i($i=1..7)是挂接在Gpu10$i结点上的存储,/data 挂接在头结点本地。
因此如果有大量数据需要读写并且对IO 速度有要求的应用,可以考虑把数据存放于某个mount点,比如/data3,然后提交job时使用参数#PBS -l nodes=Gpu103:gpus=1则可以使job运行在Gpu103结点。
这样数据和代码运行于同一节点,IO会避开nfs网络操作。
但指定节点操作削弱了pbs系统的排队功能,可能会导致任务失败。
因此除非有特殊要求,一般不建议这么做。
7.关于GPU集群多核心使用情况使用GPU多核心进行运算,可以让job缩短完成时间,避免过长的等待时间,从而充分发挥GPU的集群优势。
但经过测试表明,如果对显存没有特别大的要求,使用单核心的效率还是比多核心要高,因此大家应根据实际情况决定申请job类型。
另使用多核心需要注意以下几点:1)在申请脚本文件里加入资源申请参数以及打印相应分配的gpu情况,便于调试:#PBS -l nodes=1:gpus=2:Decho This job runs on following nodes and gpus:cat $PBS_NODEFILEcat $PBS_GPUFILE以上是申请一个结点2个GPU核心的参数。
2)在运行的程序脚本中加入调用多GPU参数,例如caffe 中需要加入-gpu=all这样的参数:$caffe train -solver solver.txt -gpu=all如果不加此参数,可能会导致请求的gpu数和实际使用的gpu数不一致,影响排队系统的工作。
3)提交job后可以使用chk_gpu查看占用的GPU情况,使用chk_gpuused <节点名> 查看结点GPU使用率和显存使用情况,节点名为Gpu101(或101)等。
4)如果发现请求的gpu数和实际使用的gpu数不一致的job将被清除。
5)(本节内容自2016.12.9后已经调整,不再启用)由于多个GPU核心是不同的CPU控制,因此在不同的CPU 控制的GPU核心之间是socket连接的,不是PCIe桥接或PCI内部交换的,而caffe等软件目前可能不支持socket连接的多GPU核心运算。
为了解决这个问题,目前做如下规定:(a)使用单核的job必须加参数S,如:#PBS -l nodes=1:gpus=1:S(b)使用双核的job必须加参数D,如:#PBS -l nodes=1:gpus=2:D(c)使用>=3核的job必须加参数M,如:#PBS -l nodes=1:gpus=6:M可以采用命令chk_gpu 来查看各个结点已经使用的GPU 核心详细情况。
由于服务器两CPU管理的GPU并不平均,0-1核心是一个CPU管理,2-7核心是另一个CPU管理。
因此,为了防止job 跨不同CPU管理的核心,作以下要求:对于S、D类型的job 可以随时提交队列进行排队;对于M类型的job (仅5,6,7结点支持)不能轻易排队,必须要看chk_gpu 显示的detail 情况,来决定提交2:M还是6:M类型job。
具体申请原则规定如下:a)S、D 类型job可以随时提交排队;b)对M类型节点,如果有0,1位GPU空闲,则可提交2:M类型job;如果有3~7位GPU空闲,则可提交6:M类型job;如果0~7位GPU都空闲,则必须先提交2:M类型job,再提交6:M类型job,次序不可颠倒。
b)如果有6:M类型job排队,则M型节点2~7位GPU原则上是不允许提交 2:M型job的,如果是暂时占用,那么当6:M 所需要的资源满足时,暂时占用的job即使没有完成,也会被删除。
更新日志:2016.12.9增加了新的结点Gpu108和Gpu109,每个结点8块K80卡,16个GPU核心。