「UbuntuにMPICHをインストールしたい」
Ubuntuであれば、aptコマンドで簡単にできます。
ただし、aptコマンドでのインストールは理解して行うべきです。
そうしないと、想定外のバージョンをインストールしてしまうこともありえます。
この記事では、適切なaptコマンドによるMPICHのインストールを説明します。
本記事の内容
- MPICHとは?
- OS標準のMPICH
- MPICHのインストール
- MPICHの動作確認
それでは、上記に沿って解説していきます。
MPICHとは?
MPICH公式
https://www.mpich.org/
MPIとは、Message Passing Interfaceの略称です。
並列処理のための標準化された規格となります。
複数のマシン、複数のプロセスにより、並列処理を行います。
並列処理を行うことにより、高速な処理が実現可能となります。
あくまで、MPIは規格に過ぎません。
この規格を満たして、並列処理を可能にするのがMPICHと言うことです。
MPICHは、ライブラリ・ソフトウェアと言えます。
また、MPICHはオープンソースとして公開されています。
以上、MPICHに関して説明しました。
次は、OS標準のMPICHを確認していきます。
OS標準のMPICH
Ubuntuには、OS標準のパッケージが存在しています。
Apacheのような人気ソフトウェアであれば、ほぼ確実にOS標準が存在します。
MPICHに関しても、OS標準のパッケージが存在しています。
では、OS標準のMPICHを確認してみましょう。
$ sudo apt info mpich Package: mpich Version: 3.3.2-2build1 Priority: extra Section: universe/devel Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 2071 kB Depends: hwloc-nox | hwloc, libmpich12 (= 3.3.2-2build1), libc6 (>= 2.17) Recommends: libmpich-dev (= 3.3.2-2build1) Suggests: mpich-doc (= 3.3.2-2build1) Homepage: https://www.mpich.org/ Download-Size: 395 kB APT-Sources: http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages Description: Implementation of the MPI Message Passing Interface standard MPICH is a high-performance and widely portable implementation of the MPI-3.1 standard from the Argonne National Laboratory. It efficiently supports different computation and communication platforms including commodity clusters, SMPs, massively parallel systems, and high-speed networks. This release has all MPI 3.1 functions and features required by the standard with the exception of support for the "external32" portable I/O format and user-defined data representations for I/O. . This package includes the program binaries necessary to run MPICH programs.
MPICH 3.3.2は、2019年11月にリリースされています。
そして、最新バージョンの3.4.2は2021年5月のリリースです。
3.3系は3.4系の一つ前のシリーズになります。
もちろん、最新の3.4系を使うのが理想です。
でも、今回はaptで簡単にインストールすることを優先します。
なお、MPICH 3.3.2はUbuntu 20.04 LTSにおけるOS標準のMPICHとなります。
OS標準のソフトウェアのバージョンは、それぞれのOS毎に異なります。
その対応関係は、以下となります。
Ubuntu | MPICH |
18.04 LTS | 3.3 |
20.04 LTS | 3.3.2 |
20.10 | 3.4 |
21.04 | 3.4.1 |
Ubuntu 18.04 LTSから、MPICHはOS標準になったようです。
以上、OS標準のMPICHについての説明でした。
次は、MPICHのインストールを行います。
MPICHのインストール
まずは、パッケージリストの更新です。
次のコマンドは、おまじないのようなモノと考えましょう。
$ sudo apt-get update
では、OS標準のMPICHをインストールします。
$ sudo apt-get -y install mpich
インストールは、少し時間がかかります。
もしかしたら、依存関係でエラーが出るかもしれません。
その場合は、エラー内容を見て対応してください。
aptで適切にインストールをしていれば、それほど問題はないと思います。
ましてや、今回はOS標準のパッケージをインストールしているわけですから。
以上、MPICHのインストールの説明でした。
最後に、MPICHの動作確認を行います。
MPICHの動作確認
とりあえずは、「mpiexec」コマンドが動くことを確認しましょう。
$ mpiexec --version HYDRA build details: Version: 3.3.2 Release Date: Tue Nov 12 21:23:16 CST 2019 CC: gcc -Wl,-Bsymbolic-functions -Wl,-z,relro CXX: g++ -Wl,-Bsymbolic-functions -Wl,-z,relro F77: f77 -Wl,-Bsymbolic-functions -Wl,-z,relro F90: f95 -Wl,-Bsymbolic-functions -Wl,-z,relro Configure options: '--disable-option-checking' '--prefix=/usr' '--build=x86_64-linux-gnu' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' '--with-libfabric' '--enable-shared' '--enable-fortran=all' '--disable-rpath' '--disable-wrapper-rpath' '--sysconfdir=/etc/mpich' '--libdir=/usr/lib/x86_64-linux-gnu' '--includedir=/usr/include/x86_64-linux-gnu/mpich' '--docdir=/usr/share/doc/mpich' 'CPPFLAGS= -Wdate-time -D_FORTIFY_SOURCE=2 -I/build/mpich-VeuB8Z/mpich-3.3.2/src/mpl/include -I/build/mpich-VeuB8Z/mpich-3.3.2/src/mpl/include -I/build/mpich-VeuB8Z/mpich-3.3.2/src/openpa/src -I/build/mpich-VeuB8Z/mpich-3.3.2/src/openpa/src -D_REENTRANT -I/build/mpich-VeuB8Z/mpich-3.3.2/src/mpi/romio/include' 'CFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -Wformat -Werror=format-security -O2' 'CXXFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -Wformat -Werror=format-security -O2' 'FFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -O2' 'FCFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -cpp -O2' 'BASH_SHELL=/bin/bash' 'build_alias=x86_64-linux-gnu' 'MPICHLIB_CFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -Wformat -Werror=format-security' 'MPICHLIB_CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'MPICHLIB_CXXFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -Wformat -Werror=format-security' 'MPICHLIB_FFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong' 'MPICHLIB_FCFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-VeuB8Z/mpich-3.3.2=. -fstack-protector-strong -cpp' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'FC=f95' 'F77=f77' 'MPILIBNAME=mpich' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'LIBS=' 'MPLLIBNAME=mpl' Process Manager: pmi Launchers available: ssh rsh fork slurm ll lsf sge manual persist Topology libraries available: hwloc Resource management kernels available: user slurm ll lsf sge pbs cobalt Checkpointing libraries available: Demux engines available: poll select
上記コマンドにより、MPICHのバージョン確認を行います。
使い方は、次のコマンドで確認できます。
$ mpiexec --help Usage: ./mpiexec [global opts] [local opts for exec1] [exec1] [exec1 args] : [local opts for exec2] [exec2] [exec2 args] : ... Global options (passed to all executables): Global environment options: -genv {name} {value} environment variable name and value -genvlist {env1,env2,...} environment variable list to pass -genvnone do not pass any environment variables -genvall pass all environment variables not managed by the launcher (default) Other global options: -f {name} file containing the host names -hosts {host list} comma separated host list -wdir {dirname} working directory to use -configfile {name} config file containing MPMD launch options Local options (passed to individual executables): Local environment options: -env {name} {value} environment variable name and value -envlist {env1,env2,...} environment variable list to pass -envnone do not pass any environment variables -envall pass all environment variables (default) Other local options: -n/-np {value} number of processes {exec_name} {args} executable name and arguments Hydra specific options (treated as global): Launch options: -launcher launcher to use (ssh rsh fork slurm ll lsf sge manual persist) -launcher-exec executable to use to launch processes -enable-x/-disable-x enable or disable X forwarding Resource management kernel options: -rmk resource management kernel to use (user slurm ll lsf sge pbs cobalt) Processor topology options: -topolib processor topology library (hwloc) -bind-to process binding -map-by process mapping -membind memory binding policy Checkpoint/Restart options: -ckpoint-interval checkpoint interval -ckpoint-prefix checkpoint file prefix -ckpoint-num checkpoint number to restart -ckpointlib checkpointing library (none) Demux engine options: -demux demux engine (poll select) Other Hydra options: -verbose verbose mode -info build information -print-all-exitcodes print exit codes of all processes -iface network interface to use -ppn processes per node -profile turn on internal profiling -prepend-rank prepend rank to output -prepend-pattern prepend pattern to output -outfile-pattern direct stdout to file -errfile-pattern direct stderr to file -nameserver name server information (host:port format) -disable-auto-cleanup don't cleanup processes on error -disable-hostname-propagation let MPICH auto-detect the hostname -order-nodes order nodes as ascending/descending cores -localhost local hostname for the launching node -usize universe size (SYSTEM, INFINITE, <value>) Please see the intructions provided atfor further detailsmpich/doc/wiki/Index.md at main · pmodels/mpichOfficial MPICH Repository. Contribute to pmodels/mpich development by creating an account on GitHub.
ここまで確認できれば、MPICHの動作確認としては問題ないでしょう。
あとは、実際にPythonやCで開発したプログラムを用いた検証となります。
その場合は、複数プロセスによる並列処理の検証から行います。
いきなり、複数マシンを用意するのは難しいですからね。
その検証が終わったら、複数台マシンによる検証という流れになります。
ここまで来ると、検証用の環境を作ることでも大変です。
物理的にマシンを複数台用意するのは、一般的には難易度が高いでしょう。
そのような場合には、仮想環境を利用することになりますね。
以上、MPICHの動作確認の説明でした。