Логотип Зефирнет

Создайте конвейер вывода медицинских изображений с помощью искусственного интеллекта с помощью MONAI Deploy на AWS | Веб-сервисы Amazon

Дата:

Этот пост написан в соавторстве с Мингом (Мелвином) Цином, Дэвидом Берикатом и Брэдом Дженеро из NVIDIA.

Исследователям и разработчикам искусственного интеллекта в области медицинских изображений необходима масштабируемая корпоративная среда для создания, развертывания и интеграции своих приложений искусственного интеллекта. AWS и NVIDIA объединились, чтобы воплотить эту идею в жизнь. AWS, NVIDIA и другие партнеры создавайте приложения и решения, которые сделают здравоохранение более доступным, экономичным и эффективным за счет ускорения подключения к облаку для корпоративных изображений. МОНАИ Развертывание является одним из ключевых модулей внутри МОНАЙ (Медицинская открытая сеть для искусственного интеллекта), разработанная консорциумом академических и отраслевых лидеров, включая NVIDIA. AWS HealthImaging (AHI) — это масштабируемый, производительный и экономичный магазин медицинских изображений, соответствующий требованиям HIPAA. Мы разработали соединитель MONAI Deploy для AHI для интеграции приложений искусственного интеллекта для медицинских изображений с задержкой получения изображений в доли секунды в масштабе, основанном на облачных API. Модели и приложения MONAI AI могут размещаться на Создатель мудреца Амазонки, который представляет собой полностью управляемый сервис для развертывания моделей машинного обучения (ML) в большом масштабе. SageMaker берет на себя настройку и управление экземплярами для вывода и предоставляет встроенные метрики и журналы для конечных точек, которые вы можете использовать для мониторинга и получения оповещений. Он также предлагает разнообразные Экземпляры графического процессора NVIDIA для вывода ML, а также несколько вариантов развертывания модели с автоматическим масштабированием, включая вывод в реальном времени, бессерверный вывод, асинхронный выводи пакетное преобразование.

В этом посте мы демонстрируем, как развернуть пакет приложений MONAI (MAP) с соединителем для AWS HealthImaging, используя многомодельную конечную точку SageMaker для вывода в реальном времени и асинхронного вывода. Эти два варианта охватывают большинство случаев использования конвейера вывода медицинских изображений, работающих в режиме, близком к реальному времени.

Обзор решения

Следующая диаграмма иллюстрирует архитектуру решения.

Развертывание MONAI на схеме архитектуры AWS

Предпосылки

Выполните следующие обязательные шаги:

  1. Используйте учетную запись AWS в одном из следующих регионов, где доступен AWS HealthImaging: Северная Вирджиния (us-east-1), Орегон (us-west-2), Ирландия (eu-west-1) и Сидней (ap-southeast-2).
  2. Создать Студия Amazon SageMaker домен и профиль пользователя Управление идентификацией и доступом AWS (IAM) разрешение на доступ к AWS HealthImaging.
  3. Включите расширение JupyterLab v3. и установите расширение Imjoy-jupyter, если вы хотите интерактивно визуализировать медицинские изображения в блокноте SageMaker, используя itkwidgets.

Коннектор MAP к AWS HealthImaging

AWS HealthImaging импортирует файлы DICOM P10 и преобразует их в наборы изображений, которые представляют собой оптимизированное представление серии DICOM. AHI обеспечивает доступ через API к метаданным ImageSet и ImageFrames. Метаданные содержат все атрибуты DICOM в документе JSON. ImageFrames возвращаются в кодировке Высокопроизводительный JPEG2000 (HTJ2K) формат без потерь, который можно декодировать очень быстро. Наборы изображений можно получить с помощью Интерфейс командной строки AWS (AWS CLI) или SDK AWS.

MONAI — это платформа искусственного интеллекта для медицинской визуализации, которая воплощает научные открытия и приложения искусственного интеллекта в клиническое применение. MONAI Deploy — это конвейер обработки, который обеспечивает сквозной рабочий процесс, включая упаковку, тестирование, развертывание и запуск приложений искусственного интеллекта для медицинских изображений в клиническом производстве. Он включает в себя МОНАЙ Развертывание App SDK, MONAI Deploy Express, Менеджер рабочего процессаи Информатический шлюз. SDK приложения MONAI Deploy App предоставляет готовые к использованию алгоритмы и платформу для ускорения создания приложений искусственного интеллекта для медицинских изображений, а также служебные инструменты для упаковки приложения в контейнер MAP. Встроенные основанные на стандартах функции в SDK приложения позволяют MAP плавно интегрироваться в ИТ-сети здравоохранения, что требует использования таких стандартов, как DICOM, HL7 и FHIR, а также в центрах обработки данных и облачных средах. MAP могут использовать как предопределенные, так и настраиваемые операторы для загрузки изображений DICOM, выбора серии, вывода модели и постобработки.

Мы разработали Модуль Python с помощью AWS HealthImaging Python SDK Boto3. Вы можете установить его и использовать вспомогательную функцию для получения экземпляров пары сервис-объект (SOP) DICOM следующим образом:

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

Выходные экземпляры СОП можно визуализировать с помощью интерактивного средства просмотра медицинских 3D-изображений itkwidgets следующим образом. ноутбук, АХИТОДИКОМ класс использует преимущества нескольких процессов для параллельного получения кадров пикселей из AWS HealthImaging и декодировать домен Двоичные объекты HTJ2K используя Библиотека Python OpenJPEG. ImageSetIds берутся из выходных файлов данного задания импорта AWS HealthImaging. Учитывая DatastoreId и импорт JobId, вы можете получить ImageSetId, который эквивалентен UID экземпляра серии DICOM, следующим образом:

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 вы можете получать метаданные заголовка DICOM и пиксели изображения отдельно, используя собственные функции API AWS HealthImaging. Агрегаты экспортеров DICOM заголовки DICOM и пиксели изображения в Пидиком набор данных, который может быть обработан Оператор загрузчика данных MAP DICOM. Используя функцию DICOMizeImageSet(), мы создали коннектор для загрузки данных изображения из AWS HealthImaging на основе MAP. Оператор загрузчика данных 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 является экземпляром класса экспортера DICOM AHItoDICOM с иллюстрированными функциями поиска данных. Мы включили этот новый оператор загрузки данных в AI-приложение для 3D-сегментации селезенки, созданное с помощью MONAI Deploy App SDK. Сначала вы можете изучить, как создать и запустить это приложение. в экземпляре локального блокнота, а затем разверните это приложение MAP в конечных точках управляемого вывода SageMaker.

Асинхронный вывод SageMaker

Создатель мудрецов асинхронный вывод Конечная точка используется для запросов с большими размерами полезной нагрузки (до 1 ГБ), длительным временем обработки (до 15 минут) и требованиями к задержке, близкой к реальному времени. Когда нет запросов на обработку, этот вариант развертывания позволяет уменьшить количество экземпляров до нуля для экономии средств, что идеально подходит для рабочих нагрузок машинного обучения в области медицинских изображений. Следуйте инструкциям в образец тетради для создания и вызова конечной точки асинхронного вывода SageMaker. К создать конечную точку асинхронного вывода, вам сначала потребуется создать модель SageMaker и конфигурацию конечной точки. Чтобы создать модель SageMaker, вам необходимо загрузить пакет model.tar.gz с определенная структура каталогов в контейнер Docker. Пакет model.tar.gz включает предварительно обученный файл model.ts сегментации селезенки и настроенный файл inference.py. Мы использовали готовый контейнер с версиями платформы Python 3.8 и PyTorch 1.12.1 для загрузки модели и выполнения прогнозов.

В индивидуальном inference.py мы создаем экземпляр вспомогательного класса AHItoDICOM из AHItoDICOMInterface и используем его для создания экземпляра 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), который представляет собой файл JSON, в котором указан идентификатор хранилища данных AWS HealthImaging и идентификатор ImageSet для выполнения вывода:

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 в реальном времени

SageMaker вывод в реальном времени конечные точки соответствуют требованиям интерактивности и малой задержки. Этот вариант позволяет разместить несколько моделей в одном контейнере за одной конечной точкой, что является масштабируемым и экономичным решением для развертывания нескольких моделей машинного обучения. А Многомодельная конечная точка SageMaker использует сервер вывода NVIDIA Triton с графическим процессором для выполнения нескольких выводов модели глубокого обучения.

В этом разделе мы рассмотрим, как создать и вызвать многомодельную конечную точку. адаптация собственного контейнера вывода В следующих образец тетради. Различные модели могут обслуживаться в общем контейнере на одном и том же парке ресурсов. Конечные точки с несколькими моделями сокращают затраты на развертывание и позволяют масштабировать модели на основе моделей трафика, поступающих к конечной точке. Мы использовали Инструменты разработчика AWS включая Amazon CodeCommit, Amazon CodeBuildи Amazon CodePipeline построить индивидуальный контейнер для вывода модели SageMaker. Мы подготовили model_handler.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 Elastic Container (Amazon ECR), с его помощью вы можете создать модель SageMaker, а также различные пакеты моделей (файлы tar.gz) по заданному пути 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)

Примечательно, что 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, чтобы сэкономить средства. Наконец, вы можете либо вызвать функцию API AWS HealthImaging, либо использовать консоль AWS HealthImaging для удаления наборов изображений и хранилища данных, созданных ранее:

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

Заключение

В этом посте мы показали, как создать соединитель MAP для AWS HealthImaging, который можно повторно использовать в приложениях, созданных с помощью MONAI Deploy App SDK, для интеграции и ускорения получения данных изображений из облачного хранилища DICOM для рабочих нагрузок искусственного интеллекта в области медицинских изображений. . MONAI Deploy SDK можно использовать для поддержки работы больниц. Мы также продемонстрировали два варианта хостинга для масштабного развертывания приложений MAP AI на SageMaker.

Просмотрите примеры тетрадей в Репозиторий GitHub чтобы узнать больше о том, как развертывать приложения MONAI в SageMaker с медицинскими изображениями, хранящимися в AWS HealthImaging. Чтобы узнать, чем AWS может вам помочь, обратитесь к представитель AWS.

Дополнительные ресурсы см. в следующих разделах:


Об авторах

Мин (Мелвин) Цинь — независимый участник группы здравоохранения NVIDIA, занимающейся разработкой среды и платформы приложений для вывода ИИ, позволяющих использовать ИИ в рабочих процессах медицинской визуализации. Прежде чем присоединиться к NVIDIA в 2018 году в качестве одного из основателей компании Clara, Минг в течение 15 лет занимался разработкой радиологических систем PACS и Workflow SaaS в качестве ведущего инженера/архитектора в компании Stentor Inc., которую позже приобрела компания Philips Healthcare для формирования подразделения Enterprise Imaging.

Дэвид Берикат — менеджер по продуктам в сфере здравоохранения в компании NVIDIA, где он возглавляет рабочую группу Project MONAI Deploy, призванную перенести ИИ из исследований в клиническое развертывание. Его страсть — ускорять инновации в области здравоохранения во всем мире, превращая их в настоящий клинический эффект. Ранее Дэвид работал в Red Hat, внедряя принципы открытого исходного кода на стыке искусственного интеллекта, облака, периферийных вычислений и Интернета вещей. Моментами, которыми он больше всего гордится, являются походы к базовому лагерю Эвереста и игра в футбол на протяжении более 20 лет.

Брэд Женеро является глобальным руководителем отдела медицинских альянсов в NVIDIA, где он отвечает за отношения с разработчиками, специализирующимися на медицинской визуализации для ускорения искусственного интеллекта и глубокого обучения, визуализации, виртуализации и аналитических решений. Брэд пропагандирует повсеместное внедрение и интеграцию бесперебойных рабочих процессов в сфере здравоохранения и медицинской визуализации в повседневную клиническую практику, имея более чем 20-летний опыт работы в сфере ИТ в сфере здравоохранения.

Ганг Фу — архитектор решений для здравоохранения в AWS. Он получил степень доктора фармацевтических наук в Университете Миссисипи и имеет более чем 10-летний опыт работы в области технологий и биомедицинских исследований. Он увлечен технологиями и тем влиянием, которое они могут оказать на здравоохранение.

Ж. П. Леже — старший архитектор решений, поддерживающий академические медицинские центры и рабочие процессы медицинской визуализации в AWS. Он обладает более чем 20-летним опытом разработки программного обеспечения, ИТ в сфере здравоохранения и медицинской визуализации, а также обширным опытом проектирования систем для обеспечения производительности, масштабируемости и безопасности в распределенных развертываниях больших объемов данных локально, в облаке и в гибридных системах с аналитикой и искусственным интеллектом. .

Крис Хэфи — главный архитектор решений в Amazon Web Services. Он имеет более чем 25-летний опыт работы в сфере медицинской визуализации и специализируется на создании масштабируемых высокопроизводительных систем. Он является создателем популярного проекта с открытым исходным кодом CornerstoneJS, который лежит в основе популярной программы просмотра с открытым исходным кодом OHIF. Он внес свой вклад в разработку спецификации DICOMweb и продолжает работать над улучшением ее производительности для просмотра через Интернет.

Spot_img

Последняя разведка

Spot_img