専門ゼミ(蒲田)

技術資料

目次 

目的 

セットアップの手順 

VirtualBoxのインストールはこちら 

https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html


CentOSを一からインストールしたい方はこちら 


CentOS作業 

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のコマンド 

これから使用するvimというエディターについて.「通常モード」と「挿入モード」があり,書き加える場合は基本的に「挿入モード」でしかできないので,以下の表のコマンドを使いこなす必要がある.

#ref(): File not found: "zu2.png" at page "並列データ処理・分散アルゴリズムの技術(12月1日)"

「挿入モード(文字入力モード)」から「通常モード」にするには「Esc」キーを押す.

すぐ確認できるように写真に撮るなど残しておくことをオススメする.

SELinuxの無効化設定 

無効化する理由は、プログラムが動かなくなったり,インストールできなくなるからである.

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.

JavaJDK,Mpich,C言語のインストール 

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

と入力.

IPアドレスの設定 

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日)"

sshの設定 

以下のコマンドを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

と入力.

masterPCの初期設定(Mpichをダウンロードした後一度だけ必要,もうできていると思うのでやる必要はない。) 

共有ディレクトリの作成

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

sapmleプログラムの実行方法 

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日)"


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS