root用戶在用openmpi并行計算時避免加--allow-run-as-root的方法
OpenMPI從2.0開始有個變態要求,即如果用戶是root,則通過mpirun來并行運行程序時,會提示
mpirun has detected an attempt to run as root.
Running at root is *strongly* discouraged as any mistake (e.g., in
defining TMPDIR) or bug can result in catastrophic damage to the OS
file system, leaving your system in an unusable state.
然后不給算。如果非要算的話,必須mpirun命令帶上--allow-run-as-root參數。這個設計在我來看極其討厭、多管閑事!我在自己機子上從來都是用root賬戶,因為沒權限限制,暢通無阻。只要我還沒有變得腦癡,根本不會因為用了root而把系統搞壞。
對于某些程序,要想避免每次運行時都手動加上--allow-run-as-root倒也不難,比如跑DIRAC程序,環境變量里設定export DIRAC_MPI_COMMAND="mpirun -np 36 --allow-run-as-root"就完了。但是有些程序解決起來沒這么簡單,比如ORCA就是,在.bashrc里添加alias mpirun='mpirun --allow-run-as-root'或alias orca='orca --allow-run-as-root'也都不行。
為了徹底去掉OpenMPI變態的要求,干脆直接改源碼。灑家發現這很簡單:在編譯openmpi之前,分別修改openmpi目錄下的
orte/tools/orte-dvm/orte-dvm.c
orte/tools/orte-submit/orte-submit.c(對于OpenMPI 3.x是orte/orted/orted_submit.c)
orte/tools/orterun/orterun.c
在里面都搜索if (0 == geteuid,將對應段落(一直到這個if對應的}符號為止)刪掉,然后編譯,OpenMPI就不會因為發現是root還沒用--allow-run-as-root而報錯退出了。
2020-May-6后記:從OpenMPI 4.0開始,可以通過如下方式定義兩個環境變量來允許root下也可以用mpirun,因此就不必像上文那樣改源代碼了。
export OMPI_ALLOW_RUN_AS_ROOT=1
export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1