はじめに

PCクラスタという単語は知っているけれども、その中味について全くしらない状態から、上記242ページの『超入門文書 http://mikilab.doshisha.ac.jp/dia/smpp/cluster2000/ 』を読んで、かいつまんで要点化してみる。それにより、新規にPCクラスタを導入するにあたり、どこから手をつけ、どこで手を打つのがよいのかについての具体的なイメージを得ることを目標とする

<講義3> Diskless Cluster構築入門

  1. Diskless Clusterとは
    • 構成
      • サーバマシン1台と計算マシン複数台
        • サーバマシンがHDDを持つ、計算マシンは持たない(NFSなどでサーバマシンのHDDを参照する)
        • カーネルファイルシステムはサーバマシンのみが持つ
        • ネットワーク負荷が高くなりうる
        • 計算マシンにswap領域が取れない
        • ファイルの入出力の負荷が高い
    • 実装上の特徴
      • 計算マシンのブート
        • HDDがないので、ブートディスクを別に用意する(FDD、サーバのHDD)
      • サーバマシンの設定
        • BOOTPサーバの設定・起動(計算マシンのサーバ接続用)
        • TFTPサーバの設定・起動(計算マシンのカーネルダウンロード用)
        • NFSサーバの設定・起動(計算マシンのHDDファイルシステムアクセス)
        • 各計算マシン用のディレクトリの作成と関連するシステム設定
        • NISによるユーザ共有設定
        • 計算マシンのカーネル作成

<講義4> PCクラスタにおけるベンチマークとジョブ管理

ベンチマークとは

  1. ジョブ管理
    • 複数のノードの状況を閲覧・監視するツール
    • ジョブ管理システム(JMS;Job Management System)
      • JMSの仕事
        • ジョブの受付
        • ジョブのスケジューリング
        • リソース管理と割り振り
      • JMSはフリー・市販それぞれある

<講義6> 並列処理入門:PCクラスタに限らず並列処理に関するハード的・ソフト的概論

  1. 並列計算機の分類
    • 命令系統とデータフローとで4分類する
      • 命令系統1本・データフロー1本
      • 命令系統複数本・データフロー1本
      • 命令系統1本・データフロー複数本
      • 命令系統複数本・データフロー複数本
  2. 並列計算機の構成方式
    • プロセッサ間のデータの授受方式・メモリの配置方式とで分類する
  3. 相互結合網の形態
    • メモリ・プロセッサの結合トポロジの設計をして通信遅延を減らす
  4. 並列処理のプログラム
    • 並列処理に特化したHigh-Performance Fortranなどを用いた画一的並列処理(並列処理に適した配列・行列処理の自動並列化、プログラミング時に並列処理を指定する必要がない)
    • MPIやPVMを用いて、並列処理方法を指定しながらの並列プログラミング
  5. 並列処理の効率
    • 並列処理を実行するにあたって、高速化を邪魔する要素はいろいろあり、その中にはハードウェア上の問題、ハードウェア配置設計上の問題なども含まれるが、それらの最適化のほかにアルゴリズム上の最適化の問題が存在する
    • アルゴリズム上の並列処理の効率化
      • 並列化効率を数値で表す方法
        • 利用プロセッサ数の関数として定義
        • 並列処理部分と非並列処理部分と、並列処理効率の総合結果が処理全体の速度向上率を決定する
      • 律速因子
        • 逐次処理は全体の並列化効率を大きく下げる
        • プロセッサ間の通信速度
          • 処理の粒度(1度に1つのプロセッサに与えられる処理の大きさ)を大きくすることで通信速度による効率化の低減を防ぐ
        • ロードバランス
          • すべてのプロセッサに均一に動作を行わせ、待機時間を減らす
        • 並列化する単位の選択
          • 処理全体の中で発生する、ベクトル・行列などの演算を並列化するか、処理が取り扱う『問題』の特性のうち分割可能な事象を分割して並走させるかという選択が可能
          • 前者を数値ソルバー、後者を自然ソルバーと呼ぶ

<講義8> 並列化手法のご紹介と,クラスタを組む上での各種Tips

  1. 並列化にあたって
    • プログラミング対象の中から並列性の高い事象を抽出し並列にプログラミングする
    • すでに1プロセッサ仕様で作られているプログラムを並列コンピュータに移植するべくプログラムしなおすこと=『並列化プログラム』
  2. 『並列化プログラム』のこつ
    • 遊んでいるCPUにジョブが割り当てられることで発生する通信を減らすために、ただ遊んでいるCPUに「無駄なジョブ」を与える

<講義9> グローバルコンピューティング

  1. グローバルコンピューティングとは
    • 周囲にありほとんど遊んでいるPCを使う
    • PCクラスタは占有的使用を前提としたハードウェア・ソフトウェア構築であるのに対し、グローバルコンピューティングでは、「あいているときだけ、所有者の迷惑にならないような配慮の下」使わせて、というスタンスである
  2. Condor HTCondor - Home
    • バイナリソース配布型のグローバルコンピューティングシステム
    • 「所有者に迷惑をかけない」ための仕組み
      • あいているPCを見つける
      • 利用させてもらっているPCの使用が始まったらそれを感知して、そのジョブを別のPCに引っ越す
      • 引越し先がなければサスペンドする
  3. Globus Toolkit
    • Condorとはことなり、グローバルコンピューティングシステム構築用の基本サービスツール一式

<講義1> PCクラスタの作り方

  1. PCクラスタの作り方
    • PCクラスタとは?
      • いわゆるパソコン(PC)は、それぞれが単独に動くものだが、それらをネットワークでつないで、1つの処理を実行するように設定したシステムのこと
    • PCクラスタの導入とは
      • 要求計算機性能を満たすハードウェアを手に入れる
      • ハードウェアを組み立てる
      • クラスタ化のためのソフトウェアを入れる
      • 使う
      • メンテナンスする
      • スケールアップ・チューンアップする
    • ハードウェアの入手部分以外のコスト削減が可能
  2. まずは作ってみよう:PCクラスタ構築の実際
    • ハードウェア:複数台のPCとネットワーク接続機器の入手
      • Linux動作確認・ネットワーク接続OKのPCとネットワーク機器を購入、または
      • すでに複数台のLinuxPC+ネットワーク接続済みの機器セットを購入
    • ソフトウェア
    • インストールするソフトウェア
    • Linuxディストリビューションの選択
    • 並列ライブラリとは
      • PCクラスタは『分散並列機』
      • 複数のCPUが存在し、それぞれのCPUがメモリを有する
      • 通常はCPU内メモリは当該CPUからのみアクセス可能である
      • クラスタでつながれたCPU同士が自身以外のCPUのメモリにアクセスすることがPCクラスタの仕組みである
      • あるCPUから他のCPUのメモリにアクセスするための仕組みを『メッセージパッシング』と呼び、この機能を実現するためのソフトウェアが『並列ライブラリ』である
    • ソフトウェアのインストール
  3. 構築上の留意点
    • ハードウェア
      • PC
        • メモリ
        • チップセット
        • CPU
        • ネットワークカードとそのドライバ
        • ハブ
        • ハードディスクとそのデータ転送方式
      • ネットワーク:並列PC間のデータ転送の効率化のため
        • PCあたりのネットワークカード数
        • 連結トポロジ
        • Ethernetとその代替
    • ソフトウェア
      • カーネルの再構築
        • 必要機能のみの稼動に限定
        • Linuxのネットワーク関連部分の更新
        • PCクラスタに比較的特有なソフトウェアとの互換性の維持
      • 複数PCリソースの共有管理のためのツール
        • 複数ノードPCをサーバとそのクライアントに分ける『サーバ・クライアントシステム』
          • NFS(Network File System):ファイルの共有
          • NIS(Network Information Service):ユーザの共有
          • NTP(Network Time Protocol):時計の共有
        • 複数ノードPCに対して一括してインストール可能なアプリケーション
      • 並列プログラム作成・実行のためのツール

<講義2> MPIによる並列プログラミングの基礎

  1. MPI(Messsage Passing Interface)とは
    • プロセッサ間でメッセージを交換する方式(インターフェース) 2種
      • メッセージパッシング方式
      • データ並列方式
    • メッセージパッシング方式 2種
      • MPI(Message Passing Interface)
      • PVM(Parallel Virtual Machine)
  2. MPIのインストール
    • 通常のLinuxソフトウェアのインストール・設定と異なる点
      • インストール先
        • PCクラスタのノードPCのそれぞれにインストールするか否かはライブラリにより異なる
          • 全ノードPCにインストールする、もしくは、NFSで共有しているファイルシステムにインストールする場合
          • 1ノードにインストールし、そのノードがマスターマシンとして機能する場合
      • ノードの指定
        • hostノード(単一)とslaveノード(複数)を記述する
  3. ノード間通信とその制御
    • 通信関数と制御関数
      • ライブラリに装備された複数プロセス間のメッセージ交換方法に関する関数とプロセス制御のための多数の関数
--通信参加プロセス数による区別
---1対1通信
---グループ通信
----クラスタ内全ノードを1グループとする場合と一部のノードを1グループとする場合とがある
---送受信手続きの開始・保留方法による区別
----ブロッキング通信
-----メッセージを送るにあたり、送信を打診して、受け手の受信許可を待つ
-----メッセージの送信打診から受信許可の受け取りまで待機状態になる
-----送信と受信とは同時に起こり、その送受信中は送り側・受け側ともに待機状態になる
-----送受信終了後に処理が開始される
----ノン・ブロッキング通信
-----メッセージを送るにあたり、受けて側の状態によらず、すぐに送信を開始する
-----送信開始後も、別の処理を継続する
-----送信と受信とは同時には始まらないが、受信の終了をもって、送信は完了する
-----送受信終了は明示的に送り側・受け側に伝えられ、その情報をもって次の処理が開始される
-----1対1通信のときのみ使用可能
-----待ち時間を減らすことが可能
  • PCクラスタでの並列プログラムの実行制御
    • ライブラリに装備された複数の制御関数と2つの通信関数をプログラムに用いることによってプロセス間の通信制御を行う
    • コミュニケータ
      • 並列プログラムが実行するプロセスの集合
      • すべてのプロセスはコミュニケータ上のID(rank)を与えられる
      • 制御関数・通信関数はrankを引数としてとることにより、制御・通信を実行する
-PCクラスタでの並列プログラムの実行の実際
--クラスタホストマシンにログインする
--"クラスタ"に対して、使用するPC数を指定してジョブを投入する
--ジョブの投入はスクリプトによって行う
--個々のプロセスの起動は実行環境に任せる
  • その他 実際上の問題
    • 送受信要素数が不明な状態での送受信
      • データの受信を終える前にデータの要素数を把握してやることでスムーズな送受信を実現する
      • 構造体など複雑なデータ構造の送受信においては、Byte型置換(パック)をして少ない回数で送り、受信後アンパックするなどの工夫も必要となることがある