批量提交任务示例:
job_cpu.sh
#!/bin/bash
### 设置该作业的作业名
#SBATCH --job-name=ikdmmt
### 指定该作业需要2个节点数
#SBATCH --nodes=2
### 该作业需要8个CPU
#SBATCH --ntasks=8
### 作业脚本中的输出文件
#SBATCH --output=job_cpu.%j.out
### 程序的执行命令
#nvidia-smi
cd /home/pengru/inverseKD-mmt/
python demo.py
job_gpu.sh
#!/bin/bash
### 该作业的作业名
#SBATCH --job-name=ikdmmt
### 该作业需要1个节点
#SBATCH --nodes=1
### 该作业需要1个CPU
#SBATCH --ntasks=1
### 申请1块GPU卡
#SBATCH --gres=gpu:4
### 作业脚本中的输出文件
#SBATCH --output=job_gpu.%j.out
### 将作业提交到对应分区;
#SBATCH --partition=gpu
### 程序的执行命令
nvidia-smi
cd /home/pengru/inverseKD-mmt/
python demo.py
Tmux使用教程:
Tmux使用教程1: 终端工具推荐-TMUX_FPGA-ALGOer的博客-CSDN博客
Tmux使用教程2: 我的tmux之旅(tmux使用详解) - 小莫的博客-fighting(技术分享、生活随笔)
交互式提交任务:
原理:开一个后台申请到一个GPU节点后,其他后台都可以连这个GPU节点;
一次最多10个后台连该GPU节点,否则服务器会断开;
- 用sinfo查看哪些GPU是idle(空闲状态);
- 用Tmux 打开主后台窗口: tmux new -s gpu1;
- 指定一个GPU节点:salloc --nodelist gpu1 --gres=gpu:x --ntasks x (取决于在gpu1下跑几份代码*4) 指定一个CPU节点: salloc --nodelist cpu10 --ntasks 48;
- ssh gpu1 / ssh cpu1;
- 若切换虚拟环境:conda activate $envs_name;
- 查看显卡占用情况:watch -n 1 nvidia-smi;
- 注:该后台不跑代码,用Tmux Ctrl+b, d 分离出该会话;
--------------------------------------------------------------------------------------------
- 用Tmux打开新的后台窗口:tmux new -s demo;
- 连接之前分配的GPU节点:ssh gpu1;
- 若切换虚拟环境:conda activate $envs_name;
- 查看显卡占用情况 watch -n 1 nvidia-smi;
- cd到代码目录;
- 修改脚本中CUDA设备,CUDA_VISIBLE_DEVICES=xx,运行代码1 code.sh;
- Tmux Ctrl+b d 分离出该会话;
--------------------------------------------------------------------------------------------
- Tmux关闭后台窗口;(tmux kill-sesssion -t demo,销毁所有会话并停止:tmux kill-server)
- exit两次退出节点,释放所申请资源;
- Scancel jobID;