クラウド コンピューティングとビッグ データ - MPI クラスター構成

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

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
私たちが主要な矛盾に直面したとき、もし問題をより高い次元、より高いレベルから見ることができれば、私たちは新しい世界を発見するでしょう、そして一晩のうちに春風が吹き、何千本もの梨の木が咲き誇るような感覚があるでしょう。私たちの個人的な思考レベルはさらに大きく向上しますが、このプロセスには継続的な学習と実践が必要であり、あるレベルに達すると、量的な変化は質的な変化を遂げます。

おすすめ

転載: blog.csdn.net/Myx74270512/article/details/131742900