0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用NVIDIA Jetson Xavier NX构建四节点集群

星星科技指导员 来源:NVIDIA 作者:Steven McIntire 2022-08-15 17:04 次阅读

跟随大型超级计算机(如 NVIDIA DGX SuperPOD )的脚步,本文将引导您完成创建适合您桌面的小型集群的过程。以下是完成该项目的推荐硬件和软件。该小规模集群可用于加速人工智能AI )和深度学习( DL )工作流的训练和推理,包括使用来自 NVIDIA NGC 目录等来源的容器化环境。

硬件:

4 倍 NVIDIA Jetson Xavier NX 开发工具包

4x MicroSD 卡( 128GB 以上)

1x SD + microSD 读卡器

1x (可选) Seeed Studio Jetson Mate Cluster Mini

1x (可选) USB-C PD 电源( 90w 以上)

1x (可选) USB-C PD 100w 电力电缆

虽然 Seeed Studio Jetson Mate 、 USB-C PD 电源和 USB-C 电缆不是必需的,但在本文中使用了它们,强烈建议将其用于整洁紧凑的桌面集群解决方案。

软件:

Jetson NX Jetpack 4.6

Slurm 20.11

Pyxis 0.11

Enroot 3.3.1

有关更多信息,请参阅 NVIDIA Jetson Xavier NX 开发工具包 。

安装

将 JetPack 图像写入 microSD 卡,并执行初始 JetPack 配置步骤:

本文的第一次迭代针对 Slurm 控制节点(slurm-control)。配置第一个节点后,可以选择为每个模块重复每个步骤,也可以为其他模块克隆第一个 microSD 卡;稍后将对此进行详细介绍。

在遵循上述入门指南的同时:

跳过无线网络设置部分,因为将使用有线连接。

选择用户名和密码时,请选择您喜欢的,并在所有节点上保持一致。

将计算机名称设置为当前使用的目标节点,第一个是slurm-control。

当提示选择 Nvpmodel Mode 的值时,选择MODE_20W_6CORE以获得最大性能。

刷新并完成《入门指南》后,运行以下命令:

echo "`id -nu` ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/`id -nu`
sudo systemctl mask snapd.service apt-daily.service apt-daily-upgrade.service
sudo systemctl mask apt-daily.timer apt-daily-upgrade.timer
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y

禁用 NetworkManager ,启用 systemd networkd ,并配置网络[DHCP]:

sudo systemctl disable NetworkManager.service NetworkManager-wait-online.service NetworkManager-dispatcher.service network-manager.service
sudo systemctl mask avahi-daemon
sudo systemctl enable systemd-networkd
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
cat << EOF | sudo tee /etc/systemd/network/eth0.network > /dev/null [Match]
Name=eth0 [Network]
DHCP=ipv4
MulticastDNS=yes [DHCP]
UseHostname=false
UseDomains=false
EOF sudo sed -i "/#MulticastDNS=/c\MulticastDNS=yes" /etc/systemd/resolved.conf
sudo sed -i "/#Domains=/c\Domains=local" /etc/systemd/resolved.conf

配置节点主机名:

如果您已经在初始 JetPack 设置中设置了主机名,则可以跳过此步骤。

[slurm-control]

sudo hostnamectl set-hostname slurm-control
sudo sed -i "s/127\.0\.1\.1.*/127\.0\.1\.1\t`hostname`/" /etc/hosts

[compute-node]

计算节点应遵循特定的命名约定,以便通过 Slurm 轻松寻址。使用一致标识符,后跟顺序递增的数字(例如, node1 、 node2 等)。在本文中,我建议对计算节点使用nx1nx2nx3。但是,您可以选择遵循类似约定的任何内容。

sudo hostnamectl set-hostname nx[1-3]
sudo sed -i "s/127\.0\.1\.1.*/127\.0\.1\.1\t`hostname`/" /etc/hosts

为 Munge 和 Slurm 创建用户和组:

sudo groupadd -g 1001 munge
sudo useradd -m -c "MUNGE" -d /var/lib/munge -u 1001 -g munge -s /sbin/nologin munge
sudo groupadd -g 1002 slurm
sudo useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u 1002 -g slurm -s /bin/bash slurm

安装 Munge :

sudo apt install libssl-dev -y
git clone https://github.com/dun/munge
cd munge ./bootstrap
./configure
sudo make install -j6
sudo ldconfig
sudo mkdir -m0755 -pv /usr/local/var/run/munge
sudo chown -R munge: /usr/local/etc/munge /usr/local/var/run/munge /usr/local/var/log/munge

创建或复制 Munge 加密密钥:

[slurm-control]

sudo -u munge mungekey --verbose

[compute-node]

sudo sftp -s 'sudo /usr/lib/openssh/sftp-server' `id -nu`@slurm-control <

启动 Munge 并测试本地安装:

sudo systemctl enable munge
sudo systemctl start munge
munge -n | unmunge

预期结果:STATUS: Success (0)

验证 Munge 加密密钥是否从计算节点匹配到 slurm 控件:

[compute-node]

munge -n | ssh slurm-control unmunge

预期结果:STATUS: Success (0)

安装 Slurm ( 20.11.9 ):

cd ~
wget https://download.schedmd.com/slurm/slurm-20.11-latest.tar.bz2
tar -xjvf slurm-20.11-latest.tar.bz2
cd slurm-20.11.9
./configure --prefix=/usr/local
sudo make install -j6

索引 Slurm 共享对象并复制 systemd 服务文件:

sudo ldconfig -n /usr/local/lib/slurm
sudo cp etc/*.service /lib/systemd/system

为 Slurm 创建目录并应用权限:

sudo mkdir -pv /usr/local/var/{log,run,spool} /usr/local/var/spool/{slurmctld,slurmd}
sudo chown slurm:root /usr/local/var/spool/slurm*
sudo chmod 0744 /usr/local/var/spool/slurm*

为所有节点创建 Slurm 配置文件:

对于这一步,您可以按照包含的命令操作,并为集群使用以下配置文件(推荐)。要自定义与 Slurm 相关的变量,请使用configuration tool

cat << EOF | sudo tee /usr/local/etc/slurm.conf > /dev/null
#slurm.conf for all nodes#
ClusterName=SlurmNX
SlurmctldHost=slurm-control
MpiDefault=none
ProctrackType=proctrack/pgid
ReturnToService=2
SlurmctldPidFile=/usr/local/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/usr/local/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/usr/local/var/spool/slurmd
SlurmUser=slurm
StateSaveLocation=/usr/local/var/spool/slurmctld
SwitchType=switch/none
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
JobCompType=jobcomp/none
SlurmctldDebug=info
SlurmctldLogFile=/usr/local/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/usr/local/var/log/slurmd.log NodeName=nx[1-3] RealMemory=7000 Sockets=1 CoresPerSocket=6 ThreadsPerCore=1 State=UNKNOWN
PartitionName=compute Nodes=ALL Default=YES MaxTime=INFINITE State=UP EOF

安装 Enroot 3.3.1 :

cd ~
sudo apt install curl jq parallel zstd -y
arch=$(dpkg --print-architecture)curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.3.1/enroot_3.3.1-1_${arch}.deb
sudo dpkg -i enroot_3.3.1-1_${arch}.deb

安装 Pyxis ( 0.13 ):

git clone https://github.com/NVIDIA/pyxis
cd pyxis
sudo make install -j6

创建 Pyxis 插件目录和配置文件:

sudo mkdir /usr/local/etc/plugstack.conf.d
echo "include /usr/local/etc/plugstack.conf.d/*" | sudo tee /usr/local/etc/plugstack.conf > /dev/null

将 Pyxis 默认配置文件链接到插件目录:

sudo ln -s /usr/local/share/pyxis/pyxis.conf /usr/local/etc/plugstack.conf.d/pyxis.conf

验证 Enroot / Pyxis 安装成功:

srun --help | grep container-image

预期结果:--container-image=[USER@][REGISTRY#]IMAGE[:TAG]|PATH

定稿

在其余节点上复制配置时,用分配的节点名和/或 microSD 卡标记 JetsonNX 模块。这有助于防止以后在移动模块或卡时出现混淆。

有两种不同的方法可以将安装复制到其余模块:手动配置或克隆 slurm 控制。仔细阅读这两种方法,然后选择你喜欢的方法。

手动配置其余节点

对于当前模块,请遵循下面的“启用并启动 Slurm 服务守护进程”部分,然后对其余模块重复整个过程 ,跳过[slurm-control]下标记的任何步骤。所有模块完全配置后,将其安装到各自插槽中的 Jetson 配对中,如“将所有 Jetson Xavier NX 模块安装到机柜”部分所述。

为其余节点安装克隆 slurm 控制

为了避免对每个节点重复所有安装步骤,请将slurm-control节点的卡克隆为基本图像,并将其闪存到所有剩余的卡上。如果您只有一个多端口读卡器,并且希望进行卡到卡的克隆,则需要 microSD 到 SD 卡适配器。或者,也可以从源slurm-control卡在本地机器上创建图像文件,然后闪烁目标卡。

  1. 关闭您正在使用的 Jetson ,从模块中取出 microSD 卡,然后将其插入读卡器。
  2. 如果您正在执行物理卡到卡克隆(使用 Balena Etcher 、 dd 或任何其他将逐扇区写入的实用程序),请将空白目标 microSD 插入 SD 卡适配器,然后将其插入读卡器。
  3. 识别您正在使用的应用程序中的源( microSD )和目标( SD 卡)的对应卡,然后开始克隆过程。
  4. 如果要创建图像文件,请使用您选择的实用程序,从本地机器上的slurm-controlmicroSD 卡创建一个图像文件,然后取出该卡,并使用该图像闪烁其余空白卡。
  5. 克隆完成后,将克隆卡插入 Jetson 模块并通电。配置计算节点的节点主机名,然后继续启用并启动 Slurm 服务守护进程。对所有剩余的卡/模块对重复此过程。

启用并启动 Slurm 服务守护进程:

[slurm-control]

sudo systemctl enable slurmctld
sudo systemctl start slurmctld

[compute-node]

sudo systemctl enable slurmd
sudo systemctl start slurmd

将所有 Jetson Xavier NX 模块安装到机柜中

首先关闭所有正在运行的模块的电源,然后将其从托架上卸下。将所有 Jetson 模块安装到 Seeed Studio Jetson Mate 中,确保控制节点放置在标记为“ MASTER ”的主插槽中,计算节点 1-3 分别放置在标记为“ WORKE 1 、 2 和 3 ”的辅助插槽中。每个模块的 Jetson 配对套件中都有可选的风扇延长电缆。

机柜上的视频输出连接到主模块插槽,垂直 USB2 端口和 USB3 端口 1 也是如此。所有其他 USB 端口根据其各自的端口号连接到其他模块。

故障排除

本节包含一些有用的命令,用于帮助解决常见网络和 Slurm 相关问题。

测试网络配置和连接

以下命令应在routable状态下显示eth0,并从 DHCP 服务器获取 IP 地址信息:

networkctl status

该命令应以本地节点的主机名和响应。本地作为域(例如slurm-control.local),以及 DHCP 分配的 IP 地址:

host `hostname`

选择已配置并联机的计算节点主机名。它应该类似地响应上一个命令。例如:主机 nx1 – nx1 。本地 has 地址为 192.168.0.1 。这也适用于在局域网上运行 mDNS 解析器守护进程的任何其他主机。

host [compute-node-hostname]

所有集群节点都应该可以被所有其他节点 ping ,所有本地 LAN IP 地址也应该可以 ping ,例如路由器。

ping [compute-node-hostname/local-network-host/ip]

测试外部 DNS 名称解析并确认到 internet 的路由功能正常:

ping www.nvidia.com

检查 Slurm 群集状态和节点通信

以下命令显示集群的当前状态,包括节点状态:

sinfo -lNe

如果sinfo输出中的任何节点显示其状态未知或关闭,则以下命令向指定节点发出信号,以更改其状态并可用于作业调度([]在主机名“ nx ”后指定一个数字范围):

scontrol update NodeName=hostname[1-3] State=RESUME

以下命令在所有可用的计算节点上运行hostname。节点应在控制台中使用其相应的主机名进行响应。

srun -N3 hostname

总结

现在,您已经成功构建了一个适合您的桌面的多节点 Slurm 集群。现在,您可以在迷你集群上运行大量基准测试、项目、工作负载和容器。欢迎在这篇帖子上分享您的反馈,当然,也可以分享您的新集群正在用于的任何内容。

关于作者

Steven McIntire 是 Enterprise Products group 旗下 RAPLAB 的解决方案架构师,其主要关注数据中心基础设施的所有方面。在 NVIDIA 的整个职业生涯中,他为多个大型计算项目做出了贡献,包括 Saturn V 、 Circe 、 Selene 、 SuperPOD 和 GeForce Now 。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7414

    浏览量

    87704
  • 人工智能
    +关注

    关注

    1791

    文章

    46840

    浏览量

    237519
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120970
收藏 人收藏

    评论

    相关推荐

    雷卯针对NVIDIA英伟达JETSON Orin NX开发板防静电推荐器件示意图

    一、应用场景 1. 生成性 AI 的端到端开发 2. 边缘 AI 3. 机器人应用 二、 功能概述 1. 处理器: Jetson Orin NX 8GB: 6核Arm° Cortex®-A78AE
    的头像 发表于 11-22 19:13 75次阅读
    雷卯针对<b class='flag-5'>NVIDIA</b>英伟达<b class='flag-5'>JETSON</b> Orin <b class='flag-5'>NX</b>开发板防静电推荐器件示意图

    初创公司借助NVIDIA Metropolis和Jetson提高生产线效率

    初创公司使用 NVIDIA Metropolis 视觉 AI 和 Jetson 边缘 AI 平台提高生产线效率。
    的头像 发表于 11-19 14:39 109次阅读

    使用NVIDIA Jetson打造机器人导盲犬

    Selin Alara Ornek 是一名富有远见的高中生。她使用机器学习和 NVIDIA Jetson边缘 AI 和机器人平台,为视障人士打造了机器人导盲犬。
    的头像 发表于 11-09 13:51 178次阅读

    如何构建及优化GPU云网络

    并从计算节点成本优化、集群网络与拓扑的选择等方面论述如何构建及优化GPU云网络。
    的头像 发表于 11-06 16:03 241次阅读
    如何<b class='flag-5'>构建</b>及优化GPU云网络

    NVIDIA JetPack 6.0版本的关键功能

    NVIDIA JetPack SDK 支持 NVIDIA Jetson 模块,为构建端到端加速 AI 应用提供全面的解决方案。JetPack 6 通过微服务和一系列新功能,扩展了
    的头像 发表于 09-09 10:18 333次阅读
    <b class='flag-5'>NVIDIA</b> JetPack 6.0版本的关键功能

    使用NVIDIA JetPack 6.0和YOLOv8构建智能交通应用

    本文将介绍如何使用 NVIDIA JetPack 6.0 中的全新 Jetson 平台服务,来构建一个适用于边缘的端到端交通分析解决方案。该系统集成了多个功能:使用视频存储工具包 (VST) 服务
    的头像 发表于 08-23 16:49 411次阅读
    使用<b class='flag-5'>NVIDIA</b> JetPack 6.0和YOLOv8<b class='flag-5'>构建</b>智能交通应用

    Nvidia Jetson Nano + CYW55573/AWXB327MA-PUR M.2无法使用操作系统内置的网络管理器管理Wi-Fi如何解决?

    我们使用的是 Nvidia Jetson Nano + CYW55573/AWXB327MA-PUR M.2 ,请参阅 Nvidia Jetson 与英飞凌 AIROC Wi-Fi 6
    发表于 05-23 06:47

    使用NVIDIA Holoscan for Media构建下一代直播媒体应用

    NVIDIA Holoscan for Media 现已向所有希望在完全可重复使用的集群构建下一代直播媒体应用的开发者开放。
    的头像 发表于 04-16 14:04 597次阅读

    浪潮信息推出全球首个单存储即可支持16节点的SAP HANA集群方案

    近日,浪潮信息成功实现并推出全球首个单存储即可支持16节点的SAP HANA集群方案,全闪存储HF5000系列作为该方案的数据存储底座,助力以最优的性能和成本为企业创建大规模、易扩展、高稳定的业务数据处理能力。
    的头像 发表于 04-01 10:03 408次阅读

    人形机器人主板:jetson orin nx核心模块与SOM-7583核心模块结合在一块主板上

    ERUN_7583_ORIN_NX嵌入式人工智能计算机底板,专为满足人形机器人的实际需求而设计,他具备jetson orin nx核心模块与SOM-7583核心模块,可以实现核心模块间相互通信,运算跟运动控制器结合在一块底板上。
    的头像 发表于 03-26 11:17 777次阅读
    人形机器人主板:<b class='flag-5'>jetson</b> orin <b class='flag-5'>nx</b>核心模块与SOM-7583核心模块结合在一块主板上

    USB 5V 输入四节锂电池串联升压充电管理IC FS4068数据手册

    电子发烧友网站提供《USB 5V 输入四节锂电池串联升压充电管理IC FS4068数据手册.pdf》资料免费下载
    发表于 03-18 10:01 1次下载

    四节干电池串联电流是多少安

    和电池容量。一干电池通常使用1.5伏特电压。 假设我们将这四节干电池串联连接起来,将它们的负极与正极相连。这样,我们就可以将它们看作是一个整体,具有总电压等于四节干电池电压之和的特点。所以,
    的头像 发表于 01-15 10:49 3527次阅读

    耐压24V单四节2A内置MOS管开关型锂电池充电IC FS5175AE介绍

    FS5175AE是支持单降压四节锂电池充电IC电流可达2A。FS5175AE在5V输入充单4.2V锂电池电流可以做到2A FS5
    的头像 发表于 01-02 16:00 678次阅读
    耐压24V单<b class='flag-5'>节</b>双<b class='flag-5'>节</b>三<b class='flag-5'>节</b><b class='flag-5'>四节</b>2A内置MOS管开关型锂电池充电IC FS5175AE介绍

    FS4068:USB 5V 输入四节鲤电池串联升压充电管理IC应用介绍

    电子发烧友网站提供《FS4068:USB 5V 输入四节鲤电池串联升压充电管理IC应用介绍.pdf》资料免费下载
    发表于 12-18 10:15 0次下载

    NVIDIA Jetson 的嵌入式系统AI应用

    在这个平台上可以使用多个不同的芯片 ,案例的主角是AIMobile AIM Edge Ncox,一款基于NVIDIA Jetson Orin NX的小型被动冷却嵌入式系统。该系统具有6-8个Arm内核和
    发表于 12-11 17:37 535次阅读