• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    Uncategorized

    用 NVIDIA Jetson Xavier NX 構建四節點集群

    ?

    跟隨大型超級計算機(如 NVIDIA DGX SuperPOD )的腳步,本文將引導您完成創建適合您桌面的小型集群的過程。以下是完成該項目的推薦硬件和軟件。該小規模集群可用于加速人工智能( AI )和深度學習( DL )工作流的訓練和推理,包括使用來自 NVIDIA NGC 目錄等來源的容器化環境。

    硬件:

    Picture of hardware components used in this post

    雖然 Seeed Studio Jetson Mate 、 USB-C PD 電源和 USB-C 電纜不是必需的,但在本文中使用了它們,強烈建議將其用于整潔緊湊的桌面集群解決方案。

    軟件:

    有關更多信息,請參閱 NVIDIA Jetson Xavier NX 開發工具包 .

    安裝

    將 JetPack 圖像寫入 microSD 卡,并執行初始 JetPack 配置步驟:

    本文的第一次迭代針對 Slurm 控制節點(slurm-control)。配置第一個節點后,可以選擇為每個模塊重復每個步驟,也可以為其他模塊克隆第一個 microSD 卡;稍后將對此進行詳細介紹。

    有關 JetPack 閃爍和初始設置的更多信息,請參閱 Jetson Xavier NX 開發工具包入門 .

    在遵循上述入門指南的同時:

    • 跳過無線網絡設置部分,因為將使用有線連接。
    • 選擇用戶名和密碼時,請選擇您喜歡的,并在所有節點上保持一致。
    • 將計算機名稱設置為當前使用的目標節點,第一個是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 <<exit
    get /etc/munge/munge.key /etc/munge
    exit sudo chown munge: /etc/munge/munge.key

    啟動 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-control microSD 卡創建一個圖像文件,然后取出該卡,并使用該圖像閃爍其余空白卡。
    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 端口根據其各自的端口號連接到其他模塊。

    Photo of fully assembled cluster on a table.
    圖 1 。 SeeedStudio Jetson Mate 內完全組裝的集群

    故障排除

    本節包含一些有用的命令,用于幫助解決常見網絡和 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 集群。現在,您可以在迷你集群上運行大量基準測試、項目、工作負載和容器。歡迎在這篇帖子上分享您的反饋,當然,也可以分享您的新集群正在用于的任何內容。

    打開電源,享受 Slurm !

    有關更多信息,請參閱以下參考資料:

    致謝

    特別感謝我們團隊的技術營銷工程師 Robert Sohigian ,他在創建此帖子時提供了指導,提供了關于說明清晰性的反饋,并在構建此集群的多次運行中擔任了實驗鼠。你的反饋是無價的,讓這篇文章成為了現實!

    ?

    0

    標簽

    人人超碰97caoporen国产