Logotipo de Zephyrnet

Cree un canal de inferencia de IA de imágenes médicas con MONAI Deploy en AWS | Servicios web de Amazon

Fecha:

Esta publicación está coescrita con Ming (Melvin) Qin, David Bericat y Brad Genereaux de NVIDIA.

Los investigadores y desarrolladores de IA de imágenes médicas necesitan un marco empresarial escalable para construir, implementar e integrar sus aplicaciones de IA. AWS y NVIDIA se han unido para hacer realidad esta visión. AWS, NVIDIA y otros socios cree aplicaciones y soluciones para hacer que la atención médica sea más accesible, asequible y eficiente al acelerar la conectividad en la nube de las imágenes empresariales. Implementación de MONAI es uno de los módulos clave dentro MONAI (Red Médica Abierta para Inteligencia Artificial) desarrollada por un consorcio de líderes académicos y de la industria, incluido NVIDIA. Imágenes de salud de AWS (AHI) es una tienda de imágenes médicas elegible para HIPAA, altamente escalable, eficaz y rentable. Hemos desarrollado un conector MONAI Deploy para AHI para integrar aplicaciones de IA de imágenes médicas con latencias de recuperación de imágenes de menos de un segundo a escala impulsadas por API nativas de la nube. Los modelos y aplicaciones de MONAI AI se pueden alojar en Amazon SageMaker, que es un servicio totalmente administrado para implementar modelos de aprendizaje automático (ML) a escala. SageMaker se encarga de configurar y administrar instancias para inferencia y proporciona métricas y registros integrados para puntos finales que puede usar para monitorear y recibir alertas. También ofrece una variedad de Instancias de GPU NVIDIA para inferencia de ML, así como múltiples opciones de implementación de modelos con escalado automático, que incluyen inferencia en tiempo real, inferencia sin servidor, inferencia asíncronay transformación por lotes.

En esta publicación, demostramos cómo implementar un paquete de aplicaciones (MAP) MONAI con el conector para AWS HealthImaging, utilizando un punto final multimodelo de SageMaker para inferencia en tiempo real e inferencia asincrónica. Estas dos opciones cubren la mayoría de los casos de uso de canales de inferencia de imágenes médicas casi en tiempo real.

Resumen de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

Implementación de MONAI en el diagrama de arquitectura de AWS

Requisitos previos

Complete los siguientes pasos de requisitos previos:

  1. Utilice una cuenta de AWS con una de las siguientes regiones donde AWS HealthImaging está disponible: Virginia del Norte (us-east-1), Oregón (us-west-2), Irlanda (eu-west-1), y Sídney (ap-southeast-2).
  2. Crear una Estudio Amazon SageMaker dominio y perfil de usuario Gestión de identidades y accesos de AWS (IAM) para acceder a AWS HealthImaging.
  3. Habilite la extensión JupyterLab v3 e instale Imjoy-jupyter-extension si desea visualizar imágenes médicas en el cuaderno SageMaker de forma interactiva usando widgets.

Conector MAP para AWS HealthImaging

AWS HealthImaging importa archivos DICOM P10 y los convierte en ImageSets, que son una representación optimizada de una serie DICOM. AHI proporciona acceso API a los metadatos de ImageSet e ImageFrames. Los metadatos contienen todos los atributos DICOM en un documento JSON. Los ImageFrames se devuelven codificados en el JPEG2000 de alto rendimiento (HTJ2K) formato sin pérdidas, que se puede decodificar extremadamente rápido. Los ImageSets se pueden recuperar usando el Interfaz de línea de comandos de AWS (AWS CLI) o el SDK de AWS.

MONAI es un marco de IA para imágenes médicas que lleva los avances de la investigación y las aplicaciones de IA al impacto clínico. MONAI Deploy es el proceso de procesamiento que permite el flujo de trabajo de un extremo a otro, incluido el empaquetado, las pruebas, la implementación y la ejecución de aplicaciones de IA de imágenes médicas en la producción clínica. Comprende el MONAI Implementar el SDK de la aplicación, Implementación rápida de MONAI, Gerente de flujo de trabajoy Portal de informática. El SDK de la aplicación MONAI Deploy proporciona algoritmos listos para usar y un marco para acelerar la creación de aplicaciones de IA para imágenes médicas, así como herramientas de utilidad para empaquetar la aplicación en un contenedor MAP. Las funcionalidades integradas basadas en estándares en el SDK de la aplicación permiten que MAP se integre sin problemas en las redes de TI sanitarias, lo que requiere el uso de estándares como DICOM, HL7 y FHIR, y en entornos de centros de datos y de nube. Los MAP pueden utilizar operadores predefinidos y personalizados para la carga de imágenes DICOM, selección de series, inferencia de modelos y posprocesamiento.

Hemos desarrollado un Módulo de Python utilizando el SDK Boto3 de Python de AWS HealthImaging. Puede instalarlo y usar la función auxiliar para recuperar instancias de par de objetos-servicio (SOP) DICOM de la siguiente manera:

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

Las instancias de SOP de salida se pueden visualizar utilizando los itkwidgets del visor interactivo de imágenes médicas en 3D en los siguientes cuaderno. AHItoDICOM La clase aprovecha múltiples procesos para recuperar fotogramas de píxeles de AWS HealthImaging en paralelo, y descodificar las Blobs binarios HTJ2K usando el Biblioteca Python OpenJPEG. Los ImageSetIds provienen de los archivos de salida de un trabajo de importación de AWS HealthImaging determinado. Dado el DatastoreId y el Import JobId, puede recuperar el ImageSetId, que es equivalente al UID de la instancia de la serie DICOM, de la siguiente manera:

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

Con ImageSetId, puede recuperar los metadatos del encabezado DICOM y los píxeles de la imagen por separado utilizando las funciones nativas de la API AWS HealthImaging. El Agregados exportadores DICOM los encabezados DICOM y los píxeles de la imagen en el pydicom conjunto de datos, que puede ser procesado por el Operador del cargador de datos MAP DICOM. Usando la función DICOMizeImageSet(), hemos creado un conector para cargar datos de imágenes desde AWS HealthImaging, basado en el MAP Operador de cargador de datos 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'])

En el código anterior, ahi_client es una instancia de la clase exportadora DICOM AHItoDICOM, con funciones de recuperación de datos ilustradas. Hemos incluido este nuevo operador de cargador de datos en un Aplicación de IA de segmentación del bazo en 3D creada por el SDK de la aplicación MONAI Deploy. Primero puede explorar cómo crear y ejecutar esta aplicación. en una instancia de cuaderno localy luego implemente esta aplicación MAP en los puntos finales de inferencia administrados por SageMaker.

Inferencia asíncrona de SageMaker

Un creador de sabios inferencia asíncrona El punto final se utiliza para solicitudes con tamaños de carga grandes (hasta 1 GB), tiempos de procesamiento prolongados (hasta 15 minutos) y requisitos de latencia casi en tiempo real. Cuando no hay solicitudes para procesar, esta opción de implementación puede reducir el recuento de instancias a cero para ahorrar costos, lo cual es ideal para cargas de trabajo de inferencia de aprendizaje automático de imágenes médicas. Siga los pasos del cuaderno de muestra para crear e invocar el punto final de inferencia asincrónica de SageMaker. A crear un punto final de inferencia asincrónica, primero deberá crear un modelo de SageMaker y una configuración de punto final. Para crear un modelo de SageMaker, necesitará cargar un paquete model.tar.gz con un estructura de directorio definida en un contenedor Docker. El paquete model.tar.gz incluye un archivo model.ts de segmentación del bazo previamente entrenado y un archivo inference.py personalizado. Hemos utilizado un contenedor prediseñado con las versiones de framework Python 3.8 y PyTorch 1.12.1 para cargar el modelo y ejecutar predicciones.

en el personalizado inferencia.py archivo, creamos una instancia de una clase auxiliar AHItoDICOM desde AHItoDICOMInterface y la usamos para crear una instancia MAP en el model_fn() función, y ejecutamos la aplicación MAP en cada solicitud de inferencia en el predict_fn() función:

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

A invocar el punto final asíncrono, deberá cargar la carga útil de entrada de la solicitud a Servicio de almacenamiento simple de Amazon (Amazon S3), que es un archivo JSON que especifica el ID del almacén de datos de AWS HealthImaging y el ID del ImageSet sobre el que ejecutar la inferencia:

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

El resultado también se puede encontrar en Amazon S3.

Inferencia en tiempo real multimodelo de SageMaker

SageMaker inferencia en tiempo real Los puntos finales cumplen con requisitos interactivos y de baja latencia. Esta opción puede alojar varios modelos en un contenedor detrás de un punto final, lo cual es una solución escalable y rentable para implementar varios modelos de ML. A El punto final multimodelo de SageMaker utiliza el servidor de inferencia NVIDIA Triton con GPU para ejecutar múltiples inferencias de modelos de aprendizaje profundo.

En esta sección, explicamos cómo crear e invocar un punto final multimodelo. adaptando su propio contenedor de inferencia en el siguiente cuaderno de muestra. Se pueden servir diferentes modelos en un contenedor compartido en la misma flota de recursos. Los puntos finales multimodelo reducen la sobrecarga de implementación y escalan las inferencias del modelo en función de los patrones de tráfico hacia el punto final. Nosotros usamos Herramientas para desarrolladores de AWS de alta calidad que incluyen Compromiso de código de Amazon, Código de AmazonConstruccióny Amazon CodePipeline para construir el contenedor personalizado para la inferencia del modelo SageMaker. preparamos un model_handler.py para traer su propio contenedor en lugar del archivo inference.py en el ejemplo anterior, e implementó las funciones inicializar(), preproceso() e inferencia():

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

Después de construir el contenedor y empujarlo a Registro de contenedores elásticos de Amazon (Amazon ECR), puede crear un modelo de SageMaker con él, además de diferentes paquetes de modelos (archivos tar.gz) en una ruta determinada de Amazon S3:

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)

Es de destacar que el model_url aquí solo especifica la ruta a una carpeta de archivos tar.gz, y usted especifica qué paquete de modelo usar para la inferencia cuando invoca el punto final, como se muestra en el siguiente código:

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

Podemos agregar más modelos al punto final de inferencia multimodelo existente sin tener que actualizar el punto final o crear uno nuevo.

Limpiar

No olvide completar el Eliminar los recursos de hosting paso en el laboratorio-3 y laboratorio-4 cuadernos para eliminar los puntos finales de inferencia de SageMaker. También debe rechazar la instancia del cuaderno SageMaker para ahorrar costos. Finalmente, puede llamar a la función API de AWS HealthImaging o utilizar la consola de AWS HealthImaging para eliminar los conjuntos de imágenes y el almacén de datos creados anteriormente:

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

Conclusión

En esta publicación, le mostramos cómo crear un conector MAP para AWS HealthImaging, que es reutilizable en aplicaciones creadas con el SDK de la aplicación MONAI Deploy, para integrarse y acelerar la recuperación de datos de imágenes desde un almacén DICOM nativo de la nube hasta cargas de trabajo de IA de imágenes médicas. . El SDK de MONAI Deploy se puede utilizar para respaldar las operaciones del hospital. También demostramos dos opciones de alojamiento para implementar aplicaciones MAP AI en SageMaker a escala.

Revise los cuadernos de ejemplo en el Repositorio GitHub para obtener más información sobre cómo implementar aplicaciones MONAI en SageMaker con imágenes médicas almacenadas en AWS HealthImaging. Para saber qué puede hacer AWS por usted, comuníquese con un Representante de AWS.

Para recursos adicionales, consulte lo siguiente:


Acerca de los autores

Ming (Melvin) Qin es un colaborador independiente del equipo de atención médica de NVIDIA, enfocado en desarrollar un marco y una plataforma de aplicación de inferencia de IA para llevar la IA a los flujos de trabajo de imágenes médicas. Antes de unirse a NVIDIA en 2018 como miembro fundador de Clara, Ming pasó 15 años desarrollando Radiology PACS y Workflow SaaS como ingeniero/arquitecto líder en Stentor Inc., posteriormente adquirida por Philips Healthcare para formar Enterprise Imaging.

David Bericat es gerente de producto para atención médica en NVIDIA, donde dirige el grupo de trabajo Project MONAI Deploy para llevar la IA desde la investigación a las implementaciones clínicas. Su pasión es acelerar la innovación sanitaria a nivel mundial traduciéndola en un verdadero impacto clínico. Anteriormente, David trabajó en Red Hat, implementando principios de código abierto en la intersección de la IA, la nube, la informática de punta y la IoT. Sus momentos de mayor orgullo incluyen ir al campamento base del Everest y jugar fútbol durante más de 20 años.

Brad Generéaux es líder global de alianzas sanitarias en NVIDIA, donde es responsable de las relaciones con los desarrolladores con especial atención en imágenes médicas para acelerar la inteligencia artificial y las soluciones de aprendizaje profundo, visualización, virtualización y análisis. Brad evangeliza la adopción e integración ubicuas de flujos de trabajo de imágenes médicas y atención médica sin interrupciones en la práctica clínica diaria, con más de 20 años de experiencia en TI para el cuidado de la salud.

Pandilla Fu es arquitecto de soluciones sanitarias en AWS. Tiene un doctorado en Ciencias Farmacéuticas de la Universidad de Mississippi y tiene más de 10 años de experiencia en investigación biomédica y en tecnología. Le apasiona la tecnología y el impacto que puede tener en la atención sanitaria.

JP Leger es un arquitecto senior de soluciones que brinda soporte a centros médicos académicos y flujos de trabajo de imágenes médicas en AWS. Tiene más de 20 años de experiencia en ingeniería de software, TI para atención médica e imágenes médicas, con amplia experiencia en arquitectura de sistemas para rendimiento, escalabilidad y seguridad en implementaciones distribuidas de grandes volúmenes de datos en las instalaciones, en la nube e híbridos con análisis e inteligencia artificial. .

chris hafey es arquitecto principal de soluciones en Amazon Web Services. Tiene más de 25 años de experiencia en la industria de imágenes médicas y se especializa en la construcción de sistemas escalables de alto rendimiento. Es el creador del popular proyecto de código abierto CornerstoneJS, que impulsa el popular visor de huella cero de código abierto OHIF. Contribuyó a la especificación DICOMweb y continúa trabajando para mejorar su rendimiento para la visualización basada en web.

punto_img

Información más reciente

punto_img