| 開発者 | LSUの計算技術センター、ラトガース大学の RADICAL グループ、IN2P3 (フランス)、アムステルダム自由大学 (オランダ) |
|---|---|
| 書かれた | C++、Python、Java |
| プラットフォーム | クロスプラットフォーム |
| タイプ | グリッドコンピューティング、分散コンピューティング ライブラリ |
| ライセンス | Boostソフトウェアライセンス、GPL |
| Webサイト | saga-project.org |
グリッド アプリケーション用のシンプル API ( SAGA )は、共通の分散コンピューティング機能用のアプリケーション プログラミング インターフェイス(API)を定義するためにOpen Grid Forumによって指定された関連標準のファミリです。
概要
分散コンピューティングの SAGA 仕様は、もともと 2009 年にリリースされた単一のドキュメント GFD.90 で構成されていました。
SAGA API は、 Globus や同様のグリッド コンピューティングミドルウェア システムを置き換えるものではなく、ミドルウェア開発者ではなく、グリッド コンピューティングの知識のないアプリケーション開発者を対象としています。このような開発者は通常、自分の目標に時間を費やし、インフラストラクチャ機能のコーディングに費やす時間を最小限に抑えたいと考えています。API は、アプリケーション開発者をミドルウェアから切り離します。
サービスの仕様と、それらとやり取りするためのプロトコルは、SAGA の範囲外です。むしろ、API は、アプリケーション開発者が必要とする機能を実装するために使用されるかどうかわからないサービス インフラストラクチャの詳細を隠すことを目指しています。ただし、API はOpen Grid Forum (OGF) 内のすべてのミドルウェア標準に準拠しています。[1]
SAGA API は、その範囲を拡張する追加の APIパッケージを指定するためのメカニズムを定義しました。SAGA コア API 自体は、ジョブ管理、ファイル管理、レプリカ管理、リモート プロシージャ コール、ストリームなどの多数のパッケージを定義します。SAGA は、最も重要で頻繁に使用される分散機能をカバーしており、Extreme Science and Engineering Discovery Environment (XSEDE)、EGI、FutureGrid など、すべての主要なグリッド システムでサポートされ、利用可能です。SAGA は、幅広い分散プログラミングおよび調整モデルをサポートするだけでなく、新しいミドルウェアをサポートするために簡単に拡張できます。[2] [3]
標準化
SAGA APIは、SAGAワーキンググループのOpen Grid Forumで標準化されています。[4] 一連のユースケース [5] 、[6]に基づいて、 SAGAコアAPI仕様[1]は、一般的なAPI原則(「SAGAルックアンドフィール」、および一般的に使用されるグリッドプログラミングパターン(ジョブ管理、ファイル管理とアクセス、レプリカ管理など)をレンダリングする一連のAPIパッケージ)を定義します。SAGAコア仕様では、追加のAPIパッケージの定義方法と、それらがコアAPIおよびその「ルックアンドフィール」とどのように関連するかを定義します。それに基づいて、いくつかのAPI拡張機能が定義されており、標準化プロセスのさまざまな段階にあります。[7] [8] [9] [10]
すべての SAGA 仕様はIDL (の一種) で定義されており、したがってオブジェクト指向ですが、言語に依存しません。さまざまな言語バインディング (Java、C++、Python) が存在しますが、現時点では標準化されていません。ただし、これらの言語バインディングのさまざまな実装には、比較的一貫した API 定義があります (特に、さまざまな Java 実装は同じ抽象 API クラスを共有します)。
SAGA コア API 仕様の「ルック アンド フィール」の部分は、次の領域をカバーしています。
- セキュリティとセッション管理
- 権限管理
- 非同期操作
- 監視
- 非同期通知
- 属性管理
- I/Oバッファ管理
建築

SAGAはオブジェクト指向インターフェースとして設計されています。関連する機能をオブジェクトセットにカプセル化し、それらは機能的な名前空間にグループ化されます。これはSAGAではパッケージと呼ばれます。SAGAコア実装では、次のパッケージが定義されています。[11]
- saga::advert -広告サービスへのアクセスのためのインターフェース
- saga::filesystem - ファイルとディレクトリへのアクセスのためのインターフェース
- saga::job - ジョブの定義、管理、制御のためのインターフェース
- saga::namespace - 抽象インターフェース (advert、filesystem、replica インターフェースで使用)
- saga::replica -レプリカ管理用のインターフェース
- saga::rpc -リモート プロシージャ コールクライアントとサーバーのインターフェイス
- saga::sd -分散環境でのサービス検出のためのインターフェース
- saga::stream - データ ストリーム クライアントとサーバーのインターフェイス
SAGAの全体的なアーキテクチャは、あるインターフェースを別のインターフェースに変換するために使用されるソフトウェア設計パターンであるアダプタパターンに従っています。SAGAでは、APIパッケージからの呼び出しを基礎となるミドルウェアのインターフェースに変換します。SAGAランタイムシステムは、遅延バインディングを使用して、実行時にどのプラグイン(ミドルウェアアダプタ)をロードしてバインドするかを決定します。 [12]
サポートされているミドルウェア
次の表は、現在 SAGA でサポートされている分散ミドルウェア システムの一覧です。「アダプタ スイート」というラベルの付いた列には、ミドルウェア システムのサポートを提供するミドルウェア アダプタのコレクション (リリース パッケージ) の名前が示されています。
実装
SAGA インターフェイス定義は特定のプログラミング言語に縛られていないため、SAGA 標準の実装はさまざまなプログラミング言語で存在します。実装言語とは別に、標準カバレッジの完全性や分散ミドルウェアのサポートもそれぞれ異なります。
サガC++
SAGA C++ [13]はC++で書かれたSAGA Core仕様の最初の完全な実装である。現在、C++実装は積極的に開発されていない。
RADICAL-SAGA(Python)
RADICAL-SAGA [14]は軽量のPythonパッケージで、OGF GFD.90 [1]インターフェース仕様の一部を実装し、さまざまな分散ミドルウェアシステムやサービス用のプラグインを提供します。RADICAL-SAGAは、広範なユースケース分析に基づいてGFD.90の最も一般的に使用される機能を実装し、実際の異機種分散コンピューティング環境やアプリケーションシナリオでの使いやすさとシンプルな展開に重点を置いています。RADICAL-SAGAは現在、ジョブとファイル管理のコアAPIと、リソース管理API拡張を実装しています。RADICAL-SAGAは、PBS、Sun Grid Engine、SSH、SFTPなどのサポートを含む、さまざまな分散ミドルウェアシステムとサービス用のプラグインを提供します。RADICAL-SAGAは、XSEDE、 [15] LONIとFutureGrid、[16]その他のクラウドとローカルクラスターを含む分散サイバーインフラストラクチャ上で実行される分散アプリケーションとフレームワークの開発に使用できます。
JavaSAGA
JavaSAGA は SAGA の Java 実装です。JavaSAGA のこのステータスは不明です。
java.util.io.*をインポートします。
int main ( int argc , char ** argv ) {名前空間sa = saga ::属性;名前空間sja = saga :: job ::属性;
試してください{ saga :: job :: description jd ;
jd.set_attribute ( sja :: description_executable , " /home/user/hello-mpi" ) ; jd.set_attribute ( sja :: description_output , " /home/user/hello.out" ); jd.set_attribute ( sja :: description_error , " /home/user/hello.err " ) ;
// これを MPI スタイルのジョブとして宣言します
jd . set_attribute ( sja :: description_spmd_variation , "mpi" );
// 使用するキューの名前
jd.set_attribute ( sja :: description_queue , " checkpt" ); jd.set_attribute ( sja :: description_spmd_variation , " mpi" ); //要求するプロセッサの数jd.set_attribute ( sja :: description_number_of_processes , " 32 " ) ;
saga :: job :: service js ( "gram://my.globus.host/jobmanager-pbs" ); saga :: job :: job j = js .create_job ( jd ) ;
j . run ()
} catch ( saga :: exception const & e ) { std :: cerr << "SAGA 例外がキャッチされました: " << e . what () << std :: endl ; } }
jSAGA
jSAGA [17]はSAGA Core仕様の別のJava実装である。jSAGAは現在活発に開発が進められている。
デシル
DESHL [18] (DEISA異機種管理層向けサービス)は、 DEISA内での計算ジョブの送信と管理の機能を提供します。DESHLは、Javaで実装されたSAGA風のAPIの上にコマンドラインツールのセットとして実装されています。バックエンドでは、UNICOREシステムの一部である汎用グリッドアクセスクライアントライブラリであるHiLAとインターフェイスします。
例
ジョブの提出
分散アプリケーションの一般的なタスクは、ローカルまたはリモートの分散リソース マネージャーにジョブを送信することです。SAGA は、このためにジョブ パッケージと呼ばれる高レベル API を提供します。次の 2 つの簡単な例は、SAGA ジョブ パッケージ API を使用して、Message Passing Interface (MPI) ジョブをリモート Globus GRAM リソース マネージャーに送信する方法を示しています。
C++
#include <saga/saga.hpp>
int main ( int argc , char ** argv ) {名前空間sa = saga ::属性;名前空間sja = saga :: job ::属性;
試してください{ saga :: job :: description jd ;
jd.set_attribute ( sja :: description_executable , " /home/user/hello-mpi" ) ; jd.set_attribute ( sja :: description_output , " /home/user/hello.out" ); jd.set_attribute ( sja :: description_error , " /home/user/hello.err " ) ;
// これを MPI スタイルのジョブとして宣言します
jd . set_attribute ( sja :: description_spmd_variation , "mpi" );
// 使用するキューの名前
jd.set_attribute ( sja :: description_queue , " checkpt" ); jd.set_attribute ( sja :: description_spmd_variation , " mpi" ); //要求するプロセッサの数jd.set_attribute ( sja :: description_number_of_processes , " 32 " ) ;
saga :: job :: service js ( "gram://my.globus.host/jobmanager-pbs" ); saga :: job :: job j = js .create_job ( jd ) ;
j . run ()
} catch ( saga :: exception const & e ) { std :: cerr << "SAGA 例外がキャッチされました: " << e . what () << std :: endl ; } }
パイソン
#!/usr/bin/env python3
import sys
import time
import bliss.saga as saga
def main ( jobno : int 、 session 、 jobservice ) -> None :
bfast_base_dir = saga . Url ( "sftp://india.futuregrid.org/N/u/oweidner/software/bfast/" )
試してください:
workdir = " %s /tmp/run/ %s " % ( bfast_base_dir . path , str ( int ( time . time ())))
basedir = saga . filesystem . Directory ( bfast_base_dir , session = session )
basedir . make_dir ( workdir )
jd = saga . job . Description ()
jd . wall_time_limit = 5 # ウォールタイム(分単位)
jd . total_cpu_count = 1
jd . environment = { "BFAST_DIR" : bfast_base_dir . path }
jd . working_directory = workdir
jd . execute = "$BFAST_DIR/bin/bfast"
jd . arguments = [ "match" , "-A 1" ,
"-r $BFAST_DIR/data/small/reads_5K/reads.10.fastq" ,
"-f $BFAST_DIR/data/small/reference/hg_2122.fa" ]
myjob = js.create_job ( jd ) myjob.run ( )
print ( "ジョブ # %s はID ' %s '、作業ディレクトリ: ' %s ' で開始されました"
% ( jobno , myjob . jobid , workdir ))
私のジョブ。待機()
print ( " ID ' %s ' のジョブ # %sが終了しました (RC: %s )。出力は次の場所で使用可能です: ' %s '" % ( jobno , myjob . jobid , myjob . exitcode , workdir ))
ベースディレクトリ.close ( )
except saga.Exception , ex : print ( f "ジョブ実行中にエラーが発生しました: { ex } " ) sys.exit ( -1 )
if __name__ == "__main__" :
execution_host = saga . Url ( "pbs+ssh://india.futuregrid.org" )
ctx = saga . Context ()
ctx . type = saga . Context . SSH
ctx . userid = "oweidner" # like 'ssh username@host ...'
ctx . userkey = "/Users/oweidner/.ssh/rsa_work" # like ssh -i ...'
session = saga.Session ( ) session.contexts.append ( ctx )
js = saga.job.Service ( execution_host , session )です。
i が 範囲( 0 , 4 )の 場合: main ( i , session , js )
助成金
SAGAプロジェクトに関連する作業は、以下の助成金によって資金提供されています:NSF-CHE 1125332(CDI)、[19] NSF-EPS 1003897(LaSIGMA)、[20] NSF-OCI 1007115(ExTENCI)。[21]以前の助成金には、NSF-OCI 0710874(HPCOPS)、NIH助成金番号P20RR016456、およびOMII-UK経由のUK EPSRC助成金番号GR / D0766171 / 1が含まれます[22]
外部リンク
- SAGA-Bliss - SAGA の Python 実装
- jSAGA - SAGA の Java 実装
- SAGA C++ - SAGA の C++ 実装
- SAGA-GLib - GLib 用の SAGA の Vala 実装
- サガプロジェクト
- POSIX
注記
- ^ abc T. グッデール; S.ジャ; H.カイザー; T. キールマン; P.クライジャー; A. メルツキー; J. シャルフ; C・スミス。 「グリッド アプリケーション用のシンプルな API (SAGA)」(PDF)。OGFドキュメントシリーズ90。
- ^ SAGA: グリッド アプリケーション用のシンプルな API、グリッドでの高レベル アプリケーション プログラミング Tom Goodale、Shantenu Jha、Harmut Kaiser、Thilo Kielmann、Pascal K leijer、Gregor von Laszewski、Craig Lee、Andre Merzky、Hrabri Rajic、John Shalf Computational Methods in Science and Technology、vol. 12 # 1、2006
- ^ SAGA を使用したアプリケーション レベルでのグリッド相互運用性 Shantenu Jha、Hartmut Kaiser、Andre Merzky、Ole Weidner E-SCIENCE '07: 第 3 回 IEEE 国際 e-Science および Grid Computing 会議の議事録 (e-Science 2007)、2007 年
- ^ 「概要 - SAGA WG - Open Grid フォーラム」。
- ^ Shantenu Jha、Andre Merzky: "A Collection of Use Cases for a Simple API for Grid Applications"、OGF Informational Document、GFD.70 (pdf)
- ^ Shantenu Jha、Andre Merzky:「グリッド アプリケーション用のシンプルな API の要件分析」、OGF 情報ドキュメント、GFD.71 (pdf)
- ^ Steve Fisher、Anthony Wilson、Arumugam Paventhan: 「SAGA API Extension: Service Discovery API」、OGF 推奨文書、GFD.144 (pdf)
- ^ Andre Merzky: 「SAGA API Extension: Advert API」、OGF 推奨文書、GFD.177 (pdf)
- ^ Andre Merzky: 「SAGA API Extension: Message API」、OGF 推奨文書、GFD.178 (pdf)
- ^ Steve Fisher、Anthony Wilson:「SAGA API 拡張: 情報システム ナビゲータ API」、OGF 勧告文書、GFD.195 (pdf)
- ^ 「SAGA C++ リファレンス API (ドキュメント)」。
- ^ 「SAGA: 仕組み」www.vimeo.com。
- ^ 「SAGA C++」。
- ^ 「RADICAL-SAGA」.
- ^ 「XSEDEにご興味をお持ちいただきありがとうございます」。
- ^ 「FutureGrid」。2010年11月25日時点のオリジナルよりアーカイブ。
- ^ 「jSAGA」.
- ^ 「DESHL」。2012年6月8日時点のオリジナルよりアーカイブ。
- ^ NSF-CHE 1125332 (CDI)
- ^ NSF-EPS 1003897 (ラシグマ)
- ^ NSF-OCI 1007115 (ExTENCI)
- ^ OMII-イギリス
