제퍼넷 로고

AWS에서 MONAI Deploy를 사용하여 의료 영상 AI 추론 파이프라인 구축 | 아마존 웹 서비스

시간

이 게시물은 NVIDIA의 Ming (Melvin) Qin, David Bericat 및 Brad Genereaux와 공동 작성되었습니다.

의료 영상 AI 연구원과 개발자는 AI 애플리케이션을 구축, 배포, 통합하기 위해 확장 가능한 엔터프라이즈 프레임워크가 필요합니다. AWS와 NVIDIA는 이 비전을 현실로 만들기 위해 협력했습니다. AWS, NVIDIA 및 기타 파트너 엔터프라이즈 이미징의 클라우드 연결을 가속화하여 의료 서비스에 대한 접근성을 높이고, 저렴하고, 효율적으로 만드는 애플리케이션과 솔루션을 구축합니다. MONAI 배포 의 핵심 모듈 중 하나입니다. 모나이 (인공지능을 위한 의료 개방형 네트워크)는 NVIDIA를 포함한 학계 및 업계 리더들로 구성된 컨소시엄이 개발했습니다. AWS 상태 이미징 (AHI)는 HIPAA 적격하고 확장성이 뛰어나며 성능이 뛰어나고 비용 효율적인 의료 이미지 저장소입니다. 우리는 클라우드 네이티브 API를 통해 대규모로 XNUMX초 미만의 이미지 검색 대기 시간을 갖춘 의료 영상 AI 애플리케이션을 통합하기 위해 AHI에 대한 MONAI Deploy 커넥터를 개발했습니다. MONAI AI 모델과 애플리케이션은 다음에서 호스팅될 수 있습니다. 아마존 세이지 메이커는 기계 학습(ML) 모델을 대규모로 배포하기 위한 완전 관리형 서비스입니다. SageMaker는 추론을 위한 인스턴스 설정 및 관리를 담당하고 경고를 모니터링하고 수신하는 데 사용할 수 있는 엔드포인트에 대한 내장 측정치 및 로그를 제공합니다. 또한 다양한 서비스를 제공합니다. NVIDIA GPU 인스턴스 ML 추론을 위한 것뿐만 아니라 다음을 포함한 자동 확장 기능을 갖춘 여러 모델 배포 옵션도 있습니다. 실시간 추론, 서버리스 추론, 비동기 추론일괄 변환.

이 게시물에서는 실시간 추론 및 비동기 추론을 위해 SageMaker 다중 모델 엔드포인트를 사용하여 AWS HealthImaging에 커넥터가 포함된 MONAI 애플리케이션 패키지(MAP)를 배포하는 방법을 보여줍니다. 이 두 가지 옵션은 거의 실시간에 가까운 의료 영상 추론 파이프라인 사용 사례의 대부분을 다룹니다.

솔루션 개요

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

AWS 아키텍처 다이어그램에 MONAI 배포

사전 조건

다음 전제조건 단계를 완료하십시오.

  1. AWS HealthImaging을 사용할 수 있는 다음 리전 중 하나에서 AWS 계정을 사용하십시오. 노스 버지니아(us-east-1), 오레곤(us-west-2), 아일랜드(eu-west-1) 및 시드니(ap-southeast-2).
  2. 를 생성 아마존 세이지 메이커 스튜디오 도메인 및 사용자 프로필AWS 자격 증명 및 액세스 관리 (IAM) AWS HealthImaging에 액세스할 수 있는 권한입니다.
  3. JupyterLab v3 확장을 활성화합니다. SageMaker 노트북에서 의료 이미지를 대화형으로 시각화하려면 Imjoy-jupyter-extension을 설치하세요. itkwidgets.

AWS HealthImaging에 대한 MAP 커넥터

AWS HealthImaging은 DICOM P10 파일을 가져와 DICOM 시리즈의 최적화된 표현인 ImageSet으로 변환합니다. AHI는 ImageSet 메타데이터 및 ImageFrame에 대한 API 액세스를 제공합니다. 메타데이터에는 JSON 문서의 모든 DICOM 속성이 포함됩니다. ImageFrame은 다음과 같이 인코딩되어 반환됩니다. 처리량이 높은 JPEG2000(HTJ2K) 매우 빠르게 디코딩할 수 있는 무손실 형식입니다. ImageSet은 다음을 사용하여 검색할 수 있습니다. AWS 명령 줄 인터페이스 (AWS CLI) 또는 AWS SDK.

MONAI는 연구 혁신과 AI 애플리케이션을 임상적 영향으로 활용하는 의료 영상 AI 프레임워크입니다. MONAI Deploy는 임상 생산에서 의료 영상 AI 애플리케이션의 패키징, 테스트, 배포 및 실행을 포함한 엔드투엔드 워크플로우를 지원하는 처리 파이프라인입니다. 그것은 다음을 포함한다: 모나이 앱 SDK 배포, MONAI 배포 익스프레스, 워크플로우 관리자정보학 게이트웨이. MONAI Deploy App SDK는 즉시 사용 가능한 알고리즘과 의료 영상 AI 애플리케이션 구축을 가속화하는 프레임워크는 물론 애플리케이션을 MAP 컨테이너에 패키징하는 유틸리티 도구도 제공합니다. 앱 SDK에 내장된 표준 기반 기능을 통해 MAP는 DICOM, HL7, FHIR과 같은 표준을 사용해야 하는 의료 IT 네트워크와 데이터 센터 및 클라우드 환경 전체에 원활하게 통합될 수 있습니다. MAP는 DICOM 이미지 로딩, 시리즈 선택, 모델 추론 및 후처리를 위해 사전 정의된 연산자와 사용자 정의된 연산자를 모두 사용할 수 있습니다.

우리는 파이썬 모듈 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를 사용하여 시각화할 수 있습니다. 수첩. 그만큼 AHItoDICOM 클래스는 여러 프로세스를 활용하여 AWS HealthImaging에서 픽셀 프레임을 병렬로 검색합니다. 풀다 전에, HTJ2K 바이너리 블롭 를 사용하여 Python OpenJPEG 라이브러리. ImageSetIds는 특정 AWS HealthImaging 가져오기 작업의 출력 파일에서 가져옵니다. DatastoreId 및 import 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 비동기 추론 엔드포인트는 큰 페이로드 크기(최대 1GB), 긴 처리 시간(최대 15분) 및 실시간에 가까운 대기 시간 요구 사항이 있는 요청에 사용됩니다. 처리할 요청이 없는 경우 이 배포 옵션은 비용 절감을 위해 인스턴스 수를 XNUMX으로 축소할 수 있으며 이는 의료 영상 ML 추론 워크로드에 이상적입니다. 다음 단계를 따르세요. 샘플 노트 SageMaker 비동기 추론 엔드포인트를 생성하고 호출합니다. 에게 비동기 추론 엔드포인트 생성, 먼저 SageMaker 모델과 엔드포인트 구성을 생성해야 합니다. SageMaker 모델을 생성하려면 model.tar.gz 패키지를 로드해야 합니다. 정의된 디렉토리 구조 Docker 컨테이너에 넣습니다. model.tar.gz 패키지에는 사전 훈련된 비장 분할 model.ts 파일과 사용자 정의된 inference.py 파일이 포함되어 있습니다. Python 3.8 및 PyTorch 1.12.1 프레임워크 버전으로 사전 구축된 컨테이너를 사용하여 모델을 로드하고 예측을 실행했습니다.

맞춤형에서는 추론.py 파일을 사용하여 AHItoDICOMInterface에서 AHItoDICOM 도우미 클래스를 인스턴스화하고 이를 사용하여 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 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 다중 모델 실시간 추론

세이지 메이커 실시간 추론 엔드포인트는 대화형, 짧은 지연 시간 요구 사항을 충족합니다. 이 옵션은 하나의 엔드포인트 뒤에 있는 하나의 컨테이너에서 여러 모델을 호스팅할 수 있으며, 이는 여러 ML 모델을 배포하기 위한 확장 가능하고 비용 효율적인 솔루션입니다. ㅏ SageMaker 다중 모델 엔드포인트는 NVIDIA Triton 추론 서버를 사용합니다. GPU를 사용하여 여러 딥 러닝 모델 추론을 실행합니다.

이 섹션에서는 다중 모델 엔드포인트를 생성하고 호출하는 방법을 안내합니다. 자신만의 추론 컨테이너 조정하기 다음에서 샘플 노트. 동일한 리소스 집합의 공유 컨테이너에서 다양한 모델을 제공할 수 있습니다. 다중 모델 엔드포인트는 배포 오버헤드를 줄이고 엔드포인트에 대한 트래픽 패턴을 기반으로 모델 추론을 확장합니다. 우리는 사용했었다 AWS 개발자 도구 ...을 포함하여 Amazon 코드커밋, 아마존 코드빌드Amazon 코드파이프라인 빌드하기 맞춤형 컨테이너 SageMaker 모델 추론용. 우리는 model_handler.py 이전 예제의 inference.py 파일 대신 자체 컨테이너를 가져오고 초기화(), 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 Elastic Container Registry (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)

결론

이 게시물에서는 MONAI Deploy App SDK로 구축된 애플리케이션에서 재사용할 수 있는 AWS HealthImaging에 대한 MAP 커넥터를 생성하여 클라우드 네이티브 DICOM 저장소에서 의료 영상 AI 워크로드에 이르기까지 이미지 데이터 검색을 통합하고 가속화하는 방법을 보여주었습니다. . MONAI Deploy SDK는 병원 운영을 지원하는 데 사용될 수 있습니다. 또한 SageMaker에 MAP AI 애플리케이션을 대규모로 배포하기 위한 두 가지 호스팅 옵션을 시연했습니다.

예제 노트북을 살펴보세요. GitHub 저장소 AWS HealthImaging에 저장된 의료 이미지를 사용하여 SageMaker에 MONAI 애플리케이션을 배포하는 방법에 대해 자세히 알아보세요. AWS가 귀하를 위해 무엇을 할 수 있는지 알아보려면 다음 담당자에게 문의하십시오. AWS 대표.

추가 리소스는 다음을 참조하세요.


저자에 관하여

명나라 (멜빈) 친 NVIDIA 헬스케어 팀의 독립 기여자로서 AI 추론 애플리케이션 프레임워크와 플랫폼을 개발하여 의료 영상 워크플로우에 AI를 도입하는 데 주력하고 있습니다. Ming은 2018년 Clara의 창립 멤버로 NVIDIA에 합류하기 전 Stentor Inc.에서 수석 엔지니어/설계자로 Radiology PACS 및 Workflow SaaS를 개발하는 데 15년을 보냈습니다. 이 회사는 나중에 Philips Healthcare에 인수되어 Enterprise Imaging을 설립했습니다.

데이비드 베리캣 그는 NVIDIA의 헬스케어 제품 관리자로 Project MONAI Deploy 실무 그룹을 이끌고 연구에서 임상 배포까지 AI를 도입하고 있습니다. 그의 열정은 건강 혁신을 전 세계적으로 가속화하여 이를 진정한 임상적 영향으로 전환하는 것입니다. 이전에 David는 Red Hat에서 근무하며 AI, 클라우드, 엣지 컴퓨팅, IoT의 교차점에서 오픈소스 원칙을 구현했습니다. 그의 가장 자랑스러운 순간은 에베레스트 베이스캠프까지 하이킹을 하고 20년 넘게 축구를 한 것입니다.

브래드 제네로 NVIDIA의 Healthcare Alliances의 글로벌 리드로서 인공 지능과 딥 러닝, 시각화, 가상화 및 분석 솔루션을 가속화하기 위한 의료 영상 분야에 중점을 두고 개발자 관계를 담당하고 있습니다. Brad는 의료 IT 분야에서 20년 이상의 경험을 바탕으로 일상적인 임상 실습에 원활한 의료 및 의료 영상 워크플로우를 유비쿼터스 방식으로 채택하고 통합하는 방법을 전파합니다.

갱푸 AWS의 의료 솔루션 아키텍트입니다. 그는 미시시피 대학교에서 제약학 박사 학위를 취득했으며 10년 이상의 기술 및 생물의학 연구 경험을 보유하고 있습니다. 그는 기술과 그것이 의료에 미칠 수 있는 영향에 열정을 갖고 있습니다.

JP 레거 AWS에서 학술 의료 센터 및 의료 영상 워크플로를 지원하는 수석 솔루션 아키텍트입니다. 그는 소프트웨어 엔지니어링, 의료 IT 및 의료 이미징 분야에서 20년 이상의 전문 지식을 보유하고 있으며 온프레미스, 클라우드 및 분석 및 AI가 포함된 하이브리드에서 대용량 데이터 볼륨의 분산 배포에서 성능, 확장성 및 보안을 위한 시스템 설계에 대한 광범위한 경험을 보유하고 있습니다. .

크리스 하페이 Amazon Web Services의 수석 솔루션 아키텍트입니다. 그는 의료 영상 업계에서 25년 이상의 경험을 갖고 있으며 확장 가능한 고성능 시스템 구축을 전문으로 합니다. 그는 인기 있는 OHIF 오픈 소스 제로 풋프린트 뷰어를 지원하는 인기 있는 CornerstoneJS 오픈 소스 프로젝트의 창시자입니다. 그는 DICOMweb 사양에 기여했으며 웹 기반 보기 성능을 개선하기 위해 계속해서 노력하고 있습니다.

spot_img

최신 인텔리전스

spot_img