背景

网上教程老旧,不适用。

详细步骤

1、安装slurm

sudo apt install slurm-wlm slurm-wlm-doc -y

检查是否安装成功:

slurmd --version

如果得到slurm-wlm 23.11.4,表明安装成功。
2、配置slurm。
使用命令:

sudo vi /etc/slurm/slurm.conf

在其中输入以下内容:

ClusterName=cool  [自定义集群名称]
ControlMachine=master
#ControlAddr=
#BackupController=
#BackupAddr=
#
MailProg=/usr/bin/s-nail
SlurmUser=slurm
#SlurmdUser=slurm
SlurmctldPort=6817

SlurmdPort=6818
AuthType=auth/munge
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
#PluginDir=
#FirstJobId=
ReturnToService=0
#MaxJobCount=
#PlugStackConfig=
#PropagatePrioProcess=
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#Prolog=
#Epilog=
#SrunProlog=
#SrunEpilog=
#TaskProlog=
#TaskEpilog=
#TaskPlugin=
#TrackWCKey=no
#TreeWidth=50
#TmpFS=
#UsePAM=
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
#
# SCHEDULING
SchedulerType=sched/backfill
#SchedulerAuth=
#SelectType=select/linear
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING

SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
JobCompType=jobcomp/none
#JobCompLoc=
#
# ACCOUNTING
#JobAcctGatherType=jobacct_gather/linux
#JobAcctGatherFrequency=30
#
#AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageHost=
#AccountingStorageLoc=
#AccountingStoragePass=
#AccountingStorageUser=
#
# COMPUTE NODES

PartitionName=CPU Nodes=master Default=NO MaxTime=INFINITE State=UP
#NodeName=master State=UNKNOWN
NodeName=master Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN

其中,要修改以下参数,请勿和上述配置完全一样;
ControlMachine=你的主机名,查看方法hostname
PartitionName=队列名称,可以自己起,比如改为CPU
Nodes=你的主机名,查看方法hostname
NodeName=你的主机名,查看方法hostname
Sockets=你服务器cpu的个数,查看方法cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
CoresPerSocket=每个cpu的核数,查看方法cat /proc/cpuinfo| grep "cpu cores"| uniq
ThreadsPerCore填写方法:
运行下面的脚本;

#!/bin/bash
cpunum=`cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l`
echo "CPU 个数: $cpunum";
cpuhx=`cat /proc/cpuinfo | grep "cores" | uniq | awk -F":" '{print $2}'`
echo "CPU 核心数:$cpuhx" ; 
cpuxc=`cat /proc/cpuinfo | grep "processor" | wc -l`
echo "CPU 线程数:$cpuxc" ;

if [[ `expr $cpunum\*$[cpuhx*2] ` -eq $cpuxc ]];
then
    echo "开启了超线程"
else
    echo "未开启超线程"
fi

如果开启了超线程填2,否则填1.
3、创建文件夹。使用以下命令,创建所需的文件夹:

sudo mkdir -p /var/spool/slurmd
sudo mkdir -p /var/spool/slurmctld
sudo chown -R slurm:slurm /var/spool/slurmd
sudo chown -R slurm:slurm /var/spool/slurmctld
sudo chmod -R 755  /var/spool/slurmd
sudo chmod -R 755 /var/spool/slurmctld

4、启动slurm

sudo systemctl enable slurmctld --now
sudo systemctl enable slurmd --now

5、确保节点状态初始化

sudo scontrol update NodeName=ubuntuseerver State=RESUME

6、测试是否成功

srun --partition=CPU --time=00:01:00 --ntasks=1 hostname

如果输出主机名则证明成功。

报错处理

1、如果在启动服务的时候报错,重复执行以下内容;

sudo chmod -R 755  /var/spool/slurmd
sudo chmod -R 755 /var/spool/slurmctld

然后重新启动服务

sudo systemctl restart slurmd
sudo systemctl restart slurmctld

其他报错,欢迎联系作者询问。

备注

不同Ubuntu可能有所不同,本文适用于Ubuntu 24.04

参考资料

https://wxyhgk.com/article/ubuntu-slurm

1 硬件配置

使用学校的集群,相关配置如下:
CPU:鲲鹏920
NPU:昇腾910B
操作系统:openEuler 22.03

2 安装版本

根据昇腾官方gitee上的信息,Pytoch 2.1.0是长期支持版本,因此选择安装这一版本,从而最大限度避坑。
本教程选择的版本如下:
Python:3.9
Pytorch:2.1.0
选择依据:
1.PNG
2.PNG
参考链接:https://gitee.com/ascend/pytorch

3 安装步骤

1、新建conda环境。

conda create -n pytorch python=3.9

2、在新建好的conda环境中,安装基础的依赖。

pip install attrs cython numpy==1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf==3.20 scipy requests absl-py --user

参考链接:
https://www.hiascend.com/document/detail/zh/canncommercial/80RC3/softwareinst/instg/instg_0006.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit
3、安装Pytoch

wget https://download.pytorch.org/whl/cpu/torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=de7d63c6ecece118684415a3dbd4805af4a4c1ee1490cccf7405d8c240a481b4

在上面建好的环境中pip install下载好的包。
4、安装pytorch-npu
方法一:手动查找对应关系。
首先确定自己的CANN版本。如果不知道用的是哪一个CANN,可以先Python一下,import torch这个包,然后看告警信息是哪个版本的。
确定好CANN版本后,从下表中手动查找对应的torch_npu版本。
3.PNG
方法二:自动匹配。
从以下网站,根据匹配结果下载:https://www.hiascend.com/developer/download/community/result?module=pt+cann&pt=6.0.RC3.beta1&cann=8.0.RC3.beta1
下载好指定版本后,使用pip install安装下载好的包即可
5、测试。
使用以下命令测试,如果正常输出结果,说明环境搭建成功。

python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

结果如下:
4.PNG

0 相关信息

Ubuntu Server 24.04

1 工具准备

sudo apt install network-manager wpasupplicant wireless-tools

2 过程

查看无线网卡名称:

ip addr

1.PNG
一般wl开头的为无线网卡。比如,我这里的无线网卡就是wlo1
扫描无线网络:

sudo iwlist wlo1 scan | grep ESSID  # 注意将 wlan0 换成实际无线网卡的设备名

结果如下:
2.PNG
记录下想要链接的wifi名称。
编辑配置文件:

cd /etc/netplan/
ls

通过以上命令查看配置文件,比如我这里显示配置文件名为50-cloud-init.yaml。然后执行以下命令:

sudo vim /etc/netplan/50-cloud-init.yaml

在下面添加wifis,将配置文件改为类似以下格式:

network:
  version: 2
  renderer: NetworkManager
  
  ethernets:
    eth0:
      dhcp4: true
      optional: true
      
  wifis:
    wlan0:
      dhcp4: true
      access-points:
        "wifi_name1":
          password: "mypassword"
        "666":
          password: "66666666"

修改完成后保存。
下面连接网络。首先使用以下命令进行检查:

sudo netplan try  # 检查配置文件中是否有语法错误、尝试用新的配置

注意:如果输入sudo netplan try卡顿了,退出了ssh连接,说明你的配置有误,可能需要重启服务器才能恢复,所以提交前请先检查。
结果如下,表示没有错误:
3.PNG
直接按下回车键,然后输入以下命令:

sudo netplan generate  # 生成 renderers 所需的配置文件
sudo netplan apply  # 应用 netplan 新配置,将自动重启 network-manager 使修改生效

连接网络即可成功。
使用以下命令检查是否连接到网络:

ip addr

如果已经连接到网络,输出内容中会有WiFi信息。
如果仍未连接到网络,请执行以下命令尝试启动无线网卡,然后遵循上述步骤重新配置:

sudo ip link set wlo1 up

参考链接

https://muzing.top/posts/9cbf7452/

1 思路

使用systemd用户服务

2 过程

1、创建用户服务文件:

mkdir -p ~/.config/systemd/user
vim ~/.config/systemd/user/my_app.service

用户服务文件模板:

[Unit]
Description=SSH_ct
After=default.target

[Service]
ExecStart=/home/wlg/Softwares/wyc/wyc_linux_64 -token=xx
Restart=always
Environment=PATH=/usr/bin:/bin
WorkingDirectory=/home/wlg/Softwares/wyc
StandardOutput=file:/home/wlg/Softwares/wyc/sshlog.out
StandardError=file:/home/wlg/Softwares/wyc/sshlog.err

[Install]
WantedBy=default.target

上述文件是我想使用的一个内网穿透服务开机自启的服务配置。
其中,比较重要的项目如下:
Description=SSH_ct:描述该服务的功能。
After=default.target:指定服务的启动顺序,表示此服务应该在 default.target 启动后再启动。default.target 通常是用户环境的默认目标.
ExecStart:指定启动服务时要执行的命令。同时根据命令的要求直接传递参数。
Restart:定义服务失败后的重启策略。always 表示服务无论是失败还是正常退出,都会自动重启。
Environment:设置服务运行时的环境变量。
WorkingDirectory:指定服务的工作目录。如果命令需要相对路径访问文件或其他资源,这一点很重要。
StandardOutput:将服务的标准输出 (stdout) 重定向到指定的文件
StandardError:将服务的标准错误输出 (stderr) 重定向到指定的文件
WantedBy:指定该服务在哪个目标(target)下启用。default.target 是系统的默认目标,通常对应于多用户图形界面或命令行登录环境。当启用服务时,会创建一个符号链接,将服务关联到 default.target.wants/ 目录中,从而实现开机启动。
2、刷新 systemd 配置:

systemctl --user daemon-reload

3、启动服务

systemctl --user start SSH_ct.service

4、设置开机自启动:

systemctl --user enable SSH_ct.service

5、检查服务状态:

systemctl --user status SSH_ct.service

3 整体流程

整体流程
当系统达到 default.target 时(通常是启动完成后,进入多用户环境),systemd 会检查 default.target.wants/ 下的服务列表。
它会按照 After=default.target 的依赖顺序启动 SSH_ct 服务。
服务会执行 ExecStart 定义的命令,日志会根据 StandardOutput 和 StandardError 重定向到对应文件。
如果服务意外退出,Restart=always 会让服务自动重启。

4 如何服务需要使用root权限

配置模板:

[Unit]
Description=Resume SLURM nodes on startup
After=network.target slurmctld.service
Requires=slurmctld.service

[Service]
Type=oneshot
ExecStart=/usr/bin/scontrol update NodeName=ubuntu_server State=RESUME
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

注意服务配置文件放置位置不同:创建 systemd 服务文件 编辑 /etc/systemd/system/slurm_resume.service(需要 root 权限)

0 问题描述

在使用pip install -e . --no-build-isolation -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple安装和编译包时,报You're trying to build PyTorch with a too old version of GCC. We need GCC or later.问题,同时无权限安装GCC和G++

1 解决方案

1.1 激活虚拟环境

conda activate {myenv}

1.2 安装cxx-compiler

在安装前,可以先使用
conda search cxx-compiler -c conda-forge查找自己想要的版本。
然后使用命令conda install -c conda-forge cxx-compiler进行安装。

1.3 修改环境变量

export PATH=/{PATH_TO_YOUR_ENV}/bin/:$PATH
export PATH=/{PATH_TO_YOUR_ENV}/lib/:$PATH

1.4 查看gcc版本

使用gcc -v即可查看版本。

2 参考资料

https://blog.csdn.net/qq_43481884/article/details/135916205