申请CPU

集群的计算节点默认不允许用户直接登录,对需要交互式处理的程序,在登录到集群后,使用salloc命令分配节点,然后再ssh到分配的节点上进行处理:

[jessy@workstation ~]$ salloc
salloc: Granted job allocation 684
salloc: Waiting for resource configuration
salloc: Nodes cpu1 are ready for job
[jessy@workstation ~]$ ssh cpu1
Warning: Permanently added 'cpu1,192.168.0.3' (ECDSA) to the list of known hosts.
Last login: Tue Dec  6 20:02:41 2022 from 192.168.0.1
[jessy@cpu1 ~]$ exit
logout
Connection to cpu1 closed.
[jessy@workstation ~]$ exit
salloc: Relinquishing job allocation 684
[jessy@workstation ~]$ 

计算完成后,使用exit命令退出节点,注意需要exit两次,第一次exit是从计算节点退出到登录节点第二次exit是释放所申请的资源。

申请GPU

GPU申请方式同样有两种

  1. 通过sbatch提交作业的方式
    这种方式在我的另一篇文章里已经写过:
    https://blog.csdn.net/qq_43718758/article/details/128129733
  2. 使用salloc交互运行作业
    这里主要介绍如何salloc申请GPU
[jessy@workstation ~]$ salloc -N 1 -n 1 --gres=gpu:1 -t 1:00:00 -p gpu
salloc: Granted job allocation 689
salloc: Waiting for resource configuration
salloc: Nodes gpu1 are ready for job
[jessy@workstation ~]$ ssh gpu1
Warning: Permanently added 'gpu1,192.168.0.4' (ECDSA) to the list of known hosts.
[jessy@gpu1 ~]$ nvidia-smi
Wed Dec  7 17:03:44 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03    Driver Version: 460.91.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 308...  Off  | 00000000:3E:00.0 Off |                  N/A |
| 30%   30C    P8    10W / 350W |      0MiB / 12053MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
[jessy@gpu1 ~]$ 

输入:salloc -N 1 -n 1 --gres=gpu:1 -t 1:00:00 -p gpu
输入:ssh gpu1进入gpu,
此时,输入nvidia-smi就可以查看显卡了
同样的,退出时需要输入两次exit

[jessy@gpu1 ~]$ exit
logout
Connection to gpu1 closed.
[jessy@workstation ~]$ exit
salloc: Relinquishing job allocation 691
[jessy@workstation ~]$ 

以下是申请gpu命令的几个变形

salloc -N 1 -n 2 --gres=gpu:1 -p gpu
用于 SLURM 集群的 SLURM 作业提交模板
这些模板应该立即在本地批处理系统上工作。 请注意,您需要替换各种路径名和用户名字段以满足您的要求。
 如果您有任何问题,请给我发电子邮件打开一张票
要将文件提交到批处理系统,请使用以下命令:
 $ sbatch
 要检查队列状态,请使用:
 $squeue
 取消作业
                                    WLM-运营商
Singularity-cri 和 wlm-operator 项目由 Sylabs 创建,用于探索 Kubernetes 和 HPC 世界之间的交互。 2020 年,我们没有将我们的精力分散在大量项目上,而是专注于 Singularity 本身和我们的支持服务。 我们还期待在 2021 年推出新功能和技术。
 在这一点上,我们已经归档了存储库,以表明它们没有处于积极的开发或维护之中。 我们认识到对奇点cri和wlm-operator仍然有兴趣,我们希望这些项目能够在社区中找到可以进一步开发和维护它们的住所。 该代码在 Apache License 2.0 下开源,以兼容 k8s 生态系统中的其他项目。
 如果您有兴趣为这些项目建立新家,请通过与我们。
 WLM operator是 Kubernetes operator 实现,能够提交和监控 WLM 作业,同时使用所有 Ku
                                    我需要在slurm上运行10000作业(假设每个作业需要30分钟)。目前,计划是用一个作业阵列,并行使用250个核心,如下所示:sbatch --array=0-10000%250 array_script.sh args不幸的是,系统管理员没有更改slurm的MaxArraySize(从默认的1001)。为了“避开”这个问题,我计划将整个工作分成10个部分,并以某种方式安排每一个部分,以便在前...
                                    本文介绍了如何在多个GPU上使用DDP分发您的训练。DDP和DP之间的主要区别在于定义通信参数,如world_size、ranks和URL。我们还介绍了Slurm以及如何使用Submitit实现脚本生成过程的自动化。基于Slurm的工作和本地培训的工作都结合在一个易于使用的模板下。
                                    在GPU集群中,会有不同级别的用户,huge(最高级用户)、large(高级用户)、normal(普通用户),用户的级别不同,权限也不同。out.log 2> &1&	# 指定输出日志,不挂断运行命令,当用户退出或终端关闭时,程序仍然运行, out.log是命令行中的输出日志。关于VS Code如何使用ssh远程连接可以参考这篇文章。
                                    踩过的坑:如果输入module avail显示command module not found,则先输入source path/path/module.sh(一般这里路径会在连接服务器时有提示),再输入module avail。文件的配置模板如下:(编辑器,编辑脚本中第三行,将xxx改为实际用conda创建的虚拟环境名,最后一行python命令后xxx.py修改为自己的代码文件或完整命令即可)点击桌面SSH图标,显示当前账号可访问的云服务器,点击想要连接的服务器。jobid是指作业号,
partition:分区,作业需在特定分区中运行
QOS:服务质量,可理解为用户可使用的 CPU、内存等资源限制
tasks:任务数,默认一个任务使用一个 cpu 核,可理解为作业所需的 cpu 核数
socket:cpu 插槽,可理解为物理 cpu 颗数
stdout:标准输出文件,程序运行正常时输出信息的文件,一般指输出到屏幕的信息
stderr:标准错误文件,程序运行
1. 安装ubuntu 20.04
随便网上搜个教程就行,u盘制作启动盘,然后重启狂按del(看自己设备是哪个键),通过u盘启动。
如果重装之后进不了BIOS,那么按照下面这篇博客的来:
解决安装 Ubuntu 后无法进入BIOS、UEFI 和Grub 引导
2. 配置apt source,ssh,make,etc.
装好之后先给apt换个源
## 备份source
cp /etc/apt/sources.list /etc/apt/sources.list.b
                                    提交交互式任务
交互式任务是一种特殊的队列任务,在该模式下,用户可以直接登录到计算节点,此后 所有的操作都在这个节点上进行。这个功能主要是方便用户在服务器上调试程序, 以便能够实时看到程序的输出。
我们需要使用 salloc 命令来分配交互式任务所需的资源,它的语法为
$ salloc [申请资源]
其中,用户需要以选项的方式指定申请的资源,这些选项与 SLURM 脚本中的选项基本 相同。常用选项为:
-N <节点数量>
--cpus-per-task=<单进程 CPU 核心数>