Frequently Asked Questions#
Map-Reduce Programming in General#
- (in preparation)
FAQ#
Spawning Mappers#
- Do not use them; consider using the command kmrrun
instead.
- kmr_map_via_spawn() and kmr_map_parallel_processes() are mappers which will start MPI processes via MPI_Comm_spawn() for map processing.
- The use of spawning mappers is fairly complicated, because they start separate MPI applications. It does not make sense to call map functions as usual, because what is invoked is a process but not a function, and the key-value need to be passed as an argument in the command list.
- I got an error; What that means?
- ;;KMR [00000] error: kmr_map_via_spawn: no dynamic processes in universe.
- This message indicates the MPI environment is not setup to use MPI_Comm_spawn(). KMR checks the universe size of MPI before calling MPI_Comm_spawn(). Most MPI systems require to reserve necessary nodes/ranks in advance.
- Be sure to use so called "host-files" or to inform job schedulers to make extra ranks available.
- I got another error; What that means?
- ;;KMR [00000] error: kmr_map_via_spawn: maxprocs not specified.
- This message indicates commands for spawning are specified but it lacks information of the number of processes.
- It can be fixed either by making the command strings include "maxprocs=n" at the first position, or by setting MPI_Info to include a "maxprocs" entry.
Questions and Answers In Tutorials#
(Q&A extracts from discussions in Tutorials (in Japanese))
K Map-Reduce#
- Is KMR for K computer only?
- KMR can be used on Fujitsu FX10 and Linux clusters with MPI.
- Do in-memory operations mean it does not communicate?
- KMR does communicate via MPI, but it does not perform file I/O operations for internal workings.
- Does it need explicit OpenMP programming in mappers and reducers?
- Mappers and reducers are run by multiple threads of OpenMP without any explicit order.
- Does KMR use MPI-I/O?
- No.
- Are data of keys and values text or binary?
- It depends on processing of mappers and reducers. There is no restriction on using binary data as inputs to mappers.
- Does it incur large overheads in non-parallelizable parts such as initializing input data?
- It depends on processing, too. Cost of initialization of KMR itself is small.
//# この手法を用いた場合、1 つの大きいファイルを読み込むのが良いのか、それとも予めある程度のサイズに分割したファイルを読み込むのが良いのか、いずれが性能的に優れているか? //** 利用者レベルでファイルを分割していても、結局はファイルシステムへのアクセスはストライプ分割された、複数IOノードへのアクセスとなるため、ストライプカウントを適切に設定すれば、どちらも性能は変わらないと思われる。
KMR利用方法#
- Mapにより生成されたKeyの個数が、(Reduce実行する)ノード数よりも多くなった場合にはどうなるか?
- ハッシュ関数に依存するが、おおよそKey-Valueの個数が均等になるようにノードに分散される。
- KVSはメモリ上に確保されるとのことであるが、メモリ量を超えた場合はどうなるか?
- アボートする。そのような場合には、実行ノード数を増やし総メモリ量を増やした上で再実行を行う。1ノードに16GBを超えるKVが集まった場合には、京コンピュータでは動作しない。
- KVをファイルに一時保存するMapReduce処理系としてSandia National Laboratoriesで開発されたMR-MPIというものがある。
TutorialのKMR利用事例#
- REMD (Replica Exchange Molecular Dynamics; レプリカ交換法)のKMR実装は公開されているのか。読みやすいか?
- 公開はしていないが、参考にしたREINがGPLで公開されているので、GPLとして公開可能である。読みやすくはないかもしれない。
- REMDの結果にて、MapReduceのほうが性能よく見えるがなぜか?
- 行っている計算は全て同じである。タスク管理がKMRの方が優れていると思われる。
- レプリカ交換数が増えればKMRのほうが有利か?
- 有意差はないと思われる。
- ゲノム解析で、I/Oを行うMergeをオンメモリ通信のShuffuleに変更したことだけが有意差?
- そうである。実際に他の処理は全く一緒である。
Questions and Answers#
- Mapperで生成するkeyは重複していても良いのか?
- 大丈夫。Keyごとに分類されてReducerに渡される。
- Mapper/Reducerの個々の処理粒度はどのくらいの時間を目安にすればよいのか? (分単位くらいと考えていれば良いのか?)
- 目安の設定は難しいが、分単位の処理であれば問題はないだろう。
- KMRプログラム実行中にマシンがダウンしてしまったときは全部ダウンしてしまうのか?
- 現状の実装ではプログラム全体がダウンする。ただ、実行状態の保存・再開機能(Checkpoint/Restart)を実装しているので、中断時の状態から再開することは可能。
- C99に準拠しなければならない理由は何なのか?
- ユーザプログラムは準拠の必要はない。実際Fortran、C++でもプログラムは実装可能。
- KMR本体はC99標準で実装されている。
- 乱数はどのように生成するのか? 並列乱数を使用しているのか?
- サンプルでは乱数はrand()で生成している。KMRのライブラリを用いたプログラミングを行えば、並列乱数生成ライブラリと組み合わせてプログラム実装できる。ただ、KMRRUNを使う場合はそのようなことはできない。
- Mapperが一つ目を呼び出したときは000(ファイル名)でその次に呼び出すのが001(ファイル名)なのか?
- 順番通りに起動されるが、実際には確保した(動的)プロセス数分同時に並列に起動される。
- プロセッサ数2個でKMRRUNを実行するとどうなるのか?
- KMRRUNの実行並列数とKV Generatorの実行並列数は等しい。このため、KV Generatorも2プロセスで実行される。
- Mapperの出力サイズが大きい場合、KV Generatorの実行コストも上がることが考えられるため、このような場合にはKMRRUNの並列数を上げた方がよい ことがある。Mapperしか実行しない場合、KV Generatorの実行コストが小さい場合にはKMRRUNは1プロセスで実行しても問題無い。
- 実行時の並列数を意識して指定しないと遊休リソースが生じてしまうが、どう注意すればよいか?
- 可能ならばアルゴリズムを変更し、Mapperの入力数(入力ファイル)と Reducerの入力数(Mapper出力Key種類)を合わせられるとよい。
- Reducerを実装できるのが売りだと思うのだがどうやって実装するのか? 自由に書けるのでどこかの処理に特化して速いというということがあるのか?
- 同一Keyを持つ複数のKVを集計する処理として実装する必要がある。特定の処理に対して最適化は行っていない。
- MR-MPIというのは別のソフトなのか? 機能の違いは何か? MR-MPIもノードの中でMPIを使えば速くなるのではないか?
- 別ソフトである。MR-MPIではノード内の並列実行はされない。コアを活用するには、全コア数分のMPIプロセスを立ち上げる必要があり、 数万コア規模になるとスケールしない。一方、独自のページングの仕組みでKVを管理しており、ノードのメモリ量を超えたKVの処理が可能。KMRの場合、ノードメモリが枯渇すると強制終了となる。