【操作系统】实验室集群使用方法

本文档详细介绍了在高性能计算(HPC)环境中使用脚本提交GPU作业的步骤,包括编写脚本文件、指定环境、设置CPU核数以及如何在代码中选择GPU设备。还提供了错误处理和资源监控的方法,强调了CPU核数对运算速度的影响,并给出了资源指定的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:集群初始的base环境:torch1.8.1+cu111 python3.8.5

第一步:编写脚本文件(采用脚本提交模式提交作业)

1.1创建并编写脚本文件

脚本格式1 日期:2022.03.11

#!/bin/sh
#JSUB -q normal
#JSUB -m gpu02
#JSUB -n 2
#JSUB -e error.%J
#JSUB -o output.%J
#JSUB -J task1
source /hpcfiles/users/cc/.conda/envs/chenyun python
python main.py

其中source 后面的环境获取方式如下

方法1:
(py37torch190) [cc@master01 ~]$ conda info --envs
# conda environments:
#
base                     /apps/software/anaconda3
chenyun                  /hpcfiles/users/cc/.conda/envs/chenyun
py37th171                /hpcfiles/users/cc/.conda/envs/py37th171
py37torch190          *  /hpcfiles/users/cc/.conda/envs/py37torch190
pytorch181               /hpcfiles/users/cc/.conda/envs/pytorch181
tf20                     /hpcfiles/users/cc/.conda/envs/tf20
# 就是选择你要运行程序所使用的python解释器来自于哪个字环境,注意在显示的目录后面加上/bin,然后再空格接上python,如下所示:
/hpcfiles/users/cc/.conda/envs/py37torch190/bin python
方法2:
进入conda env list中列出的子环境,然后输入which python
(py37torch190) [cc@master01 HGANMDA-cc]$ which python
~/.conda/envs/py37torch190/bin/python
此时,source后面的内容就把最后一个/换成空格:
source ~/.conda/envs/py37torch190/bin/python

其中,~其实代表的是根目录,这里是/hpcfiles/users/cc,每个用户不同,可以cd ~查看一下你的用户根目录。

脚本格式2

#!/bin/sh
#JSUB -q normal
#JSUB -n 2
#JSUB -e error.%J
#JSUB -o output.%J
#JSUB -J task1
~/.conda/envs/py37torch190/bin/python main.py
# 其中python环境指定获取方式为,在激活的conda子环境下输入which python 来找
(py37torch190) [cc@master01 HGANMDA-cc]$ which python
~/.conda/envs/py37torch190/bin/python
此时
#这里 ~/.conda/envs/py37torch190/bin/python 即为绝对路径上的编译器

脚本格式3

#!/bin/sh
#JSUB -m gpu02
#JSUB -q normal
#JSUB -n 2
#JSUB -e ./result/error-wfy.%J
#JSUB -o ./result/output-wfy.%J
#JSUB -J wfy-head2
source /apps/software/anaconda3/bin/activate py37th111cuda
python main.py

这种方式source /apps/software/anaconda3/bin/activate 
#这句话就是用来指定环境的,其中py37th111cuda就是我的conda子环境,因此只需要改动py37th111cuda子环境即可

1.2上述脚本文件内容解释

#!/bin/sh
#JSUB -q normal 
#JSUB -n 2
#JSUB -e error.%J #可以重定位./result/error.%J
#JSUB -o output.%J #可以重定位
#JSUB -J task1
source /hpcfiles/users/cc/.conda/envs/py37torch190/bin python
python main.py

vim test1.sh
输入以下内容
#!/bin/sh
#JSUB -m gpu02 #指定使用哪一块GPU,可以提前去系统上看一下,哪一块还有显存算力
#JSUB -q normal #任务提交队列,默认即可,无需改动
#JSUB -n 2 #指定执行该任务的CPU数目 2-4个即可
#JSUB -e error.%J #错误信息输出到 error.%J 文件中,%J代表作业号
#JSUB -o output.%J #正确信息输出到 output.%J 文件中
#JSUB -J my_job #指定作业名字,方便辨识作业
source /apps/software/anaconda3/bin/activate pyth37 #用于指定运行作业的python环境,可使用conda info --envs命令来查看你的conda当中有哪些可以指定的环境
python src/main_pytorch.py --input data/gen_disease_idx_mul --schema mirna-disease-mirna,disease-mirna-disease >> train.log

** 注意,其中">> train.log"表示将训练过程中print的结果重定向到train.log文件当中,如果不写,控制台内容可以在error.作业号文件当中查看 ; python 文件名也可以写成./r 等其他执行命令脚本
**

1.3 到底用几个cpu核

经过测试,用1-2个核就可以了,核数多了并不能加快运算,只是占用设备…
在这里插入图片描述
测试实验2

作业306-unet-batchsize=2 cpu=1 时间:29mins
作用314-unet-batchsize=4 cpu=1 时间:24mins
作业315-unet-batchsize=4 cpu=3 时间:30mins

可得出结论cpu设计1-2即可,不影响运行,除非要占用空间!!
batchsize是有效的。

第二步:提交作业

jsub <脚本名.sh #提交当前指令所在路径下的脚本文件,
jsub <./test1.sh #将当前相对路径下的test1.sh的shell命令脚本提交到队列当中,运行脚本中的作业执行命令

第三步:查看作业完成状态

创建快捷方式-查询GPU

## 查询gpu
alias gpu01='jexec -m gpu01 nvidia-smi'
alias gpu02='jexec -m gpu02 nvidia-smi'

资源查看

jhosts #查看可用的cpu资源
jhosts attrib -l #查看所有资源包含cpu、内存、显卡等资源
jhosts attrib -l hostname #查看指定机器的资源情况,hostname是指定机器的名字,例如:gpu01

作业查看

jjobs ##不使用参数,显示目前正在排队或运行的作业
jjobs -a #显示最近完成的作业及正在运行或排队的作业
jjobs <作业号> # 例如,jjobs 110,显示100号指定作业的状态
jjobs -l 410 #显示指定作业的详细信息,后面的数字是作业的编号,你可以修改

jjobs -u all # 查看所有人的作业以及使用使用的资源数

终止作业

jctrl kill <作业号> #强制杀掉指定的作业

第四步:资源信息与资源指定

资源信息

命令行输入:jhosts attrib -l 后可以看到:
整个算力集群共2个GPU服务器:gpu01和gpu02,每台有32个cpu核心+两块特斯拉v100s-32GB,分别为cuda:0和cuda:1,每台的32个CPU用完就会锁住,因此一个作业用2个cpu核心就行,多了也只是占用,不会提升速度,除非任务量很大,也很着急,怕资源被占用,可以考虑用4个。
在这里插入图片描述
也可以查看单独一台gpu服务器的内存情况
在这里插入图片描述

如何在脚本中指定gpu服务器,在代码中指定cuda0或者cuda1

脚本指定gpu服务器

在脚本中添加这一句#JSUB -m gpu01,即指定gpu01服务器

#!/bin/sh
#JSUB -m gpu01
#JSUB -q normal
#JSUB -n 2
#JSUB -e ./result/error-wfy.%J
#JSUB -o ./result/output-wfy.%J
#JSUB -J wfy-head2
source /apps/software/anaconda3/bin/activate py37th111cuda
python main.py

代码中指定GPU卡:cuda:0还是cuda:1,及GPU0中的哪张卡

cuda()和to(device)这两个方法的作用是将模型中的参数和计算转移到指定的设备上,使得模型能够在指定的设备上进行计算。其中,model.to(device) 可以将模型的参数和计算转移到任何指定的设备上,而 model.cuda() 只能将模型的参数和计算转移到 GPU 上进行计算。

方法1-环境变量指定
#这句话放在train.py文件的开头即可设定程序可见的gpu
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '1' 
 # 设置程序可见的gpu并按照所示顺序从0-n编号,打印device时只显示cuda,因为其他的不可见了
# 1说明指定cuda:1,一共两块显卡,另一块就是cuda:0,一台gpu01和gpu02分别有两块卡。


# 这是设置运算环境的代码
if torch.cuda.is_available():
     context = torch.device('cuda')
     print("driver type::",context)
 else:
     context = torch.device('cpu')
     print("driver type:",context)
 # 这是设置运算环境的代码简写
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
方法2-device指定
# 将构建的tensor或者模型放到指定设备上(GPU)
torch.device('cuda',0) #这里的0指的是设备的序号
torch.device('cuda:0')
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 测试:
print('torch.cuda.is_available()',torch.cuda.is_available())  #输出:torch.cuda.is_available() True
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print('device:',device)  # 输出:device: cuda:0

常见错误记录

  1. 如果用官网conda安装pytorch出错,尝试用官网的pip安装

  2. RuntimeError: CUDA error: out of memory

RuntimeError: CUDA error: out of memory. nvidia-persistenced failed to initialize. Check syslog for more details.

需修改代码中的cuda编号,切换GPU或者改小batch_size即可解决
os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘1’
os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘0’
或者
device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
device = torch.device(“cuda:1” if torch.cuda.is_available() else “cpu”)

注意:

#添加GPU设备语句
os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘1’
os.environ[‘KMP_DUPLICATE_LIB_OK’] = ‘TRUE’ #在代码开始之前,头文件导入后添加

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五阿哥爱跳舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值