meta-something

論文とか研究とか趣味のネタとか

論文紹介「Is Singularity-based Container Technology Ready for Running MPI Applications on HPC Clouds?」

タイトル

"Is Singularity-based Container Technology Ready for Running MPI Applications on HPC Clouds?"

著者

  • Jie Zhang, Xiaoyi Lu, Dhabaleswar K. Panda
    • from Network-Based Computing Laboratory, The Ohio State University

Network-Based Computing Laboratory は MVAPICH, OSU Benchmark などを開発(発表)しているHPC業界では有名なラボです。

掲載雑誌、国際会議の情報等

Proceedings of the10th International Conference on Utility and Cloud Computing (UCC '17) (ACM)

本論文はUCC'17で "Best Student Paper Award" を受賞しています。

概要

HPC向けコンテナ技術Singularityの性能への影響をHPC向けのハードウェア環境上でMPIアプリケーションを実行して実験した結果、nativeからの性能低下は最大でも8%程度だった。

もうちょっと詳しく

一般にコンテナ型仮想化技術として有名なDockerとイメージの互換性があり、HPC領域向けのコンテナ技術として有望視されているSingularityを用いたHPC向けアプリケーションのベンチマーク論文。実験ではMPIによる1対1通信,集団通信,HPCアプリケーション(Graph500NASベンチマークなど)を実行しており、また一般的なIntel Haswell CPU*2+InfiniBandのクラスターと、Intel KNL+Intel Omni Path搭載のクラスター環境で動かしている。多くの場合にSingularityを利用したケースはnativeとほぼ同等の性能を示していたが、一部では0~8%程度の性能低減が見られた。

個人的な感想

論文では様々なハードウェアアーキテクチャ(KNLの特殊なメモリ構成、大量のメニーコア)、高速なインターコネクト、仮想化技術の有無で実験を評価したと述べているが、Singularityが内部的に利用する仮想化技術がどのように他の要素に影響を及ぼすのか、に対する考察がない。また、0-8%程度の性能低減が過去文献と比較してリーズナブルであるか否かについても議論がない。そこを最も知りたかった、、

singularity.lbl.gov

Singularity公式ページのUser Guideによれば、Singularityのプロセスの流れは以下の通り。

1. Singularity application is invoked
2. Global options are parsed and activated
3. The Singularity command (subcommand) process is activated
4. Subcommand options are parsed
5. The appropriate sanity checks are made
6. Environment variables are set
7. The Singularity Execution binary is called (sexec)
8. Sexec determines if it is running privileged and calls the SUID code if necessary
9. Namespaces are created depending on configuration and process requirements
10. The Singularity image is checked, parsed, and mounted in the CLONE_NEWNS namespace
11. Bind mount points are setup so that files on the host are visible in the container
12. The namespace CLONE_FS is used to virtualize a new root file system
13. Singularity calls execvp() and Singularity process itself is replaced by the process inside the container
14. When the process inside the container exits, all namespaces collapse with that process, leaving a clean system

大雑把な流れは以下の通り(おそらく)

No. 処理
1~6 プロセス起動、サブコマンド・環境変数・オプションのパースなどの事前準備
7~10 バイナリが実行され、プロセスの名前空間を隔離する(オプションで無効化可能)
11~12 コンテナイメージのファイルシステムをホストにマウントし、プロセスから見えるルートファイルシステムを隔離する
13 コンテナの中で execvp() してコマンド実行
14 プロセスが終了すると関連プロセスおよびマウントポイント等を削除する

上の処理を見ると、性能に影響するかもしれないと考えられるのは以下の2点

後者についてはおそらく chroot() を呼んでいるだけではないか(予想)と思うが、これはファイルI/Oに特に影響を及ぼさないはず。

前者の影響がどの程度あるのかが問題になるが、プロセスの名前空間の隔離ならば以前のIBMのDocker性能評価の論文[Felter, 2015]を引用すれば、単純な計算において性能への影響は0-3%程度におさまると予想できる。IBMの論文では通信レイテンシ等のオーバーヘッドが大きいことを報告していたが、Singularityではホストに依存する通信関連の設定や依存ライブラリ・バイナリは、ホストのものをコンテナ内部にそのままマウントする形なので、事実上、仮想化による性能の影響はない(というよりも、仮想化を行っていない)はず。

論文に何も議論がなかったのでこれ以上は議論のしようがないが、今回の性能の低減は何が原因で発生しているのかを知りたい。ので、近く実験をしてみよう。

紹介スライド

www.slideshare.net

インターンの成果が欧州スパコンの本番環境で使えるようになった

前回の記事で紹介した3ヶ月のスイスのCSCS滞在中にHPC運用チームで取り組んだ成果が、無事に同機関のスーパーコンピュータPizDaintの本番環境上で利用可能になったようです。

metavariable.hatenablog.com

はじめは期間が長いと思っていたインターンも、作業を進めるうちに「3ヶ月では足りない、もっとやりたいことが…」となり帰国後もしばらくスイスに心を置いてきた感覚でしたが、無事に国際会議発表も本番環境への提供もできたという報告をチームメンバーから貰えて一安心と言ったところです。

ちなみに国際会議の発表を取り上げた記事中に発表の録画映像があるのですが、発表者のAlberto氏(チームメンバー)が冒頭で以下のように触れて頂けたことに(共著ではないものの)少し嬉しみを感じました。

"... and I would like to acknowledge the efforts of Kento AOYAMA from Tokyo Tech who made big contributions to our work during his internship at CSCS."

insidehpc.com

国際会議の発表スライド (by Alberto Madonaa)

www.slideshare.net

PizDaint上のShifterのユーザーガイド

Shifter

Advanced Shifter User Guide

スイスで3ヶ月間の留学を完走した感想

昨年2017年秋~冬にかけて経験した3ヶ月ほど滞在したスイスのCSCSで行った海外留学について書いてみます。ほとんど研究内容には触れず、かなり一般的な話です。タイトルにある通り、研究というよりもただの感想です。

海外留学の概要

  • 滞在場所
    • Lugano, Switzerland
  • 渡航期間
    • 2017年9月中旬 ~ 2017年12月中旬(約3ヵ月間)
  • ホスト機関
    • Swiss National Supercomputing Centre
      • (Italian: Centro Svizzero di Calcolo Scientifico; CSCS)
  • 研究内容(ざっくり)

CSCSについて

www.cscs.ch

  • スイス連邦工科大学(ETH Zurich)の運営するスーパーコンピューティングセンター
  • 正式名称はSwiss National Supercomputing Centre (Italian: Centro Svizzero di Calcolo Scientifico) で、イタリア語の頭文字を取って CSCSと呼ばれる
  • 2017年7月のTOP500において3位にランクインしたPiz Daintを運用している
  • スーパーコンピューターに関連するインフラ基盤から応用研究のアプリケーションまで、HPC分野の研究者が幅広く所属する

f:id:MetaVariable:20180405142654j:plain
山頂から見下ろしたルガーノ湖と市街

全体的なスケジュール

時期 内容
2016.12 - ? 受け入れ先の候補を探す
2017.3 - 2017.4 受け入れ交渉
2017.4 - 2017.5 滞在ビザ等の調整
2017.9.19 渡航(日本→スイス)
2017.12.15 帰国(スイス→日本)

受け入れ先の交渉(?)

もともとHPC環境向けのコンテナ型仮想化OSSであるSingularityShifter等に興味があったので、主にコンテナ型仮想化をキーワードに関連する論文の著者や研究機関を探していたところ、色々な幸運に恵まれてShifterの研究開発・運用を行うCSCSに海外留学(インターンシップ)として参加できることになった。

スイス渡航にあたってのあれこれ

スイス渡航にあたって少し面倒だったのがビザの扱い。 基本的には90日以内の滞在の場合、日本国籍の人はスイス入国にビザ/査証は必要ない大使館情報)のだが、今回の滞在はこれが適用できなかった(微妙に合計90日を超えていたので)。

上記が適用できない場合、スイスの居住地を管轄する現地の行政組織(カントン)に滞在許可発行確認書を直接申請する必要があるのだが、現地の行政機関のページを覗いてみると日本語はもちろん英語情報もなく、イタリア語だったため、非常に困った。

結局、留学先の事務担当の方に必要書類を取得して頂いて、国際郵便で届けてもらうことで解決した。留学にあたっては受け入れ機関の事務の人が手続きしてくれる場合が多いらしいので、頑張って英語メールを書きましょう。

研究環境とか開発環境とか

今回はCSCSでHPCシステム(PizDaintを含む)の運用や研究開発を担当するHPC Operasions部門のSystem Integration Teamに参加して3ヵ月間を過ごした。 共同研究者用の広めのスペースでデスクを1つ借りて、持ち込んだSurface Bookで毎日Shfiterのコーディングしたり、テスト環境でコードをテストしたり、開発中コードの性能をメンバーと議論したり。

ミーティングはほぼ毎週行われ、進捗状況・計測データ・採用したアルゴリズムなどを資料にまとめて、事前にSlackで共有後に30分~1時間程度メンバーと方針について議論をしていた。開発中の性能測定やデバッグにあたってはPizDaintを利用できた。また、サクッとベンチマーク走らせたりする上ではPizDaint上のShifterは結構便利だったので、個人的にはやっぱりHPC環境でもコンテナ使いたい。

ちなみにミーティング資料について特に何も指定がなかったのでMarkdownで書いていたが、Visual Studio Codeの機能含めてわりとウケは良かった。(Visual Studio CodeのMarkdown Preview機能 + PDF変換プラグイン

また、内部のソフトウェア開発ではGitLabをベースにしたCIパイプラインが運用されていて、

  1. 内部ネットワーク上でホストしているGitLabからcloneして開発
  2. PullRequest等をトリガーにGitLab CIのパイプライン開始、仮想テスト環境(Vagrant, Docker)を立ち上げてテストを実行
  3. テスト結果を見ながらレビューしたり諸々、大丈夫ならマージ
  4. コードマージ後、実テスト環境(PizDaintと同じ構成のマシン)で諸々の検証
  5. 問題なければ実際にリリース

という流れで開発と運用が行われていた。CS系の研究機関としてちゃんと開発ツールを使っている感じがあり、個人的にはとても居心地がよい場所だった。

最終日には滞在中の研究成果をまとめてCSCSスタッフの前でプレゼンテーションを行った。流石に緊張したが、それなりにスライドも作り込んで話したのでムードも悪くはなく、よい経験になったと思う。

f:id:MetaVariable:20180405143008p:plain

人間関係とか

基本的には毎日チームメンバーとお昼を一緒に食べていたのと、帰国前の最後の週にはメンバーの家でチーズフォンデュパーティーをしたりできたので、かなり仲良くなれたように感じる。

特にチームメンバーに過去に日本の国立大学で5年間ほど研究員をしていた人(ただし日本語は話せない)がいて、日本という共通のネタがあったこともあって、研究でも日常生活でも大変にお世話になった。また、チームメンバー以外でもスタッフ向けのパーティーやExcursionに参加して交流できたので結構充実していた。

その他

  • 居住地がイタリア語圏だったので主食がピザ、パスタ、ケバブ。深刻な野菜不足
  • 研究施設では英語が通じたが、市内は全くわからないイタリア語なので大変だった
  • 物価が高い(適当に安いものを食べても約10CHFくらい(≒約1200円)する)
  • 店舗の閉店時間が早い(19時には大手スーパー含めて閉店、日曜日は何処も開いていない)

完走した感想

これまでも学会等で何度か海外出張に行く機会はあったものの、1ヶ月以上の長期滞在は初体験だったので、大変に緊張していた。とはいえ2週間も経つ頃には、同じコンピュータサイエンスの背景知識があれば多少不完全な英語でもミーティングは可能で、難しい表現がなくとも日常会話はできるということがなんとなく理解できて、いつの間にかすっかり生活に馴染んでしまった。

1ヶ月も経つ頃には宿泊施設のキッチンでのんびり料理しながらチームメンバーオススメの専門書を読むのを楽しんだり、週末にはまた別の人にオススメされた観光地に旅行へ行ったり、CSCSでの研究作業が順調だったのもあって、いつの間にか海外での研究生活を楽しむ自分が居た。

興味がある対象の研究開発ができて、目の前のことに集中できる環境って、素晴らしいですね。。。

特によく言われる「限られた時間で最大限の仕事を行う」という意識はチームメンバーとの議論でも強く伝わってきたので、この意識は日本に持ち帰ってからの研究にも活かしたいところです。

おまけ:週末の旅行

欧州に長期滞在する機会は今後あるかわからないと思ったので、週末には長距離バスでイタリアの首都(ミラノ)、特急で片道4時間でヴェネツィアに旅行に行ったり、電車でチューリッヒに行ったりした。文化的な土台が違うと街並みも観光の名所も違って面白いですね。特にヴェネティアは人生で最も行ってみたい場所だったので、旅行的な意味ではもう悔いがないです。

f:id:MetaVariable:20180405142429j:plainf:id:MetaVariable:20180405142330j:plainf:id:MetaVariable:20180405141722j:plain
欧州旅行(ミラノチューリッヒベネツィア