Ubuntu 20.04 LTSにMPICHをインストールする

Ubuntu 20.04 LTSにMPICHをインストールする サーバー

「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 LTS3.3
20.04 LTS3.3.2
20.103.4
21.043.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 at 
mpich/doc/wiki/Index.md at main · pmodels/mpich
Official MPICH Repository. Contribute to pmodels/mpich development by creating an account on GitHub.
for further details

ここまで確認できれば、MPICHの動作確認としては問題ないでしょう。
あとは、実際にPythonやCで開発したプログラムを用いた検証となります。

その場合は、複数プロセスによる並列処理の検証から行います。
いきなり、複数マシンを用意するのは難しいですからね。

その検証が終わったら、複数台マシンによる検証という流れになります。
ここまで来ると、検証用の環境を作ることでも大変です。

物理的にマシンを複数台用意するのは、一般的には難易度が高いでしょう。
そのような場合には、仮想環境を利用することになりますね。

以上、MPICHの動作確認の説明でした。

タイトルとURLをコピーしました