ゼファーネットのロゴ

MONAI を使用して医療画像 AI 推論パイプラインを構築する AWS にデプロイする | アマゾン ウェブ サービス

日付:

この投稿は、NVIDIA の Ming (Melvin) Qin、David Bericat、Brad Genereaux との共著です。

医療画像 AI の研究者と開発者は、AI アプリケーションを構築、展開、統合するためのスケーラブルなエンタープライズ フレームワークを必要としています。 AWS と NVIDIA は、このビジョンを現実にするために協力しました。 AWS、NVIDIA、その他のパートナー エンタープライズ イメージングのクラウド接続を加速することで、医療をよりアクセスしやすく、手頃な価格で、効率的にするためのアプリケーションとソリューションを構築します。 モナイデプロイ 内の重要なモジュールの XNUMX つです モナイ (人工知能のための医療オープン ネットワーク) NVIDIA を含む学術界および業界リーダーのコンソーシアムによって開発されました。 AWS ヘルスイメージング (AHI) は、HIPAA 適格で、拡張性、パフォーマンス、コスト効率の高い医療画像ストアです。 当社は、クラウドネイティブ API を利用して、医療画像 AI アプリケーションを XNUMX 秒未満の画像取得遅延で大規模に統合するために、AHI への MONAI Deploy コネクタを開発しました。 MONAI AI モデルとアプリケーションは次の場所でホストできます。 アマゾンセージメーカーは、機械学習 (ML) モデルを大規模に展開するためのフルマネージド サービスです。 SageMaker は、推論用のインスタンスのセットアップと管理を処理し、監視およびアラートの受信に使用できるエンドポイントの組み込みメトリクスとログを提供します。 また、さまざまな NVIDIA GPU インスタンス ML 推論のほか、自動スケーリングを備えた複数のモデル展開オプションも利用できます。 リアルタイム推論, サーバーレス推論, 非同期推論, バッチ変換.

この投稿では、リアルタイム推論と非同期推論に SageMaker マルチモデル エンドポイントを使用して、AWS HealthImaging へのコネクタを備えた MONAI アプリケーション パッケージ (MAP) をデプロイする方法を示します。 これら XNUMX つのオプションは、ほぼリアルタイムの医用画像推論パイプラインのユースケースの大部分をカバーします。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

MONAI の AWS へのデプロイ アーキテクチャ図

前提条件

次の前提条件の手順を実行します。

  1. AWS HealthImaging が利用可能な次のいずれかのリージョンで AWS アカウントを使用します: ノースバージニア (us-east-1)、オレゴン州 (us-west-2)、アイルランド (eu-west-1)、シドニー (ap-southeast-2).
  2. 作る Amazon SageMakerスタジオ ドメインとユーザープロファイル   AWS IDおよびアクセス管理 AWS HealthImaging にアクセスするための (IAM) 権限。
  3. JupyterLab v3 拡張機能を有効にする SageMaker ノートブック上でインタラクティブに医療画像を視覚化したい場合は、Imjoy-jupyter-extension をインストールします。 ウィジェット.

AWS HealthImaging への MAP コネクタ

AWS HealthImaging は DICOM P10 ファイルをインポートし、DICOM シリーズの最適化された表現である ImageSet に変換します。 AHI は、ImageSet メタデータおよび ImageFrame への API アクセスを提供します。 メタデータには、JSON ドキュメント内のすべての DICOM 属性が含まれます。 ImageFrame は、 高スループット JPEG2000 (HTJ2K) ロスレス形式であり、非常に高速にデコードできます。 ImageSet は、 AWSコマンドラインインターフェイス (AWS CLI)または AWSSDK.

MONAI は、研究のブレークスルーと AI アプリケーションを臨床に応用する医療画像 AI フレームワークです。 MONAI Deploy は、臨床現場での医療画像 AI アプリケーションのパッケージ化、テスト、展開、実行などのエンドツーエンドのワークフローを可能にする処理パイプラインです。 構成されているのは、 モナイ アプリSDKをデプロイし、 MONAI デプロイ エクスプレス, ワークフローマネージャー, 情報学ゲートウェイ。 MONAI Deploy App SDK は、医療画像 AI アプリケーションの構築を加速するためのすぐに使えるアルゴリズムとフレームワーク、およびアプリケーションを MAP コンテナにパッケージ化するためのユーティリティ ツールを提供します。 アプリ SDK に標準ベースの機能が組み込まれているため、MAP は医療 IT ネットワークにスムーズに統合できます。医療 IT ネットワークには、DICOM、HL7、FHIR などの標準の使用が必要であり、データセンターやクラウド環境全体にまたがります。 MAP では、DICOM 画像の読み込み、シリーズ選択、モデル推論、後処理に事前定義された演算子とカスタマイズされた演算子の両方を使用できます。

私たちは Pythonモジュール AWS HealthImaging Python SDK Boto3 を使用します。 次のように pip インストールし、ヘルパー関数を使用して DICOM サービス オブジェクト ペア (SOP) インスタンスを取得できます。

!pip install -q AHItoDICOMInterface
from AHItoDICOMInterface.AHItoDICOM import AHItoDICOM
helper = AHItoDICOM()
instances = helper.DICOMizeImageSet(datastore_id=datastoreId , image_set_id=next(iter(imageSetIds)))

出力された SOP インスタンスは、以下のインタラクティブ 3D 医用画像ビューア itkwidgets を使用して視覚化できます。 ノートを選択します。 アヒトディコム クラスは複数のプロセスを利用して AWS HealthImaging からピクセル フレームを並行して取得します。 デコード   HTJ2K バイナリ BLOB Python OpenJPEG ライブラリ。 ImageSetIds は、特定の AWS HealthImaging インポート ジョブの出力ファイルから取得されます。 DatastoreId とインポート JobId を指定すると、次のように、DICOM シリーズ インスタンス UID に相当する ImageSetId を取得できます。

imageSetIds = {}
try: response = s3.head_object(Bucket=OutputBucketName, Key=f"output/{res_createstore['datastoreId']}-DicomImport-{res_startimportjob['jobId']}/job-output-manifest.json") if response['ResponseMetadata']['HTTPStatusCode'] == 200: data = s3.get_object(Bucket=OutputBucketName, Key=f"output/{res_createstore['datastoreId']}-DicomImport-{res_startimportjob['jobId']}/SUCCESS/success.ndjson") contents = data['Body'].read().decode("utf-8") for l in contents.splitlines(): isid = json.loads(l)['importResponse']['imageSetId'] if isid in imageSetIds: imageSetIds[isid]+=1 else: imageSetIds[isid]=1
except ClientError: pass

ImageSetId を使用すると、ネイティブ AWS HealthImaging API 関数を使用して、DICOM ヘッダーのメタデータと画像ピクセルを個別に取得できます。 の DICOMエクスポーター集約 DICOM ヘッダーと画像ピクセルを ピディコム データセット。 MAP DICOM データローダーオペレーター。 DICOMizeImageSet() 関数を使用して、MAP に基づいて AWS HealthImaging から画像データをロードするコネクタを作成しました。 DICOMデータローダーオペレーター:

class AHIDataLoaderOperator(Operator): def __init__(self, ahi_client, must_load: bool = True, *args, **kwargs): self.ahi_client = ahi_client … def _load_data(self, input_obj: string): study_dict = {} series_dict = {} sop_instances = self.ahi_client.DICOMizeImageSet(input_obj['datastoreId'], input_obj['imageSetId'])

上記のコードでは、 ahi_client これは、AHItoDICOM DICOM エクスポータ クラスのインスタンスであり、データ取得関数が示されています。 この新しいデータ ローダー オペレーターを MONAI Deploy App SDK によって作成された 3D 脾臓セグメンテーション AI アプリケーション。 まず、このアプリケーションを作成して実行する方法を検討してください。 ローカルのノートブック インスタンス上でを作成し、この MAP アプリケーションを SageMaker 管理の推論エンドポイントにデプロイします。

SageMaker 非同期推論

SageMaker 非同期推論 エンドポイントは、大きなペイロード サイズ (最大 1 GB)、長い処理時間 (最大 15 分)、およびほぼリアルタイムの遅延要件を持つリクエストに使用されます。 処理するリクエストがない場合、このデプロイメント オプションはインスタンス数をゼロにダウンスケールしてコストを節約できます。これは医療画像の ML 推論ワークロードに最適です。 の手順に従います。 サンプルノート SageMaker 非同期推論エンドポイントを作成して呼び出します。 に 非同期推論エンドポイントを作成する、最初に SageMaker モデルとエンドポイント構成を作成する必要があります。 SageMaker モデルを作成するには、model.tar.gz パッケージをロードする必要があります。 定義されたディレクトリ構造 Dockerコンテナに入れます。 model.tar.gz パッケージには、事前トレーニングされた脾臓セグメンテーションの model.ts ファイルとカスタマイズされた inference.py ファイルが含まれています。 モデルをロードして予測を実行するために、Python 3.8 および PyTorch 1.12.1 フレームワーク バージョンで事前に構築されたコンテナーを使用しました。

カスタマイズされた中で、 inference.py ファイルでは、AHItoDICOMInterface から AHItoDICOM ヘルパー クラスをインスタンス化し、それを使用して MAP インスタンスを作成します。 model_fn() 関数を使用し、すべての推論リクエストで MAP アプリケーションを実行します。 predict_fn() 関数:

from app import AISpleenSegApp
from AHItoDICOMInterface.AHItoDICOM import AHItoDICOM
helper = AHItoDICOM()
def model_fn(model_dir, context): … monai_app_instance = AISpleenSegApp(helper, do_run=False,path="/home/model-server") def predict_fn(input_data, model): with open('/home/model-server/inputImageSets.json', 'w') as f: f.write(json.dumps(input_data)) output_folder = "/home/model-server/output" if not os.path.exists(output_folder): os.makedirs(output_folder) model.run(input='/home/model-server/inputImageSets.json', output=output_folder, workdir='/home/model-server', model='/opt/ml/model/model.ts')

非同期エンドポイントを呼び出す、リクエスト入力ペイロードをアップロードする必要があります。 Amazon シンプル ストレージ サービス (Amazon S3)。これは、推論を実行する AWS HealthImaging データストア ID と ImageSet ID を指定する JSON ファイルです。

sess = sagemaker.Session()
InputLocation = sess.upload_data('inputImageSets.json', bucket=sess.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "application/json"})
response = runtime_sm_client.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=InputLocation, ContentType="application/json", Accept="application/json")
output_location = response["OutputLocation"]

出力は Amazon S3 にもあります。

SageMaker マルチモデルのリアルタイム推論

セージメーカー リアルタイム推論 エンドポイントはインタラクティブで低遅延の要件を満たします。 このオプションでは、XNUMX つのエンドポイントの背後にある XNUMX つのコンテナーで複数のモデルをホストできます。これは、複数の ML モデルをデプロイするためのスケーラブルでコスト効率の高いソリューションです。 あ SageMaker マルチモデル エンドポイントは NVIDIA Triton Inference Server を使用します GPU を使用して複数の深層学習モデルの推論を実行します。

このセクションでは、マルチモデル エンドポイントを作成して呼び出す方法について説明します。 独自の推論コンテナを適応させる 以下では サンプルノート。 同じリソース群の共有コンテナーで異なるモデルを提供できます。 マルチモデル エンドポイントは、展開のオーバーヘッドを削減し、エンドポイントへのトラフィック パターンに基づいてモデル推論をスケールします。 私たちが使用した AWS開発者ツール 配合工業用化学製品の Amazon コードコミット, アマゾンコードビルド, Amazon コードパイプライン 構築する カスタマイズされたコンテナ SageMaker モデル推論用。 私たちが用意したのは、 モデルハンドラー.py 前の例の inference.py ファイルの代わりに独自のコンテナーを使用し、initialize()、preprocess()、および inference() 関数を実装しました。

from app import AISpleenSegApp
from AHItoDICOMInterface.AHItoDICOM import AHItoDICOM
class ModelHandler(object): def __init__(self): self.initialized = False self.shapes = None def initialize(self, context): self.initialized = True properties = context.system_properties model_dir = properties.get("model_dir") gpu_id = properties.get("gpu_id") helper = AHItoDICOM() self.monai_app_instance = AISpleenSegApp(helper, do_run=False, path="/home/model-server/") def preprocess(self, request): inputStr = request[0].get("body").decode('UTF8') datastoreId = json.loads(inputStr)['inputs'][0]['datastoreId'] imageSetId = json.loads(inputStr)['inputs'][0]['imageSetId'] with open('/tmp/inputImageSets.json', 'w') as f: f.write(json.dumps({"datastoreId": datastoreId, "imageSetId": imageSetId})) return '/tmp/inputImageSets.json' def inference(self, model_input): self.monai_app_instance.run(input=model_input, output="/home/model-server/output/", workdir="/home/model-server/", model=os.environ["model_dir"]+"/model.ts")

コンテナーが構築され、プッシュされた後、 Amazon エラスティック コンテナ レジストリ (Amazon ECR) を使用して SageMaker モデルを作成し、さらに特定の Amazon S3 パスにさまざまなモデル パッケージ (tar.gz ファイル) を作成できます。

model_name = "DEMO-MONAIDeployModel" + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
model_url = "s3://{}/{}/".format(bucket, prefix)
container = "{}.dkr.ecr.{}.amazonaws.com/{}:dev".format( account_id, region, prefix )
container = {"Image": container, "ModelDataUrl": model_url, "Mode": "MultiModel"}
create_model_response = sm_client.create_model(ModelName=model_name, ExecutionRoleArn=role, PrimaryContainer=container)

注目すべきは、 model_url ここでは、tar.gz ファイルのフォルダーへのパスのみを指定し、次のコードに示すように、エンドポイントを呼び出すときに推論に使用するモデル パッケージを指定します。

Payload = {"inputs": [ {"datastoreId": datastoreId, "imageSetId": next(iter(imageSetIds))} ]}
response = runtime_sm_client.invoke_endpoint(EndpointName=endpoint_name, ContentType="application/json", Accept="application/json", TargetModel="model.tar.gz", Body=json.dumps(Payload))

エンドポイントを更新したり、新しいエンドポイントを作成したりすることなく、既存のマルチモデル推論エンドポイントにモデルを追加できます。

クリーンアップ

を完了することを忘れないでください ホスティングリソースを削除する のステップに入る ラボ-3 & ラボ-4 ノートブックを使用して SageMaker 推論エンドポイントを削除します。 コストを節約するためにも、SageMaker ノートブック インスタンスを拒否する必要があります。 最後に、AWS HealthImaging API 関数を呼び出すか、AWS HealthImaging コンソールを使用して、前に作成したイメージ セットとデータ ストアを削除できます。

for s in imageSetIds.keys(): medicalimaging.deleteImageSet(datastoreId, s)
medicalimaging.deleteDatastore(datastoreId)

まとめ

この投稿では、クラウドネイティブ DICOM ストアから医療画像 AI ワークロードへの画像データの取得を統合して高速化するために、MONAI Deploy App SDK で構築されたアプリケーションで再利用可能な AWS HealthImaging への MAP コネクタを作成する方法を説明しました。 。 MONAI Deploy SDK は、病院の運営をサポートするために使用できます。 また、MAP AI アプリケーションを SageMaker に大規模に展開するための XNUMX つのホスティング オプションも実証しました。

のノートブックの例を確認してください。 GitHubリポジトリ AWS HealthImaging に保存されている医療画像を使用して MONAI アプリケーションを SageMaker にデプロイする方法について詳しくは、こちらをご覧ください。 AWS で何ができるかについては、担当者にお問い合わせください。 AWS 代表.

追加のリソースについては、以下を参照してください。


著者について

チン・ミン(メルビン) NVIDIA のヘルスケア チームの独立貢献者であり、医療画像ワークフローに AI を導入するための AI 推論アプリケーション フレームワークとプラットフォームの開発に注力しています。 2018 年に Clara の創設メンバーとして NVIDIA に入社する前、Ming は、Stentor Inc. の主任エンジニア/アーキテクトとして放射線科 PACS とワークフロー SaaS の開発に 15 年間を費やしました。Stentor Inc. は後にフィリップス ヘルスケアに買収され、エンタープライズ イメージングを設立しました。

デビッド・ベリカット NVIDIA のヘルスケア部門のプロダクト マネージャーであり、AI を研究から臨床導入まで実現する Project MONAI Deploy ワーキング グループを率いています。 彼の情熱は、医療イノベーションを世界的に加速して真の臨床効果につなげることです。 以前は、David は Red Hat で働き、AI、クラウド、エッジ コンピューティング、IoT の交差点でオープンソースの原則を実装していました。 彼の最も誇りに思う瞬間には、エベレストのベースキャンプへのハイキングと、20 年以上サッカーをプレーしたことが含まれます。

ブラッド・ジェネロー NVIDIA のヘルスケア アライアンスのグローバル リードであり、人工知能と深層学習、可視化、仮想化、および分析ソリューションを加速する医療画像処理に重点を置いた開発者対応を担当しています。 ブラッドは、ヘルスケア IT 分野で 20 年以上の経験を持ち、シームレスなヘルスケアおよび医療画像ワークフローの日常臨床への普及と統合を推進しています。

ギャングフー AWS のヘルスケア ソリューション アーキテクトです。 彼はミシシッピ大学で薬学の博士号を取得しており、テクノロジーと生物医学の研究で 10 年以上の経験があります。 彼はテクノロジーとそれが医療に与える影響に情熱を持っています。

JPレジェ は、AW​​S で学術医療センターと医療画像ワークフローをサポートするシニア ソリューション アーキテクトです。 ソフトウェア エンジニアリング、ヘルスケア IT、医療画像処理の分野で 20 年以上の専門知識を持ち、オンプレミス、クラウド、および分析と AI とのハイブリッドで大量のデータを分散展開する際のパフォーマンス、スケーラビリティ、セキュリティのためのシステム設計に豊富な経験を持っています。 。

クリス・ヘイフェイ アマゾン ウェブ サービスのプリンシパル ソリューション アーキテクトです。 彼は医療画像業界で 25 年以上の経験があり、スケーラブルな高性能システムの構築を専門としています。 彼は、人気のあるオープン ソース ゼロ フットプリント ビューアの OHIF を強化する、人気のある CornerstoneJS オープン ソース プロジェクトの作成者です。 彼は DICOMweb 仕様に貢献し、Web ベースの表示のパフォーマンス向上に向けて取り組み続けています。

スポット画像

最新のインテリジェンス

スポット画像