MPI クラスターとは何ですか?
MPI (Message Passing Interface) は、複数のコンピューティング ノード間での通信とコラボレーションを可能にする並列プログラムを作成するための標準です。MPI クラスター構成とは、並列コンピューティングを実現するために 1 つ以上のコンピューティング ノード上に MPI 環境をセットアップすることを指します。
MPI クラスター構成の手順:
ハードウェアの選択: マスター ノードやコンピューティング ノードなど、ニーズに合ったハードウェア デバイスを選択します。マスター ノードは、コンピューティング ノード間の通信とタスク分散を調整する責任を負い、コンピューティング ノードは実際のコンピューティング タスクを実行します。
オペレーティング システムのインストール: 各ノードにオペレーティング システムをインストールします。一般的なオプションには、Linux、Windows サーバーなどが含まれます。すべてのノードが相互に到達可能であり、ネットワーク接続があることを確認してください。
MPI ソフトウェアのインストール: OpenMPI、MPICH などの MPI 実装を選択し、オペレーティング システムの要件に従って、対応する MPI ソフトウェアを各ノードにインストールします。MPI ライブラリは、ノード間で通信および同期するための並列コンピューティング用の一連の関数とツールを提供します。
マスター ノードの構成: マスター ノードの MPI 構成ファイル (通常は mpiexec または mpirun の構成ファイル) を編集して、MPI プログラムの実行方法を指定します。これには、計算ノードの数、起動スクリプト、プロセスの割り当てなどを指定するオプションが含まれる場合があります。
計算ノードの構成: 計算ノードの場合は、MPI 構成ファイルを編集して、マスター ノードの場所およびその他の必要な情報を指定します。また、計算ノードが通信のためにマスター ノードおよび他の計算ノードにアクセスできることを確認してください。
MPI クラスターをテストする: 単純な MPI プログラムを作成し、MPI クラスター上でテストします。MPI プログラムが複数のノード上で正しく並行して実行できること、およびメッセージ パッシングを通じてノード間のデータ交換と同期が実現できることを保証します。
クラスター サイズの拡張 (オプション): より多くのコンピューティング能力が必要な場合は、クラスターにコンピューティング ノードを追加できます。対応する MPI ソフトウェアも新しいノードにインストールされ、手順 4 および 5 に従って構成されていることを確認してください。
クラウド コンピューティングと関連する MPI クラスターの知識を学ぶのに役立つことを期待して、以下の簡単な MPI クラスター構成を作成してみましょう。
1. VMware Workstation Pro を使用して仮想マシンを構成し、それを開きます
ここでは通常のユーザーとしてログインすることを選択します
1. ネットワークがスムーズであることを確認し、各ノードの固定IPを設定し、ネットワークサービスを再起動します。
マスター ネットワーク サービスを構成します。
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
www.baidu.com に正常に ping できるようにネットワークを正常に設定してください
。
host1 ネットワーク サービスを構成します。
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
www.baidu.com に正常に ping できるようにネットワークを正常に設定してください
。
host2 ネットワーク サービスを構成します。
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
ネットワークが正常に構成されました。
ping www.baidu.com
成功しました。
2. 2 台のマシンのホスト ファイルを構成します。ホスト名はそれぞれ master、host1、host2 です。
注文:
vim /etc/hosts
注文:
vim /etc/hosts
マスターホスト名を変更します。
vim /etc/hosname
コマンド: vim /etc/hosts
host1 ホスト名を変更:
vim /etc/hosname
注文:
vim /etc/hosts
host2 のホスト名を変更します。
vim /etc/hosname
2. SSHパスワード不要ログイン
ssh-keygen –t rsa master、host1、host2 にそれぞれ最後まで入力します
。 2. 公開キーをauthorized_keys ファイルに追加します。次のコマンドを実行します。
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
master、host1、host2 にそれぞれ、
すべてのノードを設定する必要があります
。 3. 公開鍵を他のマシンにコピーします
(1) マスター
ssh-copy-id -i ~/.ssh/id_rsa.pub host1
ssh-copy-id -i ~/.ssh/id_rsa.pub host2
SSH サービスを再起動します。
sudo systemctl restart sshd
マスターはパスワードなしで host1 に正常にログインします。
ssh host1
(2)ホスト1
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub host2
SSH サービスを再起動します。
sudo systemctl restart sshd
Host1 はパスワードなしで host2 に正常にログインします。
ssh host2
(3)ホスト2
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub host1
SSH サービスを再起動します。
sudo systemctl restart sshd
Host2 はパスワードなしで host1 に正常にログインします。
ssh host1
CentOS 7 では、インストール中に ssh パッケージが自動的にインストールされ、SSH サービスが構成されました。
3 台のマシンの ssh サービスのステータス:
systemctl status sshd
なお、ssh パスワード不要ログインはユーザー間でのログインとなるため、運用時にマスターノードの端末と子ノードの端末が対応していることを確認する必要があります。
1) 各ノードと Selinux のファイアウォールを閉じます
。 閉じる: sudo systemctl stop firewalld
電源オンを無効にする: sudo systemctl disable firewalld
Selinux を閉じる: sudo setenforce 0
2) サーバー (マスター、最初のホストを取ることをお勧めします)
(1) sudo yum -y install nfs -utils rpcbind #ソフトウェアのインストール
(2) mkdir -p /opt/modules/mpi_share #共有ディレクトリの作成
(3) chmod 777 /opt/modules/mpi_share -R #権限の付与
(4) sudo vi /etc/エクスポート #構成の変更書き込み:
/opt/modules/mpi_share 192.168.95.25(rw,sync,no_root_squash) /opt/modules/mpi_share 192.168.95.26(rw,sync,no_root_squash)
192.168.95.25 は子ノードのアドレスであり、ホスト名にすることもできます。許可オプションの rw は、読み取りと書き込みが許可されていることを意味し、入力はホストの特定の IP アドレスに依存します。ro は読み取られます。 -only; sync は同期書き込みを意味し、no_root_squash はクライアントの起動時に root としてアクセスするときにローカル root 権限を付与することを意味します。
sudo exportfs -rv
(5)sudo systemctl start rpcbind
sudo systemctl start nfs #启动nfs,或者设置为开机启动
(6)sudo systemctl Enable rpcbind
sudo systemctl enable nfs
showmount -e #查看NFS服务器端的共享目录
3) クライアント (host1)
(1) sudo yum -y install nfs-utils rpcbind
(2) mkdir -p /opt/modules/mpi_share #各ノードの共有ディレクトリの場所と名前を同じに設定します
(3) sudo systemctl start rpcbind
sudo systemctl start nfs #bootにすることも可能
(4) sudo systemctl Enable rpcbind
(5) sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #サーバー側をマウントする共有ディレクトリ ローカル フォルダーにアップロード
(6) または永続的にマウント (オプション)
vim /etc/fstab
add 192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
4) client (host2)
(1) sudo yum - y install nfs-utils rpcbind
(2) mkdir -p /opt/modules/mpi_share #各ノードの共有ディレクトリの場所と名前を同じに設定します (3) sudo
systemctl start rpcbind sudo systemctl start nfs #
起動
(4) sudo systemctl を有効にして rpcbind
(5) sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #サーバー側共有ディレクトリをローカルフォルダーにマウントします
(6) または永続的にマウントします (オプション)
vim /etc /fstab
add 192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
5. mpich のインストールと設定
1) コンパイラをインストールします
yum install gcc gcc-c++ gcc-fortran kernel-devel -y # https://blog. csdn. net/wangzhouf/article/details/108222704
(yum install gcc g++ #mpich のデフォルトのコンパイラは gcc、g++、gfortran ですが、yum コマンドでは gfortran インストール パッケージが見つかりません #gfortran コンパイラを自分でインストールする方法は見つかります 著者
:風乾したオレンジの皮 - https://www.bilibili.com/read/cv15215061出典:bilibili)
2) mpi インストールパッケージをダウンロードしてインストールします
(1) ディレクトリを作成し、パッケージをダウンロードします
mkdir -p /opt/softwares
cd softwares
wget http://www.mpich.org/static/downloads/3.4.1/mpich-3.4.1.tar.gz
(2) 解凍する
tar -zxvf mpich-3.4.1.tar.gz
(3) 新しいインストールディレクトリを作成します。
mkdir -p /opt/modules/mpich-install
(4) ダウンロードディレクトリに移動し、コンパイルしてインストールします。
cd /opt/softwares/mpich-3.4.1
./configure --disable-fortran --prefix=/opt/modules/mpich-install --with-device=ch4:ofi 2>&1 | tee c.txt
または:
./configure --disable-fortran //著者: 乾燥オレンジの皮- https://www.bilibili.com/read/cv15215061 出典: bilibili
make
make install
3) 環境設定
(1)
vim ~/.bashrc
export MPICH=/opt/modules/mpich-install
export PATH=$MPICH/bin:$PATH
(2) 環境変数を有効にする
source ~/.bashrc
4) インストールを確認します
mpirun -version
6. 各ホストで C プログラムをコンパイルします。
1) C プログラム コード helloWorld.c を各ホストの /opt/modules/mpi_share ディレクトリにアップロードします。
2) cd /opt/modules/mpi_share`
3) 最初に helloWorld.c を書き込み、 helloWorld2.c:
mpicc -o helloWorld helloWorld.c
別の helloWorld2.c を作成します。
#include "mpi.h"
#include <stdio.h>
#include <math.h>
void main(argc,argv)
int argc;
char *argv[];
{
int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name);
MPI_Finalize();
}
7. マスター上で実行します。
mpirun -n 3 -host master,host1,host2 ./helloWorld
mpirun -n 3 -host master,host1,host2 ./helloWorld2
私たちが主要な矛盾に直面したとき、もし問題をより高い次元、より高いレベルから見ることができれば、私たちは新しい世界を発見するでしょう、そして一晩のうちに春風が吹き、何千本もの梨の木が咲き誇るような感覚があるでしょう。私たちの個人的な思考レベルはさらに大きく向上しますが、このプロセスには継続的な学習と実践が必要であり、あるレベルに達すると、量的な変化は質的な変化を遂げます。