Amazon Web Services ブログ
AWS Batch および Amazon SageMaker を使用してオンラインの化合物溶解度予測ワークフローを構築する
計算化学の分野の Machine Learning (ML) メソッドは、急速に成長しています。アクセスが容易なオープンソルバー (TensorFlow と Apache MXNet など)、ツールキット (RDKit 化学情報ソフトウェアなど)、オープン科学イニシアチブ (DeepChem など) は、毎日の研究でこれらのフレームワークを容易に使用できるようにします。科学情報分野では、多くのアンサンブル計算化学ワークフローが多数の化合物を消費し、さまざまな記述子特性をプロファイリングする能力を必要とします。
このブログ投稿では、2 段階ワークフローについて説明します。最初のステージでは、約 1100 の候補の分子を採取し、AWS Batch を使用して、Dockerized RDKit を使用した 2D 分子記述子を計算します。 MoleculeNet.ai – ESOLV からの元のデータセットには、各化合物の測定済みの logSolubility (mol/L) が含まれます。第 2 ステージでは、Amazon SageMaker を Apache MXNet で使用して、線形回帰予測モデルを作成します。ML モデルはトレーニングと検証の 70/30 分割を実行し、30 エポック後の RMSE = 0.925 で、適合度 (Rˆ2) は 0.9 になります。
このブログ投稿では、単純化された分子入力ライン入力システム (SMILES) の入力を処理するワークフローを作成し、その後、Amazon SageMaker に送出して、logSolubility を予測するモデルを作成します。
概要
Amazon S3 バケットで、SMILES 構造を保管することから開始します。次に、Amazon Elastic Container Repository (Amazon ECR) イメージを Python ベースの実行スクリプトで構築し、ライブラリをイメージにサポートして、AWS Batch で実行します。計算の出力は、別の S3 バケットに保管され、それが Amazon SageMaker に入力されます。
前提条件
このブログ投稿の手順に従うには、AWS アカウントが必要です。ローカルコンピュータで Docker イメージを作成し、Docker をインストールして、設定します。AWS コマンドラインインターフェース (AWS CLI) をインストールすることも必要です。
ステージ 1: AWS Batch の使用
AWS Batch は Amazon ECR に保管されたコンテナ化されたアプリケーションから実行されているジョブのマネージド型サービスです。ワークフローを実行するために必要なツールをインストールするための基本オペレーティングシステム (OS) を含む「amazonlinux:latest」イメージは、パブリック Docker 登録から取得されました。Docker をインストールした後で、コマンドラインシェルを開き、次のコマンドを実行してください。
イメージレイヤーを取得した後で、対話形式のセッションが開始して、AWS Batch での記述子計算のためにイメージを準備します。AWS CLI、RDKit、Boto3 フレームワークパッケージをイメージにインストールします。実行中の Docker コンテナでは、次のコマンドを実行します。
RDKit をインストールするには、まず repo を有効化します。コードについては、EPEL 6 リポジトリを参照してください。
repo を有効にした後で、次のコマンドを実行することによりそれをインストールします。
次の Python コードをイメージに追加し、それを /data/mp_calculate_descriptors.py として保存します。
このコードは、記述子を計算するためのメインエンジンです。このスクリプトは、S3 バケットから入力 SMILES ファイルを読み取り、一連の記述子を計算し、別の S3 バケットに結果を保管します。
Amazon S3 コンソールを開き、 rdkit-input-<initials>
と rdkit-processed-<initials>
と呼ばれるバケットを AWS アカウントにアクセスを制限して作成します。
次に、AWS アカウントで Amazon ECR 登録に Docker イメージをコミットします。Amazon ECS コンソールを開き、左パネルの [Repositories (リポジトリ)] を選択し、[Create repository (リポジトリの作成)] を選択することで新しい登録を作成します。次のようなエンドポイントが得られます。
エンドポイントを AWS Batch にアクセス可能にするには、Docker イメージをエンドポイントにプッシュします。
AWS Batch は、ジョブ定義を使用して設定することが必要で、その後、コンピューティング環境で実行されるジョブキューに送信されます。JSON ジョブ定義は、RDKit ジョブの入力パラメーターを指定します。以下は、このワークフローの例です。
ジョブ定義で、OUTPUT_SMILES_S3 と INPUT_SMILES_S3 環境変数を定義します。これは、Amazon S3 にアップロードされる SMILES ファイルへのパスです。この変数は、コンテナの Python スクリプトに渡されます。正しいアクセス権限があることを確認するために、Amazon S3 への読み書きアクセスをもつ jobRole (IAM コンソールで設定) を定義してください。 Python スクリプトは、本来、並列化されているため、インスタンスが大きいほど、SMILES ファイルを処理するのにより大きなレベルの並列化が行われます。下表は EC2 インスタンスの c4 と m4 ファミリを使用するデータセットをプロファイリングします。
AWS Batch ジョブを実行します。Rdkit-processed バケットで、以下に類似するファイル (*_smiles_result.csv) が表示されます。
元の入力ファイルには、測定済みの logSolubility (mol/L) の列が含まれます。SMILES をプライマリキーとして使用する Amazon SageMaker ステージを準備するために、この列を結果ファイルにアペンドします。これは、S3 から csv をダウンロードし、測定済みの logSolubility 値をアペンドした後で、再びそれをアップロードすることによって行うことができます。
第 2 ステージ: Amazon SageMaker の使用
Amazon SageMaker コンソールで、[Dashboard (ダッシュボード)] の下で、[Create notebook Instance (ノートブックインスタンスの作成)] を選択し、以下のスクリーンショットに示されたとおり、インターフェイスの詳細を入力します。コンソールを初めて使用する場合、Amazon SageMaker は Amazon S3 にアクセスするために必要な IAM ロールを作成するように求めます。VPC とサブネット設定を設定することはオプションです。
これらのタスクを完了した後で、[Create notebook instance (ノートブックインスタンスの作成)] を選択すると、数分後にインスタンスが作成されます。インスタンスが開始した後で、[Open (開く)] を選択すると、インスタンスと Jupyter ノートブックインターフェイスにリダイレクトされます。
conda_mxnet_p27 環境を使用して、インスタンスで新しい Jupyter ノートブックを作成します。また、TensorFlow のみならず、Python 2 と Python 3 環境を使用する環境も提供します。代わりに、単にここでノートブック全体をダウンロードすることもできます。
候補の化合物のトレーニングのためのノートブックを作成しましょう。まず、溶解度の値を追加した後で、ワークフローの最初の部分から結果ファイルを保管する場所にいくつかの S3 バケット変数を定義する必要があります。
次に、RDKit ライブラリを環境にインポートする必要があります。
いくつかの依存関係がインストールされます。次に、この演習を使用するモジュールをインポートします。
次に、deepchem GitHub からファイルを読み込みます。
では、ファイルから SMILES を読み込み、構造体を解析します。
deepchem set (オプション) で構造体をいくつか視覚化できます。
次のような出力が得られます。
次に、前述の AWS Batch ワークフローから結果をインポートします。
データをシャッフルして 70/30 トレーニングと検証セットに分割し、モデリングの準備をします。出力はトレーニングと検証セットのデータシェイプを印刷します。
では、線形モデリングパラメーターを定義します。これは、双曲線接線活性化を伴う 2D 記述子セットの比較的単純な線形回帰結合一括正規化です。この出力は、神経系の視覚的な表示です。
この時点で、モデルをトレーニングして、テストに対して検証スコアを確認できます。
およそ 1 秒間に 2 万個のサンプルの速度でトレーニングのデバッグログを取得する必要があります。最後に、結果スコアをプロットし、モデルを使用してデータセット全体を予測することができます。
薄紫色のデータポイント (左パネル) は、データセット全体を構成します。緑のサブセットは、独立した検証のために選択された化合物です。評価セットは、90% を超える検証スコアで deepchem セット全体の多様性を適切に表しています。右パネルは、要素ごとの予測誤差分布を表しています。この時点で、構築されたモデルで、エンドポイントを作成して展開することができます。モデルのエンドポイントを展開し、作成する方法の例については、ここを参照してください。
まとめ
このブログ投稿では、Amazon ECS と AWS Batch でコンテナベースの RDKit プラットフォームを作成し、分子記述子計算のための化合物の集合を処理し、Amazon SageMaker を通じて、溶解度を予測するために Apache MXNet ML モデルを開発しました。
さまざまな model.fit() パラメーターを Amazon SageMaker ノートブックで使ってみることをお勧めします。オプティマイザー、学習速度、エポックを変更できます。検証スコアを改善できる場合、ブログのコメント欄にご回答ください。
ご質問があればコメント内に記入してください。
次のステップ
Amazon ML Solutions Lab で Amazon 全体の機械学習の専門家とコネクトしましょう
今回のブログ投稿者について
Amr Ragab は、AWS のハイパフォーマンスコンピューティングプロフェッショナルサービスコンサルタントで、大規模な計算ワークロードを実行する顧客の支援を専門にしています。余暇には旅行が好きで、技術を日常生活に組み込む方法を見つけています。