集群信息(逐步增加)
节点 | CPU | 内存 | 显卡 |
---|---|---|---|
iyun105 | 72 核心 | 256 GB | NVIDIA Tesla P100 PCIe 16 GB |
iyun103 | 72 核心 | 256 GB | NVIDIA Tesla P40 24 GB |
通知邮箱为: rainsc@yeah.net
示例调用 sbatch gpu_test103.slurm
#!/bin/bash
# 以上行指定了脚本使用的解释器为 /bin/bash
#SBATCH --job-name=gpu_test # 设置作业名称为 "gpu_test",这个名字会在作业调度系统中显示
#SBATCH --partition=gpu # 指定作业提交到哪个分区(或队列)。这里设置为 "gpu" 分区,意味着该作业需要使用 GPU 资源
#SBATCH --ntasks=1 # 设置并行任务的数量。这里是 1,表示这是一个单任务作业
#SBATCH --cpus-per-task=1 # 为每个任务分配的 CPU 核心数。这里是 1,表示每个任务只需要一个 CPU 核心
#SBATCH --gres=gpu:1 # 通用资源 (Generic Resource, GRES) 请求。这里是请求 1 个 GPU 设备
#SBATCH --output=/media/desk16/SlurmResult/gpu_test_%j.out # 设置标准输出文件的路径和名称。%j 会被替换为作业 ID,确保每个作业的输出文件是唯一的
#SBATCH --error=/media/desk16/SlurmResult/gpu_test_%j.err # 设置标准错误输出文件的路径和名称。同样地,%j 会被替换为作业 ID
#SBATCH --mail-user=接收通知的邮箱号 # 设置接收作业状态邮件通知的邮箱地址。当作业开始、结束或出错时,会向这个邮箱发送通知
#SBATCH --mail-type=ALL #需要发送的邮件类型
#SBATCH --nodelist=iyun103 # 指定作业运行的节点iyun103 或 iyun105
# 需要执行的代码部分
module load python/3.8 # 根据你的环境选择Python版本
source activate pytorch_test # 激活你的Python虚拟环境
python gpu_test.py # 执行你的Python脚本
# 文件 gpu_test.py
import torch
import time
# 确保使用 GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 打印使用的设备
print(f"Using device: {device}")
# 创建两个随机矩阵
a = torch.rand((10000, 10000), device=device)
b = torch.rand((10000, 10000), device=device)
# 测试运行时间
print("Starting matrix multiplication...")
start = time.time()
for i in range(1000):
if i % 100 == 0: # 每100次输出一次日志
print(f"Iteration {i}...")
c = torch.matmul(a, b)
torch.cuda.synchronize() # 确保同步
end = time.time()
# 输出运行时间
print(f"Completed 1000 matrix multiplications.")
print(f"Time taken for 1000 matmul: {end - start} seconds")
提交示例
# 首先激活软件环境
rainsc@iyun105:~$ conda activate pytorch_test
(pytorch_test) rainsc@iyun105:~$ sbatch gpu_test103.slurm
Submitted batch job 234
(pytorch_test) rainsc@iyun105:~$ sbatch gpu_test105.slurm
Submitted batch job 235
节点空闲会有任务开始的提示
查看队列
(pytorch_test) rainsc@iyun105:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
234 gpu gpu_test rainsc R 0:13 1 iyun103
235 gpu gpu_test rainsc R 0:02 1 iyun105
查看任务
(pytorch_test) rainsc@iyun105:~$ sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
235 gpu_test gpu 2 RUNNING 0:0
235.batch batch 2 RUNNING 0:0
conda安装
1. 安装 Miniforge
按照顺序 依次执行
# 下载并安装 Miniforge
wget http://iyun70.com:8011/softs/Miniforge3-Linux-x86_64.sh &&
chmod +x Miniforge3-Linux-x86_64.sh &&
./Miniforge3-Linux-x86_64.sh -b -f -p ~/.miniconda &&
~/.miniconda/bin/mamba init
# 重新加载 Bash
bash
# 关闭自动激活基础环境
conda config --set auto_activate_base false
# 移除 Mamba 启动横幅
mamba activate base
mamba env config vars set MAMBA_NO_BANNER=1
mamba deactivate
mamba activate base
# 删除安装脚本
rm -rf Miniforge3-Linux-x86_64.sh
2. 配置 Conda 源
# 设置 Conda 源
echo "channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud" > ~/.condarc
3. 配置 Pip 源
# 设置 Pip 源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 更新到最新 防止兼容性问题或缺库缺包的问题
conda update conda -y
mamba update mamba -y