科学計算プラットフォームとしての Linux を探る

Sage と Python を使用して計算を行う

Linux は科学計算に適した非常に優れたプラットフォームであり、学術界でさまざまなタスクを実行するために極めてよく使用されています。特定のアプリケーションに対応した Linux オープンソース・プロジェクトは数多くありますが、そのなかで Sage 数学プロジェクトではより包括的な問題解決機能を提供しています。この Sage をはじめとする、ひときわ高い注目を集めている科学アプリケーションの多くでは Python が主要言語として使用されており、この記事ではそれら Python を使用した科学アプリケーションを取り上げます。

Paul Ferrill, CTO, ATAC

Paul Ferrill は、これまで 20 年以上、コンピューター業界紙で著作活動を続けています。その出発点となったのは、LANtastic や初期のバージョンの Novell Netware などといった製品に関する PC Magazine でのネットワーキングのレビューでした。BSEE および MSEE の学位を両方取得した彼は、覚えていられないぐらい多くのコンピューター・プラットフォームおよびアーキテクチャーを対象としたソフトウェアを作成しています。



2012年 9月 13日

科学コミュニティーにおける Linux

科学コミュニティーで Linux が非常に重要な存在であることは驚くに当たりません。ハイパフォーマンスのコンピューティング・クラスターから可視化ソフトウェアに至るまで、Linux を利用したソリューションは大量にあります。Linux ディストリビューションのなかには、Red Hat Enterprise Linux をベースにしたディストリビューション全体が科学計算を対象としている、そのものずばり Scientific Linux という名前の Linux すらあります。

Sage と EPD (Enthought Python Distribution)

この記事では、Linux ワークステーションを使用して科学計算を行う 2 つの異なる方法に注目します。その 1 つは、Sage というオープンソースの数学処理システムを使用する方法であり、もう 1 つは EPD (Enthought Python Distribution) を使用する方法です。どちらも、中核となるオープンソースの Python ツールをいくつも使用して、負荷の重い計算処理を実行しています。この 2 つを試してみたい方は、Ubuntu ソフトウェア・マネージャーを使用して Sage と EPD をそれぞれインストールしてください。

この 2 つのうち、Sage はいくつもの異なるエンジンに対するシェルのようなものであるという点で、より包括的です。Saga のコマンドラインから、MATLAB や Mathematica などの商用製品を操作することさえできます。基本的に、Sage プロンプトで IPython を操作することにより、Sage のすべての機能にアクセスすることができます。また、Sage の機能について詳しく調べるためにはオブジェクトとメソッドの視点で考える必要があります。Sage には多種多様なコンピューター代数システムが含まれており、ユーザーはそれらをコマンドラインから操作することができます。

Sage は Python をベースにしていますが、各ステートメントを事前に構文解析してから Python インタープリターに渡すという点に注意することが重要です。このことが原因で、Sage を操作する単純なコマンドを見たときに混乱を招く可能性があります。Sage がこのような動作をする理由は、数学的な感覚で見た場合に可能な限り直感的に Sage にコマンドを入力できるようにするためです。その好例が指数の記号です。Pure Python では、2 を 4 乗するためには「2**4」と入力する必要がありますが、Sage では上向きの矢印 (^) を「2^4」のように使用します。また Sage では、整数の割り算などの一部の演算も基本的な Python とは異なる方法で処理します。

NumPy と SciPy

Sage と EDP の両方を構成するモジュールとして最よく知られているのは、NumPy と SciPy です。どちらのプロジェクトも 1990年代半ばあるいは後半あたりから存在しており、元々は Travis Oliphant 氏 (現在は Enthought 社の従業員) によって開始されたプロジェクトです。NumPy は配列や行列を操作するための中核となる数値的方法を提供します。この NumPy の基本配列データ構造を利用する SciPy には、線形代数から信号処理に至るまで、あらゆる分野に対応した広範なモジュールが含まれています。Enthought は NumPy プロジェクトと SciPy プロジェクト両方のスポンサーであり、新しいリリースに対して多大な貢献を続けています。


Sage をインストールする

Sage をインストールする方法はいくつかあります。Sage を実際にインストールせずに、ちょっと Sage を試したい場合には、ライブ CD 版を使用することができます。また、Oracle VM VirtualBox や VMware Player などの仮想マシンでライブ CD を実行することもできます。この記事では、Ubuntu (12.04) の最新リリースを実行する物理マシンと仮想マシンの両方に Sage をインストールする場合について説明します。

物理マシンにインストールする

Unbuntu 12.04 は最近リリースされたばかりなので、Unbuntu 12.04 上で Sage を起動して実行状態にするにはソースから Sage をインストールする方法が最も信頼性の高い方法です。そこで、ソースの tarball をダウンロードして、ソースを格納するのに都合の良いディレクトリーに解凍します。ソースをビルドするには、その前に前提条件として必要になるソフトウェアをいくつかインストールする必要があります。そのためには以下のコマンドを実行します。

sudo apt-get install build-essential gfortran
sudo apt-get install texlive xpdf evince

sudo apt-get install tk8.5-dev

前提条件として必要になるソフトウェアをインストールすると、Sage をビルドするための準備が整うはずです。Sage のビルドを開始するには以下のコマンドを実行します。

make

このコマンドを実行したら、映画でも見るか、居眠りでもしていてください。完全にビルドするには通常のデスクトップ・マシンで数時間かかります。すべてが適切にビルドされると、図 1 のような画面が表示されるはずです。

図 1. Sage のビルドが完了したときの画面
Sage のビルド・プロセスが完了したときの画面のスクリーン・キャプチャー

仮想マシンにインストールする

それほど冒険を好まず、Sage を少し使ってみたいだけの場合には、仮想マシンにインストールするのが適切です。OVA (Open Virtualization Archive) パッケージは Sage のサイトから、Fedora 16 用および Ubuntu 10.04.3 用のバイナリー・パッケージとともにダウンロードすることができます。OVA は、OVF (Open Virtualization Format) で仮想マシンを起動するために必要なファイルがすべて含まれた 1 つのパッケージ・ファイル (要するに tar ファイル) です。


Sage を使用する

Sage のインストールが完了すると、数学的な発見と探求の旅を開始することができます。Sage にはコマンドライン・インターフェースと Web ベースのインターフェースの両方があります。

コマンドライン・インターフェース

Sage をビルドしたディレクトリーからコマンドラインで Sage を起動するには、単純に以下のコマンドを入力します。

./sage

図 2 に、Sage インタープリターと先ほど触れた数学的な解釈の例を示します。

図 2. Sage のコマンドライン・インターフェースと数学的な解釈
Sage のコマンドライン・インターフェースと数学的な解釈の例を示す画面のスクリーン・キャプチャー

整数の割り算の結果が異なる理由は、Python が演算の結果をどのような型 (整数型、浮動小数点数型など) として扱っているかに関係しています。Python では、2/3 という式には整数型の結果が割り当てられるため、切り捨てられてゼロになります。Sage では除算演算子を有理数のコンストラクターとして扱います。つまり紙の上で行う場合とほとんど同じように分数の演算を行うことができます。例えば Sage プロンプトで「2/3 + 2/3」と入力すると、結果は 4/3 になります。Python で同じように入力すると、結果は 0 になります。図 2 のように float()int() を使用すると、リテラルの型を暗黙的に強制することができます。

Web ベースのインターフェース

Sage Notebook を使用するためには、Sage を起動してから「notebook()」と入力するか、あるいは以下のコマンドを使用します。

./sage --notebook

このコマンドによって Sage サーバーが起動し、デフォルトの Web ブラウザーで Sage Notebook のホームページが開きます。Sage Notebook には、ワークシートをファイルに保存したり、ワークシートをロードしたりする機能や、通常のコピー、削除、リネームなど、操作を容易に行うための機能が数多くあります。また、共同作業を容易に行えるようにする Share 機能と Publish 機能も用意されています (図 3)。

図 3. Sage Notebook の機能
Sage Notebook を使用して、単純なテスト、等式計算、グラフ描画を行った画面のスクリーン・キャプチャー

コンピューター代数パッケージ

Sage の基本ディストリビューションには、GAP、Maxima、PARI、Singular をはじめとするいくつものコンピューター代数パッケージが含まれています。各パッケージは数学コミュニティーに独自の支持者を持ち、それぞれ少しずつ異なる機能を提供します。ここで重要なことは、Sage の基本ディストリビューションにはこれらの各パッケージが含まれており、別途ダウンロードしてインストールする必要がないという点です。

図 4 に Maxima を使用していくつかの行列演算を実行する例を示します。これは Sage Notebook を使用して実行したもので、ユーザー入力が黒で、出力が青で表示されています。最初の 2 行は i/j という要素を持つ行列を作成します (i と j の範囲は 1 から 4 です)。これらの数値が有理数 (分数) であることに注意してください。

図 4. Maxima を使用した行列演算
Maxima が行列演算をどう解釈するかの例を示すスクリーン・キャプチャーで、数式の後に結果が表示されています。

科学論文を発表する

教育界の多くの人々は科学論文を発表する必要があります。Sage では、すべてのオブジェクトを LaTeX で表現できる必要があります。これには、TeX 言語を使用して論文の発表に耐える品質のグラフィックスとテキストを作成する必要があることが直接関係しています。Sage の機能をフルに活用するためには TeX をフルインストールする必要があることに注意してください。


EPD をインストールする

Enthought という会社の目的は、Python を使用して科学計算を行うことです。Enthought は商用の製品とそのサポートを収入源としていますが、同時に彼らはオープンソース・コミュニティーに多大な貢献を行っています。Enthought による貢献は、NumPy と SciPy のコード・ベースに関する直接的な作業という形や、年次で開催される PyCon カンファレンスでの発表や SciPy カンファレンスの主催という形で行われています。

Ubuntu のソフトウェア・マネージャーを使用すると、IPython、NumPy、SciPy とともに EPD を実行するのに必要なさまざまなモジュールをインストールすることができます。あるいは、単純に EPD Free という無料版の EPD をダウンロードしてインストールすることもできます。Enthought は、Red Hat、Ubuntu、openSUSE でテストされた 32 ビット版と 64 ビット版両方の EPD Free を提供しています。ただし Enthought は、一部の 64 ビット Linux システムには 32 ビット・ライブラリーが含まれていないため、64 ビット版のパッケージが必要であることについて注意を促しています。

EPD Free をインストールするには、まずインストーラー・スクリプトをダウンロードし、続いて以下のコマンドでそのスクリプトを実行します。

bash epd_free-7-2-2-rh5-x86.sh

今後 EPD を容易に起動できるようにするには、シェル起動ファイル (.cshrc または .bash_profile) に何行かを追加する必要があります。Ubuntu はデフォルトで bash シェルを使用するので、ここでは bash シェルを使用することを前提としたコードを紹介します。この記事では以下の行を使用しました。

export PATH=/home/paul/Downloads/epd_free-7.2-2-rh5-x86_64/bin:$PATH

EPD を使用する

IPython も EPD と Sage に共通するモジュールであり、主要なユーザー・インターフェース・ツールです。Sage の場合と同じように、EPD はコマンドライン・インターフェースと Web ベースの Notebook の両方をインストールします。

コマンドライン・インターフェース

Qt ベースのコンソールには、Pygments ライブラリーを使用したフル機能の構文強調など、いくつかの強化された機能が用意されています。また Qt コンソールにはインラインでプロットする機能もあります。この機能を利用するには、以下のコマンドで IPython を起動します。

ipython --pylab

図 5 は Qt コンソールにプロットが表示されている様子を示しています。

図 5. 新しい PyDev プロジェクトを作成する
新しいプロジェクトを作成するための PyDev インターフェースのスクリーン・キャプチャーが表示されており、画面の下にグラフが描画されています。

Web ベースのインターフェース

IPython の最新リリース (0.12) には、Sage と同様の Web ベースの Notebook 機能が含まれています。Notebook 機能を利用するためには、ZeroMQ や Tornado Web サーバーなど、いくつかの依存関係をインストールする必要があります。コマンドラインから Notebook を起動するには、ターミナル・ウィンドウで以下のコマンドを入力します。

ipython notebook

このコマンドにより、Tornado Web エンジンが起動され、それに続いてデフォルトの Web ブラウザーが起動されてダッシュボード・ページが表示されます。ダッシュボード・ページでデフォルトの Notebook を選択すると、図 6 のような新しいウィンドウが表示されるはずです。

図 6. IPython Notebook
IPython Notebook に実装した図 5 のプロジェクトのスクリーン・キャプチャー

Web ベースの Notebook が Qt ベースのコンソールと異なる 1 つの点は、コードを実行するには Control-Enter を使用する必要があることです。この機能により、図 6 のように複数行のコードを入力することができ、入力ボックスに入力されたすべてのコードをシーケンシャルに実行することができます。つまり、さまざまな機能を、管理可能なブロックに容易に分割することができます。

Markdown 構文を使用すると Notebook に注釈を追加することができます。Markdown を理解していない人のために説明すると、Markdown は基本的に、フォーマット設定された HTML (Hypertext Markup Language) をプレーン・テキストで作成するための手段です。例えば、1 つのシャープ記号 (#) の後に 1 つの空白を続けることによって HTML の H1 を示し、2 つのシャープ記号を使用して H2 を示す、というようにします。この方式により、コードやグラフィックスを補完する注釈やドキュメントを追加することができます。

pandas

pandas (Python Data Analysis Library) も SciPy と NumPy に関連するツールであり、データ分析タスクを扱うため専用に作成されたものです。pandas には大量のライブラリーといくつかの標準データ・モデルが含まれており、大規模なデータセットを効率的に操作するために必要なツールを提供します。CSV (Comma-Separated Values) ファイルは関係者にデータを配布するための最も一般的な手段の 1つです。pandas は、(CSV や効率的な HDF5 フォーマットなど) 多様なファイル・フォーマットの読み書きに最適化されたライブラリー関数を提供します。

read_csv モジュールは、最初の行にヘッダー情報がある典型的な CSV ファイルを構文解析することができます。また、日付や時刻を含むファイルを組み込みのパーサーを使用して処理することもできます。pandas には、日付に関する多種多様な数学処理を行うための操作ルーチンを大量に含む datetools モジュールがあります。リスト 1 は、ある日付から 4 ヶ月と 5 日後の日付を得る方法を示すコード・スニペットを pandas のドキュメントから引用したものです。

リスト 1. pandas の日付計算サンプル
d = datetime(2012, 4, 20)
d + pandas.DateOffset(months=4, days=5)
datetime.datetime(2012, 8, 25, 0, 0)

pandas の真の実力が発揮されるのは、大規模なデータセットを多様な方法で処理する場合です。ネイティブのデータ構造にデータをインポートした後、多種多様なツールを自由自在に使用して、文字どおりあらゆる種類の操作を実行することができます。Python の標準的なスライス構文を使用してデータを分割したり、全データまたはデータの一部に対して演算を実行したり、あるいは matplotlib を使用してデータをプロットしたりすることもできます。どのような操作であれ、データを操作する必要がある場合には、ぜひとも早急に pandas を使いこなせるようになってください。


まとめ

Linux が、ほぼどんな科学計算にも対応できる極めて高い能力を有していることは間違いありません。Linux は学術界で強く支持されており、またソフトウェア予算の削減手段を求める新しい産業ユーザーを急速に獲得しつつあります。この記事で紹介したツールは商用製品の代替として十分であり、何よりも良いことにどれも無料です。フルサポートのソフトウェアを求める顧客の場合には Enthought があり、Enthought が商用で提供する EPD があります。Enthought は商用製品を購入したすべての顧客に対し、完全なカスタマー・サポートとトレーニングを提供しています。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=834235
ArticleTitle=科学計算プラットフォームとしての Linux を探る
publish-date=09132012