MPICH 安裝、Rsh 機制及系統環境設定
rsh 機制設定
使用者 HOME 目錄下建立 .rhosts 檔,其內每一行有 host-name user-name 的對應,代表從那一台遠端機器 host-name 的那一個使用者 user-name,可以不問密碼直接進入本地端系統。 注意 .rhosts 檔要 chmod 成 g-w (也就是說,只有擁有者本人才能有寫入的權限),如此 rsh 才會運作(這是安全上的設計)。
當 .rhosts 檔案存在於某台機器的使用者 HOME 目錄下,並且該檔案是有效的情況時,�堶惟狾C的每一個機器的那些使用者都可以不用密碼進入這台機器。舉例說明:機器 proton3 的某個使用者 u006 其家目錄底下有一個合格的 .rhosts 檔,其內記載有一行 proton2 u007 則代表,在 proton2 上的使用者 u007 可以不須密碼以 u006 的身份進入 proton3 或遠直接跑 job
rsh 雖然是過去配合 mpich 最常用的機制,但它在網路安全性受重視的今天被認為是不安全的,很多系統甚至不提供 rsh。現今主流則是使用下面介紹的 ssh 來作為 mpich 溝通之管道。
ssh 的免密碼登入模式設定(以我們 VM 教學環境的 Fedora Core 5 為例)
基本步驟摘要 (只用於一台):
先確認系統中有 ssh 服務,利用 ssh username@hostname (遠端)或 ssh localhost (本機)試著用 ssh 以需要密碼的方式登入遠端或本機系統。
打 cd ~/.ssh(注意 ssh 前面有一個點)進入使用者個人隱藏的 ssh 設定目錄(在 UNIX 下凡是名稱以一點作為開始的檔案及目錄,都會隱藏,只用 ls 看不見,要用 ls -a 才看得見)。
打 ssh-keygen 產生 ssh 的鑰匙(有些系統版本不接受只打 ssh-keygen 則要 ssh-keygen -t rsa),它會問要輸入 passphrase,給不給都可以,之後你在目錄下看會到 id_rsa 及 id_rsa.pub 兩個檔案。
把 id_rsa.pub 拷貝為檔名叫作 authorized_keys 的檔案。
~/.ssh 底下的 id_rsa、id_rsa.pub、authorized_keys 等檔案,都要 chmod 成為群組 (g) 與其他 (o) 皆不可讀與寫。chmod g-w [filename] 、 chmod g-r [filename] ,比較快的方法是 chmod 500 [filename]。
現在可以試著以 ssh username@hostname (遠端)或 ssh localhost (本機)試著用 ssh 以不需要密碼的方式登入遠端或本機系統,如果不需要密碼可以登入,則表示設定成功。
設置多台 ssh 可進入之免密碼機器組
觀念是,遠端的那台機器上之使用者的 .ssh 子目錄下之 authorized_keys 檔案之中要有記載想免密碼近端機器之公鑰匙。進入之
按上面的方法,先在近端機器的使用者目錄下產生 .ssh 子目錄以及其下相關檔案。把其中 id_rsa.pub 傳送到遠端,並利用 cat id_rsa.pub >> authorized_keys(注意是兩個大於號,代表追加)來把其內容加入到遠端機器的 authorized_keys 檔案中。
測試從近端到遠端以 ssh 登入,看是否需要密碼。
參考資料
http://www.me.berkeley.edu/~kirpekar/sshMpich.htm
ssh 基本使用方法 http://140.126.107.250/peiyuli/unix/OpenSSH%E4%BC%BA%E6%9C%8D%E5%99%A8.htm
SSH 的一些安全小技巧 http://www.study-area.org/tips/ssh_tips.htm
MPICH 安裝
下載套件包
官方網站:http://www-unix.mcs.anl.gov/mpi/
下載處:http://www-unix.mcs.anl.gov/mpi/mpich1/download.html
FAQ:http://www-unix.mcs.anl.gov/mpi/mpich1/docs/faq.htm
上面舊官網連結不再存在,以下提供網路其他站保存的套件包及手冊
解開套件
tar -zxf mpich-1.2.7.tar.gz 或 tar -zxf mpich.tar.gz
則所在目錄下會新生一個叫 mpich-1.2.7 或 mpich 的子目錄,這是將來 mpich 套件的主目錄。
環境設定並產生 Makefile
./configure (完全自動偵測)
./configure -fc=g77 -f90=gfortran (指定 g77 為 Fortran77 語言、gfortran 為 Fortran90 語言,之後會做出 mpif77 及 mpif90 兩個 script )(在較新版的 MPICH 則是建議我們用也可不指定環境變數 FC 及 F90 的方式,例如,要設 FC=g77,在 bash 下用 export FC=g77,在 csh 或 tcsh 下用 setenv FC g77。同理若要設 F90=gfortran 就是再下指令增設一則。)
./configure -rsh=ssh (指定 secure shell 為 rsh 機制所用的 shell,比 rsh 有更高的安全性)(在較新版的 MPICH 也可不指定,而採用設定環境變數 RSHCOMMAND 為 rsh 的方式,實際的做法,在 bash 下用 export RSHCOMMAND=ssh,在 csh 或 tcsh 下用 setenv RSHCOMMAND ssh。 )
以上介紹的設定參數都可以合在一起用,更詳細的資料請見 mpich 總目錄之 doc 底下的文件。
建立副程式庫及環境
打 make ,並等一段時間把許多檔加以編譯及鍊結在一起成 library。 如果成功的話會見到告訴你若有問題如果作 bug report 的畫面。
測試 MPI Fortran script mpif77 的編譯以及跑 fpi 平行程式
進入 example/basic 目錄,打 make fpi 會只編譯 fpi.f 而做出 fpi 執行檔。
跑一個 MPI 多 CPU job 的方法,是下達
mpirun -np [處理器個數] [可執行檔名稱]
,例如以 2 個 CPU 跑 fpi 桯式,指令是
mpirun -np 2 fpi
(本機)
設定多顆 CPU 時丟 job 的順序
多顆 CPU 時丟 job 的順序,如果使用者沒有特別指定,則是在 MPICH 系統的 machines.LINUX 檔,是位於 MPICH 主目錄下的 utils/machines 子目錄, 它的格式如下:
hostname1
hostname2
hostname3如果有些機器有兩個 CPU 而你希望優先用完那兩個再丟到下一個機器,則可在 hostname 後面加冒號及處理器數目,如下:
hostname:2
注意這�堛� hostname 必須是要以有系統打指令 hostname 後所呈現出的正式系統名稱,若是用別名或甚至 IP 地址不一定會被正確辨認,那個機器名稱就會被跳過。
在有些埸合或是環境,採用使用者自己定義的 machine file 會比較方便而有彈性(尤其是當 MPICH 環境不是你自己建置,而你沒有權限更改 util/machines 下的檔案時,則可在發動 job 的目錄下備妥一個與前述 machines.LINUX 格式一樣的檔案,檔名不拘(當然直接叫做 machines.LINUX 也可以),使用的方法,是在 mpirun 時多下一個參數 -machinefile filename ,像是
mpirun -np 4 -machinefile my_machine_file fpi
(當你嘗試上述指令時,如果 mpirun 並不在預設的路徑�埵荍鉹ㄗ魽A就請作完整的相對路徑或絕對路徑。)
當多台電腦並不以 NFS 共享檔案系統時
NFS (Network File System 網路檔案系統) 常用於提供多台電腦環境,來創造出一個讓每台都電腦都看到一模一樣的內容,若使用者登入於其中某一台在該檔案系統中寫入或修改了一個檔案,則從其他的機器也同步看到這個改變。
如果你的多台電腦環境,沒有架設及使用 NFS 服務,只要將每個個別機器上都有執行檔,並且執行檔所存放之位置的路徑都一樣,仍然可以進行多台電腦計算。
架設 NFS 伺服器,除了在圖形化視窗介面的設定工具外,文字模式的操作可參考:
鳥哥的 Linux 私房菜: NFS 伺服器
柏青哥的 SuSE Linux: 架設 NFS 及 NIS Server
至於要使用 NFS 伺服器上的檔案系統,則在管理者權限下打:
mount [機器 IP 地址或網域名稱]:/[檔案系統名稱] [掛載器]
在虛擬機器教學環境的特殊注意事項
要真正的 g77 (而非以 gfortran 冒名鏈結的)才能順利編出 MPICH 1.2.6 版 fortran 要用的部分,設定 gfortran 為 fortran compiler 的話會導致該部分不進行。
要在虛擬機器底下安裝 g77 的方法,請見我另行編寫的 VM_FC5_g77 線上安裝說明。
多台電腦平行分散計算的一些注意事項
若是使用 ssh 作通訊,則發動的主機要把 iptable 關掉,才不會有像 rm_15725: p4_error: rm_start: net_conn_to_listener failed: 及 net_send: could not write to fd=4, errno = 32 的錯誤訊息。
關閉 iptable(防火牆)的方法( 適用於 RedHat / CentOS / Fedora ):
/etc/init.d/iptables save
/etc/init.d/iptables stop其他細節請見 http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/
電腦叢集建置的參考資料
鳥哥的 Linux 私房菜:簡易 Cluster 架設
http://linux.vbird.org/linux_server/0600cluster.php