⚠️ご注意ください、ここにある内容は大規模言語モデルによって翻訳されたものです。
この期間、機房とのやり取りが多く、三江源データ分析センターに新しい購入機器を設置するエンジニアや学院の運用担当の先生方と連携してきました。そこで、高性能クラスター構築の経験をまとめます。
ハードウェア
組み立て
新たに購入した整備済みサーバーには、ハードディスク、メモリ、ネットワークカード(Ethernet)、RAIDカードが揃っています。起動時には、メイン電源と予備電源の両方が点灯していることを必ず確認してください。構成は、Intelのデュアルソケットマシン2台とAMDのデュアルソケットマシン2台です。RDMAネットワークカードは別途調達し、Mellanox MT28908(ConnectX-6)を使用しています。高性能計算センターからNVIDIA A800 80GB PCIEカード8枚を借用し、トポロジーは4台のマシンに8枚のカードを配置する予定です。
| サーバー | CPU | メモリ | ハードディスク |
|---|
| H3C UniServer R4900 G6 | Intel(R) Xeon(R) GOLD 6542Y(250w)×2 | 32G DDR5 5600×8 | 960G SSD×2 + 4TB SATA×3 + RAID PM8204-2G |
| H3C UniServer R4950 G6 | AMD EPYC 9654 96コアプロセッサ(360w)×2 | 32G DDR5 4800×8 | 960G SSD×2 + 4TB SATA×3 + RAID PM8204-2G |

起動ディスクの作成
ブート可能なISOイメージ、書き込みソフト(RufusまたはUltraISO)、およびUSBメモリ(できればUSB3.0推奨)を準備します。ここではサーバー側のUbuntu Server 22.04.5 LTS(長期サポート版、2027年4月までサポート)を選択し、Ubuntu公式サイトからブート可能なISOファイルを取得します。

次に、書き込みソフトを使ってハードディスクにイメージを書き込みます。UltraISOでは書き込み方式をUSB-HDD+に設定し、RufusではターゲットシステムタイプをBIOSまたはUEFIに設定します。必要に応じてファイルシステムやその他の設定を調整してください。フォーマット後、システムイメージを書き込み(約2〜3分)ます。

ソフトウェア
ネットワーク設定
通常、システムインストール時には設定しません。インストール完了後にip link showコマンドでネットワークインターフェース名を確認します。次にvim /etc/netplan/50-cloud-init.yamlを編集し、以下のように設定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
| # ...
network:
ethernets:
ens16f0:
addresses:
- <A.B.C.D>/24
nameservers:
addresses: []
search: []
routes:
- to: default
via: <A.B.C.D>
version: 2
|
rootパスワードの設定
Linuxカーネルの自動更新を無効化
無効にしないと、apt update後にサービスの再起動や更新を促す通知が出続けます。/etc/apt/apt.conf.d/内の10periodicと20auto-upgradesのパラメータを0に変更します。
sudo vim /etc/apt/apt.conf.d/10periodic
内容を以下に更新:
1
2
3
| APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
|
sudo vim /etc/apt/apt.conf.d/20auto-upgrades
内容を以下に更新:
1
2
| APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
|
リバースプロキシ設定
計算ノードはインターネットに接続しないため、ローカルを踏み台としてリバースプロキシを設定します。
Users/username/.ssh/configに以下を追加:
1
2
3
4
5
| Host <hostname>
HostName <IP>
Port <port>
User <username>
RemoteForward <Port1> 127.0.0.1:<Port2>
|
最近学んだ方法として、.ssh/config内でProxyJumpを設定し、シームレスに踏み台接続を行うことも可能です。パスワード不要にするには、接続先ホストの~/.ssh/authorized_keysにローカルの公開鍵を登録してください。
1
2
3
4
5
6
7
8
9
10
11
12
| Host <hostname>
HostName <IP>
Port <port>
User <username>
RemoteForward <Port1> 127.0.0.1:<Port2>
Host <destination>
HostName <IP>
Port <port>
User <username>
ProxyJump <hostname>
RemoteForward <Port1> 127.0.0.1:<Port2>
|
事前準備のポイント
1
2
3
4
5
6
7
8
9
10
11
| # Linuxの自動休眠を無効化
echo "\$nrconf{kernelhints} = 0;" >> /etc/needrestart/needrestart.conf
echo "\$nrconf{restart} = 'l';" >> /etc/needrestart/needrestart.conf
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# aptとapt-getの更新
apt update
apt upgrade
apt-get update
apt-get upgrade
# 必要なパッケージのインストール
apt install git wget vim curl htop net-tools pciutils build-essential
|
パーティション設定
ディスクが認識されない場合、システムインストール時にエラーblock probing did not discover any disksが出ることがあります。ハードディスクやRAIDカードの点灯状態を確認してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
| lsblk # 新しいディスクのデバイス名を確認(例:/dev/sdX)
sudo pvcreate /dev/sdb /dev/sdc /dev/sdd # 物理ボリュームの作成
sudo vgcreate vg_home /dev/sdb /dev/sdc /dev/sdd # ボリュームグループの作成
vgdisplay # ボリュームグループ情報を確認
sudo lvcreate -l 100%FREE -n lv_home vg_home # 全容量を使った論理ボリューム作成
sudo mkfs.ext4 /dev/vg_home/lv_home # ext4ファイルシステムでフォーマット
sudo mount /dev/vg_home/lv_home /home # /homeにマウント
# 自動マウント設定
sudo blkid /dev/vg_home/lv_home # UUIDを取得
sudo vim /etc/fstab
>>> UUID=<UUID> /home ext4 defaults 0 2
sudo mount -a
df -a # 正常にマウントされたか確認
|
NFS共有ファイルシステム
1
| sudo apt install nfs-kernel-server nfs-common rdma-core # 全ノードで実行
|
NFSサーバー設定
1
2
3
4
5
6
7
8
9
| sudo mkdir -p /home
sudo chmod 777 /home
sudo vim /etc/exports
>>> /home *(rw,sync,no_root_squash)
sudo vim /etc/nfs.conf # RDMAを有効化
>>> [nfsd]
>>> rdma=y
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
|
クライアント設定
1
2
3
4
| sudo mount -o rdma,vers=4.2 <server_ip>:/home /home
df -h | grep /home # マウント成功を確認
sudo vim /etc/fstab
>>> <server_ip>:/home /home nfs4 rdma,vers=4.2 0 0
|
RDMA伝送の検証
1
2
| mount | grep /home
cat /proc/fs/nfsfs/servers # transport列がrdmaになっているか確認
|
InfiniBandドライバ
ドライバのダウンロード:NVIDIA InfiniBand Software | NVIDIA | NVIDIA Developer
MLNX_OFED:Linux InfiniBand Drivers
古いバージョンのIBを使用する場合は、リリースノートでサポート状況を確認してください。
IBデバイスの確認:
IBのopensmサービスを起動:
1
2
3
4
5
6
| # 未インストールの場合
sudo apt update && sudo apt upgrade -y
sudo apt install opensm infiniband-diags ibutils perftest -y
sudo systemctl start opensm
systemctl status opensm
sudo systemctl enable opensm # 自動起動設定
|
IBデバイスの認識状況を確認:
サーバーとクライアントのIB帯域をテスト:
1
2
3
| ibv_devices # デバイス名を確認(例:mlx5_0)
ib_read_bw -a -d <device_name> --report_gbits # サーバー側
ib_read_bw -a -F <ip_addr> -d <device_name> --report_gbits # クライアント側(-aは全メッセージサイズ、-Fはサーバーへの接続を強制、--report_gbitsはGbps単位で表示)
|

MTU(最大伝送単位)の設定:
1
2
| ifconfig | grep ib # IBインターフェースを確認
ifconfig ib0 mtu 65520 # 両方のマシンで同じMTU値に設定
|
簡単なテスト:ibpingまたはibping <ip_addr>を実行
CUDA
Nouveauドライバの無効化/アンインストール(必要に応じて)
1
| sudo vim /etc/modprobe.d/blacklist.conf
|
最後に以下を追加:
1
2
| blacklist nouveau
options nouveau modeset=0
|
initramfsを再構築し、サーバーを再起動して反映させます。
1
2
| sudo update-initramfs -u
sudo reboot
|
lsmod | grep nouveauで確認し、出力がなければ無効化成功です。
ドライバのインストール
GPUモデルを確認:
ドライバのダウンロード:NVIDIA Driver
A800/V100用CUDA12.6ドライバ例:
Data Center Driver for Linux x64 560.35.03 | Linux 64-bit | NVIDIA
ドライバのアンインストール:
1
| sudo /usr/bin/nvidia-uninstall
|
CUDAのインストール:CUDA Toolkit 12.6 Update 3
CUDA Toolkitのアーカイブ:CUDA Toolkit Archive
NVCCはCUDA Toolkitに含まれるため、公式サイトから対応バージョンのrunfileをダウンロードし、以下のようにインストールします。
例:CUDA Toolkit 12.2の場合
1
2
| wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.run
sudo sh cuda_12.9.1_575.57.08_linux.run
|
ドライバの再インストールは不要です。インストール後、環境変数を設定します。
1
2
3
| echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
|
/usr/local/cudaをデフォルトパスとして使いたい場合は、シンボリックリンクを作成します。
1
2
3
4
| sudo ln -s /usr/local/cuda-12.2 /usr/local/cuda
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
|