https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html
CentOSがインストールされているものとする.(実験で使った?からあるはず)
画面左上の「アプリケーション」から「端末」を開く.(お気に入りに「端末」がなければシステムツールにある)
#ref(): File not found: "zu1.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
まず,sudoが正常に機能するか確認するために
sudo echo test
と入力.tpuのパスワードが要求されるので,パスワード「tpu」を入力する.「test」と表示されていればOK.
以下のエラーが出たとき
sudoercファイル内にありません。この事象は記録・報告されます。と出た時は,
su usermod -G wheel tpu su tpu
と入力すると,sudoが機能するようになる.
これから使用するvimというエディターについて.「通常モード」と「挿入モード」があり,書き加える場合は基本的に「挿入モード」でしかできないので,以下の表のコマンドを使いこなす必要がある.
#ref(): File not found: "zu2.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
「挿入モード(文字入力モード)」から「通常モード」にするには「Esc」キーを押す.
すぐ確認できるように写真に撮るなど残しておくことをオススメする.
無効化する理由は、プログラムが動かなくなったり,インストールできなくなるからである.
sudo vim /etc/selinux/config
と入力すると,
#ref(): File not found: "zu3.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
図のようになるので,vimのコマンドを使い「挿入モード(文字入力モード)」にする.(aかiを押せば「挿入モード」になる)
SELINUX=enforcingをコメントアウト(先頭に#をつけるとコメントアウト)し,最後の行に
SELINUX=disabled
と入力し,「通常モード」にし(Escキー),ファイルを保存して終了する.(ファイルの保存は「:wq」←通常モードのときにそのまま打ってよい)
E45のエラーが出た(読み取り専用になってて編集できない)とき
:w !sudo tee %
を入力して、「続けるにはENTERを押すかコマンドを入力してください」と出るのでENTER
そのあと
:q!
を押して編集を終了する。(参考:https://genchan.net/it/server/14445/)
E45のエラーが出た(読み取り専用になってて編集できない)ときおわり
手動でもSELinuxを停止する.
sudo setenforce 0
と入力.次にSELinuxの動作状態を確認する.
getenforce
と入力.「Permissive」か「Disabled」と表示されていればOK.ダメな場合は無効化手順をもう一度実行してみる.
sudo systemctl disable firewalld sudo systemctl stop firewalld
と入力. ファイアウォールが停止したか確認する.
systemctl status firewalld
と入力.「Active:inactive(dead)」と表示されていればOK.
sudo yum -y install java-1.8.0-openjdk-devel mpich mpich-devel gcc-c++ openssl-devel
と入力. インストールが終わり,完了しました!と表示されていればOK.
.bashrcのファイルを変更し,bash環境の設定を変更する.
vim .bashrc
と入力.ファイルの最後に
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0.-openjdk
を追加しファイルを保存して終了する.←vimのコマンド
.bashrcのファイルの変更を反映するために
source .bashrc
と入力.
nmcli con mod enp0s3 ipv4.method manual ipv4.addresses 192.168.11.XXX/24
と入力(XXXの部分は学籍番号の下3桁にする). 1915077の場合は192.168.11.77となる
注意
このとき、192.168.0.1は使わない.
nmcli con mod enp0s3 ipv4.gateway 192.168.11.1 nmcli con down enp0s3 nmcli con up enp0s3
と入力.設定したIPアドレスで動作しているか確認する.
nmcli device show enp0s3
と入力.確認したら「Ctrl+C」で抜ける.
#ref(): File not found: "zu4.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
マスターPCに通信できるか確認する.
ping 192.168.11.200(master0の場合) ping 192.168.11.201(master1の場合) ping 192.168.11.202(master2の場合) ping 192.168.11.203(master3の場合)
と入力.
以下のように表示されていれば通信できている(master1の場合)。
PING 192.168.11.201 (192.168.11.201) 56 (84) bytes of data.
64 bytes from 192.168.11.201: icmp_seq=1 ttl=64 time=0.111 ms
64 bytes from 192.168.11.201: icmp_seq=2 ttl=64 time=0.156 ms ・・・
表示されていなければ,
・LANケーブルが接続されているか確認してみる
・再起動してみる
XXXはIPアドレス設定した番号を入力する.1915077の場合,slave77となる.
sudo hosstname slaveXXX echo "slaveXXX" | sudo tee /etc/hostname > /dev/null hostname
と順に入力.「slaveXXX」と表示されていればOK.
次に,IP番号とホスト名を対応させるために,/etc/hostsファイルを編集する.
sudo vim /etc/hosts
と入力.
WWはmasterのIPアドレス、Wはmaster番号、XXXは自分の学籍番号下2桁、YYY以降は他の人の学籍番号下2桁を入力していく。
既にある行はそのままで、その後に以下の行を追加する.
192.168.11.20WW masterWW 192.168.11.XXX slaveXXX 192.168.11.YYY slaveYYY …
並列処理で使うPC分入力する.
E45のエラーが出た(読み取り専用になってて編集できない)とき
:w !sudo tee %
を入力して、「続けるにはENTERを押すかコマンドを入力してください」と出るのでENTER
そのあと
:q!
を押して編集を終了する。(参考:https://genchan.net/it/server/14445/)
E45のエラーが出た(読み取り専用になってて編集できない)ときおわり
下図は例である。
#ref(): File not found: "zu5.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
以下のコマンドをmaster側で入力する。
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" master0 sshpass -p "tpu" ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" master0 sshpass -p "tpu" ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" slaveXXX
↑slaveの台数分実行
動かないとき
ssh-add ~/.ssh/id_rsa
マスターPCとスレーブPCでsshできることを確認する.(WWWは通信するmasterの番号、XXXは自分のslaveの番号)
ssh masterWWW(slaveXXX)
と入力.sshを抜けるときは
exit
と入力.
共有ディレクトリの作成
mkdir /home/tpu/share
と入力.
共有ディレクトリの設定
sudo vim /etc/export
と入力.以下を最後の行に追加する.
/home/tpu/share 192.168.0.0/24(rw,no_root_squash)
ドメイン名の設定
sudo vim /etc/idmapd.conf
と入力.
Domainのコメントアウトを外す.
#ref(): File not found: "n5.PNG" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
マウントとは,slavePCでmasterPCの特定のフォルダを操作・利用可能にすること.
slaveからmasterPCに通信できるか確認する
ping master0
slavePCがmasterPCをマウントできるようにmasterPCで
sudo systemctl start rpcbind sudo systemctl start nfs-server sudo systemctl start nfs-lock sudo start nfs-idmap sudo systemctl enable nfs-server sudo systemctl reload nfs-server
と入力.
自分のPCに戻り、exitでshhを解除しマスター側の共有ディレクトリをマウントするディレクトリを、以下のコマンドで作成する。(既に存在しますと表示されればスキップ)
$ mkdir /home/tpu/share
slave側で、以下のコマンドを打ってマウントする。( X : 使っているmaster番号 )
slave側で操作する必要があるため、[tpu@slaveXX]になっているか確認する
$ sudo mount --types nfs masterX:/home/tpu/share /home/tpu/share
T-x. access deniedの場合
「mount.nfs: access denied by server while mounting masterX:/home/tpu/share」と出る場合、
以前の実験のmount情報が残っているため、master側のshareフォルダの名前を変更し(2など)、
新しいshareフォルダを作成する(mkdir /home/tpu/share)
T-x.(終わり)
以下のコマンドで確認し、
$ df –k
一番下に次のように表示されればいい
192.168.11.20X:/home/tpu/share 430897664 847872 430049792 1%/home/tpu/share
slave側で以下のコマンドで共有ディレクトリを作成するためにfstabファイルを編集する。
$ sudo vim /etc/fstab
最後の行に以下を追加する。「share」の後は改行せずスペースだけ。
192.168.11.20X:/home/tpu/share /home/tpu/share nfs rsize=8192,wsize=8192,hard,intr 0 0
確認方法は、以下のコマンドを入力し
$ sudo umount /home/tpu/share $ sudo mount –a $ df –k
一番下につぎのようにでればいい。
192.168.11.20X:/home/tpu/share 430897664 847872 430049792 1% /home/tpu/share
T-y. マウント時のエラー対処
(1)「mount -a」の応答が帰ってこないslaveがある場合、59のnfsを再実行
→59の一部ができなくなっているときは間違えてmasterのfstabを62で書き換えてしまった可能性があるので、元に修正
(2) 後のshareフォルダで別masterのマウントが判明した場合
・63「umount」でマウント解除
・それでも「master is busy」と出る場合は、slaveの仮想マシンを再起動する
→デスクトップのshareがなくなり解除される
T-y.(終わり)
マスターPCにSSHで接続する。
$ ssh masterX
hostファイルを書き換える(マスターPCにSSH接続したまま)。
このhostファイルの中に記述されているPCを用いて並列処理が行われる
並列したいpcを変更したいときslaveの番号を変える。または増やす
→Xは自分が接続するmaster番号,YYは学籍番号下2桁 $ sudo vim /home/tpu/share/host masterX slaveYY
masterのpcの共有ディレクトリのshareの中にmontecarlo.cがあるのでそれをコピーして貼り付けて、
名前をmontecarloXX.c(XXは学籍番号下2桁)に変える。(これはmaster側のpcで直接コピペする)
slave側のpcで、sshでmasterに接続した状態で以下のコマンドで共有フォルダに移動する。
$ cd /home/tpu/share
次に、以下のコマンドでファイルをコンパイルする(XXは学籍番号下2桁。さっきコピペしたものと同じプログラムをコンパイルする場合)
$ mpicc montecarloXX.c -o montecarloXX -lm
以下のコマンドで実行するとプログラムが実行する。実行する場合はほかの人と同時に実行しないこと。(XXは学籍番号下2桁)
$ mpirun --hostfile host -np 1 ./montecarloXX
piがモンテカルロ法によって導き出された円周率の値で、Errorが正確な円周率の値との差が表示されている。そして、timeが求めるまでかかった時間を表す。
#ref(): File not found: "zu6.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"
モンテカルロ法によって円周率を求めるプログラムを、1台、2台、3台、6台で行い、各処理にかかった時間を記入する。
よくわからなかったらこちらを参考にしてください。↓
#ref(): File not found: "mpichによる分散処理.pdf" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"