Zephyrnet-logo

Bouw een AI-inferentiepijplijn voor medische beeldvorming met MONAI Deploy op AWS | Amazon-webservices

Datum:

Dit bericht is geschreven in samenwerking met Ming (Melvin) Qin, David Bericat en Brad Genereaux van NVIDIA.

AI-onderzoekers en -ontwikkelaars op het gebied van medische beeldvorming hebben een schaalbaar ondernemingsframework nodig om hun AI-toepassingen te bouwen, in te zetten en te integreren. AWS en NVIDIA zijn samengekomen om deze visie werkelijkheid te maken. AWS, NVIDIA en andere partners applicaties en oplossingen bouwen om de gezondheidszorg toegankelijker, betaalbaarder en efficiënter te maken door de cloudconnectiviteit van bedrijfsimaging te versnellen. MONAI-implementatie is een van de belangrijkste modules binnen MONA (Medical Open Network for Artificial Intelligence) ontwikkeld door een consortium van academische en industriële leiders, waaronder NVIDIA. AWS HealthImaging (AHI) is een HIPAA-geschikte, zeer schaalbare, performante en kosteneffectieve winkel voor medische beelden. We hebben een MONAI Deploy-connector voor AHI ontwikkeld om AI-toepassingen voor medische beeldvorming te integreren met beeldophaallatenties van minder dan een seconde op schaal, mogelijk gemaakt door cloud-native API's. De MONAI AI-modellen en applicaties kunnen worden gehost op Amazon Sage Maker, een volledig beheerde service om machine learning-modellen (ML) op schaal te implementeren. SageMaker zorgt voor het opzetten en beheren van instanties voor gevolgtrekking en biedt ingebouwde statistieken en logboeken voor eindpunten die u kunt gebruiken om waarschuwingen te controleren en te ontvangen. Het biedt ook een verscheidenheid aan NVIDIA GPU-instanties voor ML-inferentie, evenals meerdere modelimplementatieopties met automatische schaling, inclusief real-time gevolgtrekking, serverloze gevolgtrekking, asynchrone gevolgtrekking en batch-transformatie.

In dit bericht laten we zien hoe u een MONAI Application Package (MAP) kunt implementeren met de connector voor AWS HealthImaging, met behulp van een SageMaker multi-model eindpunt voor realtime inferentie en asynchrone inferentie. Deze twee opties dekken het merendeel van de bijna-realtime toepassingen van de pijplijn voor gevolgtrekkingen in medische beeldvorming.

Overzicht oplossingen

Het volgende diagram illustreert de oplossingsarchitectuur.

MONAI implementeren op AWS-architectuurdiagram

Voorwaarden

Voer de volgende vereiste stappen uit:

  1. Gebruik een AWS-account bij een van de volgende regio's, waar AWS HealthImaging beschikbaar is: Noord-Virginia (us-east-1), Oregon (us-west-2), Ierland (eu-west-1), en Sydney (ap-southeast-2).
  2. Maak een Amazon SageMaker Studio domein en gebruikersprofiel Met AWS Identiteits- en toegangsbeheer (IAM) toestemming voor toegang tot AWS HealthImaging.
  3. Schakel de JupyterLab v3-extensie in en installeer Imjoy-jupyter-extensie als u medische beelden interactief wilt visualiseren op een SageMaker-notebook met behulp van het kwidgets.

MAP-connector naar AWS HealthImaging

AWS HealthImaging importeert DICOM P10-bestanden en converteert deze naar ImageSets, die een geoptimaliseerde weergave zijn van een DICOM-serie. AHI biedt API-toegang tot ImageSet-metagegevens en ImageFrames. Metadata bevat alle DICOM-attributen in een JSON-document. ImageFrames worden gecodeerd geretourneerd in het JPEG2000 met hoge doorvoer (HTJ2K) verliesvrij formaat, dat extreem snel kan worden gedecodeerd. ImageSets kunnen worden opgehaald met behulp van de AWS-opdrachtregelinterface (AWS CLI) of de AWS SDK's.

MONAI is een AI-framework voor medische beeldvorming dat doorbraken in onderzoek en AI-toepassingen omzet in klinische impact. MONAI Deploy is de verwerkingspijplijn die de end-to-end workflow mogelijk maakt, inclusief het verpakken, testen, implementeren en uitvoeren van AI-toepassingen voor medische beeldvorming in de klinische productie. Het omvat de MONA App-SDK implementeren, MONAI Implementeer Express, Werkstroombeheerder en Informatica-gateway. De MONAI Deploy App SDK biedt kant-en-klare algoritmen en een raamwerk om het bouwen van AI-applicaties voor medische beeldvorming te versnellen, evenals hulpprogramma's om de applicatie in een MAP-container te verpakken. Dankzij de ingebouwde op standaarden gebaseerde functionaliteiten in de app SDK kan de MAP soepel worden geïntegreerd in IT-gezondheidsnetwerken, waarvoor het gebruik van standaarden zoals DICOM, HL7 en FHIR vereist is, en in datacenter- en cloudomgevingen. MAP's kunnen zowel vooraf gedefinieerde als aangepaste operators gebruiken voor het laden van DICOM-afbeeldingen, serieselectie, modelinferentie en nabewerking

We hebben een Python-module met behulp van de AWS HealthImaging Python SDK Boto3. U kunt het pip installeren en de helperfunctie gebruiken om DICOM Service-Object Pair (SOP)-instanties als volgt op te halen:

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

De uitvoer-SOP-instanties kunnen worden gevisualiseerd met behulp van de interactieve 3D-viewer voor medische beelden itkwidgets in de volgende notitieboekje. De AHItoDICOM class maakt gebruik van meerdere processen om pixelframes parallel op te halen uit AWS HealthImaging, en decoderen de HTJ2K binaire blobs met de Python OpenJPEG-bibliotheek. De ImageSetIds zijn afkomstig van de uitvoerbestanden van een bepaalde AWS HealthImaging-importtaak. Gegeven de DatastoreId en import JobId, kunt u de ImageSetId, die gelijkwaardig is aan de UID van de DICOM-serie, als volgt ophalen:

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

Met ImageSetId kunt u de metagegevens van de DICOM-header en afbeeldingspixels afzonderlijk ophalen met behulp van native AWS HealthImaging API-functies. De DICOM-exporteuraggregaten de DICOM-headers en afbeeldingspixels in het Pydicom dataset, die kan worden verwerkt door de Operator van MAP DICOM-gegevenslader. Met behulp van de functie DICOMizeImageSet() hebben we een connector gemaakt om afbeeldingsgegevens van AWS HealthImaging te laden, gebaseerd op de MAP Operator van DICOM-gegevenslader:

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'])

In de voorgaande code, ahi_client is een exemplaar van de AHItoDICOM DICOM-exporterklasse, met geïllustreerde functies voor het ophalen van gegevens. We hebben deze nieuwe dataloader-operator opgenomen in een 3D-miltsegmentatie AI-applicatie gemaakt door de MONAI Deploy App SDK. U kunt eerst onderzoeken hoe u deze applicatie kunt maken en uitvoeren op een lokale notebookinstantieen implementeer deze MAP-toepassing vervolgens in door SageMaker beheerde inferentie-eindpunten.

SageMaker asynchrone gevolgtrekking

Een SageMaker asynchrone gevolgtrekking eindpunt wordt gebruikt voor verzoeken met grote payloadgroottes (tot 1 GB), lange verwerkingstijden (tot 15 minuten) en bijna realtime latentievereisten. Als er geen verzoeken zijn om te verwerken, kan deze implementatieoptie het aantal exemplaren naar nul terugschalen om kosten te besparen, wat ideaal is voor de werklast van ML-inferentie voor medische beeldvorming. Volg de stappen in de voorbeeld notebook om het asynchrone inferentie-eindpunt van SageMaker te maken en aan te roepen. Naar maak een asynchrone inferentie-eindpunt, moet u eerst een SageMaker-model en een eindpuntconfiguratie maken. Om een ​​SageMaker-model te maken, moet u een model.tar.gz-pakket laden met een gedefinieerde mapstructuur in een Docker-container. Het model.tar.gz-pakket bevat een vooraf getraind miltsegmentatiemodel.ts-bestand en een aangepast inference.py-bestand. We hebben een vooraf gebouwde container met Python 3.8- en PyTorch 1.12.1-frameworkversies gebruikt om het model te laden en voorspellingen uit te voeren.

Bij de aangepaste gevolgtrekking.py -bestand instantiëren we een AHItoDICOM-helperklasse van AHItoDICOMInterface en gebruiken deze om een ​​MAP-instantie te maken in de model_fn() functie, en we voeren de MAP-applicatie uit op elk gevolgtrekkingsverzoek in de predict_fn() functie:

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')

Naar roep het asynchrone eindpunt aan, moet u de payload van de verzoekinvoer uploaden naar Amazon eenvoudige opslagservice (Amazon S3), een JSON-bestand dat de AWS HealthImaging-gegevensopslag-ID en ImageSet-ID specificeert om gevolgtrekkingen uit te voeren op:

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"]

De uitvoer is ook te vinden in Amazon S3.

SageMaker multi-model realtime gevolgtrekking

SageMaker real-time gevolgtrekking eindpunten voldoen aan interactieve vereisten met lage latentie. Met deze optie kunnen meerdere modellen in één container achter één eindpunt worden gehost, wat een schaalbare en kosteneffectieve oplossing is voor de implementatie van meerdere ML-modellen. A SageMaker multi-model eindpunt maakt gebruik van NVIDIA Triton Inference Server met GPU om meerdere deep learning-modelgevolgtrekkingen uit te voeren.

In deze sectie laten we zien hoe u een eindpunt met meerdere modellen maakt en aanroept uw eigen gevolgtrekkingscontainer aanpassen in de volgende voorbeeld notebook. Verschillende modellen kunnen worden geserveerd in een gedeelde container op dezelfde vloot van bronnen. Eindpunten met meerdere modellen verminderen de implementatieoverhead en schaalmodelgevolgtrekkingen op basis van de verkeerspatronen naar het eindpunt. We gebruikten AWS-ontwikkelaarstools waaronder Amazon CodeCommit, Amazon CodeBuild en Amazon CodePipeline te bouwen de op maat gemaakte container voor SageMaker-modelinferentie. Wij hebben een voorbereid model_handler.py om uw eigen container mee te nemen in plaats van het inference.py-bestand in het vorige voorbeeld, en de functies initialize(), preprocess() en inference() te implementeren:

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")

Nadat de container is gebouwd en ernaartoe is geduwd Amazon Elastic Container-register (Amazon ECR), je kunt er een SageMaker-model mee maken, plus verschillende modelpakketten (tar.gz-bestanden) in een bepaald Amazon S3-pad:

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)

Opmerkelijk is dat de model_url specificeert hier alleen het pad naar een map met tar.gz-bestanden, en u specificeert welk modelpakket u moet gebruiken voor gevolgtrekking wanneer u het eindpunt aanroept, zoals weergegeven in de volgende code:

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))

We kunnen meer modellen toevoegen aan het bestaande eindpunt voor inferentie met meerdere modellen zonder dat we het eindpunt hoeven bij te werken of een nieuw eindpunt hoeven te maken.

Opruimen

Vergeet niet de . in te vullen Verwijder de hostingbronnen stap in de laboratorium-3 en laboratorium-4 notebooks om de SageMaker-inferentie-eindpunten te verwijderen. U moet de SageMaker-notebookinstantie uitschakelen om ook kosten te besparen. Ten slotte kunt u de AWS HealthImaging API-functie aanroepen of de AWS HealthImaging-console gebruiken om de eerder gemaakte afbeeldingssets en gegevensopslag te verwijderen:

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

Conclusie

In dit bericht hebben we u laten zien hoe u een MAP-connector voor AWS HealthImaging kunt maken, die herbruikbaar is in applicaties die zijn gebouwd met de MONAI Deploy App SDK, om het ophalen van beeldgegevens uit een cloud-native DICOM-winkel naar AI-workloads voor medische beeldvorming te integreren en te versnellen . De MONAI Deploy SDK kan worden gebruikt om ziekenhuisoperaties te ondersteunen. We hebben ook twee hostingopties gedemonstreerd om MAP AI-applicaties op SageMaker op schaal te implementeren.

Bekijk de voorbeeldnotitieboekjes in de GitHub-repository voor meer informatie over hoe u MONAI-applicaties op SageMaker kunt implementeren met medische beelden die zijn opgeslagen in AWS HealthImaging. Wilt u weten wat AWS voor u kan betekenen, neem dan contact op met een AWS-vertegenwoordiger.

Voor aanvullende bronnen raadpleegt u het volgende:


Over de auteurs

Ming (Melvin) Qin levert een onafhankelijke bijdrage aan het Healthcare-team van NVIDIA, gericht op de ontwikkeling van een AI-inferentietoepassingsframework en -platform om AI naar de medische beeldvormingsworkflows te brengen. Voordat Ming in 2018 bij NVIDIA kwam als stichtend lid van Clara, heeft Ming 15 jaar lang Radiology PACS en Workflow SaaS ontwikkeld als hoofdingenieur/architect bij Stentor Inc., later overgenomen door Philips Healthcare om Enterprise Imaging te vormen.

David Bericat is productmanager voor gezondheidszorg bij NVIDIA, waar hij leiding geeft aan de werkgroep Project MONAI Deploy om AI van onderzoek naar klinische implementaties te brengen. Zijn passie is om gezondheidsinnovatie wereldwijd te versnellen en deze te vertalen naar echte klinische impact. Voorheen werkte David bij Red Hat, waar hij open source-principes implementeerde op het snijvlak van AI, cloud, edge computing en IoT. Zijn meest trotse momenten zijn onder meer het wandelen naar het Everest-basiskamp en het spelen van voetbal gedurende meer dan 20 jaar.

Brad Genereaux is Global Lead, Healthcare Alliances bij NVIDIA, waar hij verantwoordelijk is voor ontwikkelaarsrelaties met een focus op medische beeldvorming om kunstmatige intelligentie en deep learning-, visualisatie-, virtualisatie- en analyseoplossingen te versnellen. Brad evangeliseert de alomtegenwoordige adoptie en integratie van naadloze workflows voor gezondheidszorg en medische beeldvorming in de dagelijkse klinische praktijk, met meer dan 20 jaar ervaring in IT in de gezondheidszorg.

Bende Fu is een Healthcare Solutions Architect bij AWS. Hij heeft een doctoraat in de farmaceutische wetenschappen van de Universiteit van Mississippi en heeft meer dan 10 jaar ervaring in technologie en biomedisch onderzoek. Hij heeft een passie voor technologie en de impact die deze kan hebben op de gezondheidszorg.

JP Leger is een Senior Solutions Architect die academische medische centra en medische beeldvormingsworkflows bij AWS ondersteunt. Hij heeft meer dan 20 jaar expertise op het gebied van software-engineering, IT in de gezondheidszorg en medische beeldvorming, met uitgebreide ervaring in het ontwerpen van systemen voor prestaties, schaalbaarheid en beveiliging bij gedistribueerde implementaties van grote datavolumes op locatie, in de cloud en hybride met analytics en AI. .

Chris Hafey is een Principal Solutions Architect bij Amazon Web Services. Hij heeft meer dan 25 jaar ervaring in de medische beeldvormingsindustrie en is gespecialiseerd in het bouwen van schaalbare, hoogwaardige systemen. Hij is de maker van het populaire open source-project CornerstoneJS, dat de populaire OHIF open source zero footprint-viewer aanstuurt. Hij heeft bijgedragen aan de DICOMweb-specificatie en blijft werken aan het verbeteren van de prestaties voor webgebaseerde weergave.

spot_img

Laatste intelligentie

spot_img