Amazon Web Services ブログ
Amazon SageMaker で量子系をシミュレートする
Amazon SageMaker は、開発者やデータサイエンティストがあらゆる規模の機械学習モデルを迅速かつ簡単に構築、訓練、およびデプロイすることを可能にする完全マネージド型サービスです。しかし、機械学習 (ML) のワークフローを能率化するだけでなく、Amazon SageMaker は科学技術向けコンピューティングタスクの大規模なスペクトルを実行したり、並列化したりするためのサーバーレスでパワフルな使いやすいコンピューティング環境も提供します。このノートブックでは、TensorFlow と Amazon SageMaker の「bring your own algorithm (BYOA)」 (独自のアルゴリズムを活用する) 機能を併用して、シンプルな量子系をシミュレートする方法についてご紹介します。
この演習を実行するにあたり、Amazon SageMaker にアクセスできる AWS アカウントと Python および TensorFlow に関する基礎知識が必要になります。
量子系の超放射: 簡単な説明
これから私たちがシミュレートする量子効果は超放射として知られています。 これは、ある一定の環境下で、独立した発光体 (個別の原子など) が自然に量子コヒーレンスを増加させ、1 つの実体として協調的に動作するという現象を示します。コヒーレンスが増大したことで、このグループが高輝度のバーストを単発で発します。このバーストは独立した粒子のグループから生じると予想される輝度の N 倍 (!) も強いものである、この場合の N とはグループの粒子の数を示します。興味深いことに、この影響は粒子との相互作用に基づくものではなく、むしろ、粒子の明視野との相互作用と対称的な性質によってのみ生じます。
以下の図では、発光プロファイルが独立型 (上のパネル) と超放射型 (下のパネル) の粒子集団で明確に異なっていることがわかります。超放射は空間的に方向を持った、短時間の高輝度パルスを生じさせます。これは従来の急激に崩壊する放出プロファイルとは異なります。
超放射は多くの様々な量子系で見られ、 提示されてきました。ここでは TensorFlow と Amazon SageMaker を使って、ダイヤモンド窒素-空孔中心の核スピン集団からの超放射をシミュレートする方法を見ていきましょう。
Amazon SageMaker における科学的コンピューティングの構造
Amazon SageMaker の科学的コンピューティングの中心点がこのノートブックインスタンスです。ここから Jupyter Notebook を使用することで、Amazon SageMaker は科学的ワークロードの様々なステップを連携させるのに役立ちます (次の図を参照)。
ワークロードをコンテナ化する
Amazon SageMaker は Amazon Elastic Container Service (ECS) に、コードの Docker イメージとその従属物 (Python パッケージなど) を送信します。AWS マネジメントコンソールで Amazon ECS コンソールへナビゲートすることにより、過去に自分で送信したイメージにアクセスしたり、それらを管理したりすることができます。
コンピューティング環境を定義しスピンアップする
Amazon SageMaker はトレーニングインスタンスをスピンアップし、コンピューティングを作動させるためにこのブログ記事の前半で定義したコンテナを使用します。 様々なワークロード向けに最適化された多彩なインスタンスタイプから選択できます。クラスター内の複数のインスタンスを使用することで、必要であればコンピューティング環境を並列化できます。
ワークロードの入力データとパラメーターを定義する
シミュレーションに必要な全入力データは、Amazon Simple Storage Service (S3) に格納できます。そこから、Amazon SageMaker はクラスターの各インスタンスでアクセスできてる共有ファイルシステムにデータを転送します。代わりに、Amazon SageMaker のパイプモードを使用して、Amazon S3 から直接データをストリームすることもできます。 より大量のデータをフィードするために S3 を使用する以外では、シミュレーションのパラメーターを直接コンテナに渡すことができます。実際の環境でこれがどのように機能するかについては下記で解説します。
コンピューティングの結果を評価する
コンピューティングが完了したら、Amazon SageMaker はユーザーが選択した Amazon S3 のロケーションに結果を書き込みます。データはここから取得するか、ノートブックで分析できます。
次の図では、Amazon SageMaker の典型的な科学的コンピューティングのワークフローを示しています。まず、Amazon SageMaker はコンテナ化したワークロードを AWS のコンテナレジストリに送信します。次に Amazon SageMaker はユーザーの指定した 1 つまたは複数のコンピューティングインスタンスのクラスターをスピンアップし、ワークロードの含まれるコンテナイメージをロードします。その後、入力データとパラメーターが Amazon S3 から、クラスターの全ノードよりアクセス可能な共有ファイルシステムへ転送されます。計算が完了したら、出力結果はノートブックでさらに分析するため取得可能な場所から Amazon S3 バケットに書き込まれます。 すべてのステップは Amazon SageMaker ノートブックインスタンスから連携させることができます。
設定
皆さんの AWS アカウントでこの例を実行するには、環境のセットアップのためにいくつかのステップを実行する必要があります。
ステップ 0: AWS アカウントにログインし、SageMaker ノートブックインスタンスを作成する
プロセスの中で作成する IAM ロールの名前をメモしておいてください。
ステップ 1: アクセス許可のセットアップ
始める前に、Amazon ECS へアクセスするための追加アクセス許可を SageMaker ノートブックインスタンスに付与する必要があります。これらのアクセス許可を追加する最も簡単な方法は、SageMaker ダッシュボードでノートブックインスタンスを開始する際に使用したロールにマネージドポリシーを追加する方法です。そのためには、AWS マネジメントコンソールの IAM コンソールへナビゲートし、ロールセクションにアクセスして、Amazon SageMaker ダッシュボードでノートブックインスタンスの開始に使用した SageMaker IAM ロールを見つけます。
ロールを選択したら、AmazonEC2ContainerRegistryFullAccess ポリシーを接続できます。これを実行する際にノートブックインスタンスを再始動する必要はなく、新しいアクセス権がすぐに使用できるようになります。
ステップ 2: コードリポジトリを SageMaker ノートブックインスタンスにロードする
また、このチュートリアルでこのタスクを実行するには、コードリポジトリを SageMaker ノートブックインスタンスにダウンロードする必要があります。それには Amazon SageMaker でシミュレーションを実行するのに必要な全コンポーネントが含まれ、ユーザー独自のユースケースのテンプレートとして使用できます。
まず、Amazon SageMaker コンソールから SageMaker ノートブックを開きます。
Jupyter ファイルシステムとともに新しいブラウザーのタブが開きます。ターミナルセッションを開くことで、サーバーにログインします。
ターミナルで次のコマンドを使用して、コードリポジトリをダウンロードする
このリポジトリには Amazon SageMaker のサンプルアルゴリズムをパッケージ化するのに必要な全コンポーネントが入ったコンテナディレクトリが含まれています。個々のコンポーネントについて詳しくは、この SageMaker サンプルノートブックで参照できます。私たちの用途では、最も関連のあるファイルが 2 つあり、ワークロードを実行するための情報がすべて含まれています。
- Dockerfile には Docker コンテナイメージの構築方法が示されています。ここでは、使用する言語 (Python)、コードに必要なパッケージ (TensorFlow など)、その他など、自分のコードの従属物を定義できます。そのほとんどは定型文で、ユーザーのユースケースへの変更に必要であるのは通常、数行のみとなります。詳細については、こちらをご覧ください。
- superradiance/train はコンテナがトレーニング用に実行されるときに呼び出されるプログラムです。 このプログラムにはいくつかのパラメーターとシステムの初期状態がパラメーターとして必要になり、システムのシミュレーションを実行し、numpy 配列として発光プロファイルを返します。この時点ではシミュレーションがどのように機能するかについては心配しないでおきましょう。(シミュレーションについて詳しくは、付録で参照できます。)
ステップ 3: Docker イメージを構築し、プッシュする
Dockerfile から Docker イメージを構築して Amazon ECS にプッシュするには、次のユーティリティスクリプトを実行する必要があります: build_and_push.sh。そのためには、リポジトリに含まれる Jupyter ノートブックを開き、セルで次を実行します。
このスクリプトは superradiance ディレクトリのコードを含む Dockerfile から Docker イメージを構築し、次の名前で Amazon ECS リポジトリへとプッシュします: superradiance (引数は build_and_push.sh に渡されます)。 Amazon -ECS レポジトリが存在しない場合は、自動的に作成されます。
これで、Amazon SageMaker でシミュレーションを実行する準備ができました。
Amazon SageMaker での超放射のシミュレーション
このセクションではいわゆるダイヤモンド窒素-空孔中心から超放射をシミュレートしてみましょう。 窒素空孔中心とは、ダイヤモンドを構成する炭素格子の多数ある潜在的結果の 1 つです。この格子には 2 つの炭素原子が欠けており、そこには空の箇所の隣に窒素原子が 1 つあります。赤いダイヤモンドを見たことはありますか? ほとんどの場合、素材の窒素空孔欠陥が大量にあることが原因でダイヤモンドに色がつきます。ダイヤモンドに美しい色をもたらす (ダイヤモンドの価格を驚く程上げる) ほかに、窒素空孔中心は卓越した量子系にもなります。欠陥の生じた箇所ではエレクトロンが極めて安定した状態で閉じ込められるため、研究者はレーザー光やマイクロ波放射によってこれらのエレクトロンを巧みに操作できるのです。同時に、エレクトロンは電磁力を介して周囲の炭素原子に相互作用をもたらします。そのため、炭素原子の励振がエレクトロンを介して移動し、窒素空孔中心からフォトンとして放出されます。適切な条件下では、この発光は超放射の特性を示します。
まずは、一部のモジュールをインポートし、シミュレーションする時間ステップや炭素原子の数など、シミュレーションのパラメーターを定義するところから始めましょう。
8 個の炭素原子と時間ステップ数 500 のシミュレーションを試してみましょう。あとで、これらのパラメーターを次のパラメーター名でプログラムに渡します: hyperparameters。
次に、システムの初期状態を定義します。全炭素原子の時間 t=0 の単純な初期状態からシミュレーションを開始します。また、エレクトロンは電磁的に励起されています。量子力学ではこのような原子とエレクトロンの合成系は、2D 行列、いわゆる密度行列で表示されます。数学の形式主義に深入りしすぎることなく、 物理システムから行列図を引き出すことのできるものによって、幸運なことに、私たちのケースでは、ステートの図は極めて単純です。最初の 3 行でステートを構築したら、Amazon S3 に結果の行列をアップロードします。シミュレーションはこのデータを後で取得し、システムを初期化します。
これでシミュレーションを積み込む準備が整いました。Docker イメージの指定後、シミュレーションに使用されるハードウェアを定義するトレーニングジョブを作成します。Amazon SageMaker はその後、リクエストされたインスタンスをスピンアップし、Amazon ECS から Docker イメージを引き出して、ジョブを開始します。プログラム (ファイル superradiance/train で定義されたとおり) は TensorFlow を使用して一連の段階的な発展によって、システムの変遷のパターンを説明する連結された微分方程式系を解決します。
シミュレーションの結果は、Amazon S3 の次のパスでしてされた場所に、tar.gz ファイルとして出力されます: output_path 引数。さっそく結果を見てみましょう。
以下の図にはシミュレートされた粒子集団 (青) の放出プロファイルが示されています。この放出プロファイルは、従来の集団 (オレンジ) の想定される放出と比較すると、強い輝度のバーストを示しています。
私たちがシミュレーションを行った量子系が、発光プロファイル (青) で特徴的な超放出の兆候を示したことがはっきりと見て取れます。従来の粒子集団 (オレンジ) から想定される放出と比較すると、このプロファイルは超放出を示す短時間後に、強く、独特な爆発的放出を示しています。
まとめ
このブログ記事では、機械学習のワークフローを合理化する手順の他、Amazon SageMaker が一般的な用途や完全なマネージドコンピューティング環境でも利用できることをご覧いただきました。Amazon SageMaker の BYOA 機能を使用して、科学的なワークロードをコンテナ化し、データ入力や出力チャネルの定義、SageMaker クラスターでのワークロードの実行といった様々な方法について学びました。科学的コンピューティングのワークフローでこれらのタスクがすべて 1 つのホストされた Jupyter ノートブックから連携できることをご覧いただきました。
ご不明の点またはご提案があればコメントをお寄せください。
付録: シミュレーションを実行する TensorFlow コード
このブログ記事で実行されたプログラム (superradiance/train) では、シンプルな一連の段階的な発展ごとに、スピンシステムの量子マスター方程式を解くために、TensorFlow を使用しています。主なステップの説明を含むコードを以下に掲載します。
今回のブログ投稿者について
Eric Kessler は AWS プロフェッショナルサービスのデータサイエンティストです。 彼はドイツのマックスプランク量子光学研究所にて博士号を取得し、数年間、量子物理学の学術研究者として働いていました。現在は、AWS の機械学習と AI ソリューションの開発および統合のために、お客様と協業しています。