这篇文章是与 NVIDIA 的 Ming (Melvin) Qing、David Bericat 和 Brad Genereaux 共同撰写的。
医学成像人工智能研究人员和开发人员需要一个可扩展的企业框架来构建、部署和集成他们的人工智能应用程序。 AWS 和 NVIDIA 携手将这一愿景变为现实。 AWS、NVIDIA 和其他合作伙伴 构建应用程序和解决方案,通过加速企业成像的云连接,使医疗保健变得更容易获得、负担得起且高效。 莫奈部署 是其中的关键模块之一 摩奈 (人工智能医疗开放网络)由包括 NVIDIA 在内的学术和行业领导者联盟开发。 AWS 健康影像 (AHI) 是一家符合 HIPAA 要求、高度可扩展、高性能且经济高效的医学图像存储。 我们开发了与 AHI 的 MONAI Deploy 连接器,以将医疗成像 AI 应用程序与由云原生 API 提供支持的亚秒级图像检索延迟进行大规模集成。 MONAI AI 模型和应用程序可以托管在 亚马逊SageMaker,这是一项完全托管的服务,用于大规模部署机器学习 (ML) 模型。 SageMaker 负责设置和管理推理实例,并为可用于监控和接收警报的端点提供内置指标和日志。 它还提供各种 NVIDIA GPU 实例 用于 ML 推理,以及具有自动扩展功能的多个模型部署选项,包括 实时推理, 无服务器推理, 异步推理及 批量转换.
在本文中,我们演示如何使用 AWS HealthImaging 连接器部署 MONAI 应用程序包 (MAP),并使用 SageMaker 多模型终端节点进行实时推理和异步推理。 这两个选项涵盖了大多数近实时医学成像推理管道用例。
解决方案概述
下图说明了解决方案体系结构。
先决条件
完成以下先决条件步骤:
- 使用以下区域之一的 AWS 账户,其中 AWS HealthImaging 可用: 北弗吉尼亚州 (
us-east-1
),俄勒冈州(us-west-2
), 爱尔兰 (eu-west-1
)和悉尼(ap-southeast-2
). - 创建 亚马逊SageMaker Studio 域和用户配置文件 AWS身份和访问管理 (IAM) 访问 AWS HealthImaging 的权限。
- 启用 JupyterLab v3 扩展 如果您想使用交互式方式在 SageMaker 笔记本上可视化医学图像,请安装 Imjoy-jupyter-extension itkwidgets.
到 AWS HealthImaging 的 MAP 连接器
AWS HealthImaging 导入 DICOM P10 文件并将其转换为 ImageSet,这是 DICOM 系列的优化表示。 AHI 提供对 ImageSet 元数据和 ImageFrame 的 API 访问。 元数据包含 JSON 文档中的所有 DICOM 属性。 图像帧以编码形式返回 高通量 JPEG2000 (HTJ2K) 无损格式,解码速度极快。 可以使用以下方法检索图像集 AWS命令行界面 (AWS CLI)或 AWS开发工具包.
MONAI 是一个医学成像人工智能框架,它将研究突破和人工智能应用转化为临床影响。 MONAI Deploy 是支持端到端工作流程的处理管道,包括在临床生产中打包、测试、部署和运行医学成像 AI 应用程序。 它包括 摩奈 部署应用程序SDK, MONAI 部署快递, 工作流程管理器及 信息学网关。 MONAI Deploy App SDK 提供了即用型算法和框架来加速构建医学成像 AI 应用程序,以及将应用程序打包到 MAP 容器中的实用工具。 应用程序 SDK 中内置的基于标准的功能使 MAP 能够顺利集成到医疗 IT 网络中,这需要使用 DICOM、HL7 和 FHIR 等标准,并且跨数据中心和云环境。 MAP 可以使用预定义和自定义运算符进行 DICOM 图像加载、系列选择、模型推理和后处理
我们开发了一个 Python模块 使用 AWS HealthImaging Python 开发工具包 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)))
可以使用交互式 3D 医学图像查看器 itkwidgets 来可视化输出 SOP 实例,如下所示 笔记本。 该 AHItoDICOM 类利用多个进程从 AWS HealthImaging 并行检索像素帧,并且 解码 此 HTJ2K 二进制 blob 使用 Python OpenJPEG 库。 ImageSetId 来自给定 AWS HealthImaging 导入作业的输出文件。 给定DatastoreId和导入JobId,您可以检索ImageSetId,它相当于DICOM系列实例UID,如下所示:
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 异步推理
贤者 异步推理 端点用于具有较大负载大小(最多 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 框架版本的预构建容器来加载模型并运行预测。
在定制 推理.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),这是一个 JSON 文件,指定要在其上运行推理的 AWS HealthImaging 数据存储 ID 和 ImageSet ID:
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 实时推理 端点满足交互式、低延迟的要求。 此选项可以在一个端点后面的一个容器中托管多个模型,这是一种可扩展且经济高效的部署多个 ML 模型的解决方案。 A SageMaker 多模型端点使用 NVIDIA Triton 推理服务器 使用 GPU 运行多个深度学习模型推理。
在本节中,我们将介绍如何创建和调用多模型端点 调整您自己的推理容器 在下面的 样本笔记本。 不同的模型可以在同一资源组的共享容器中提供服务。 多模型端点可减少部署开销,并根据端点的流量模式扩展模型推理。 我们用了 AWS 开发者工具 如: 亚马逊代码提交, 亚马逊CodeBuild及 亚马逊代码管道 建立 定制容器 用于 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 模型,以及给定 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)
结论
在这篇文章中,我们向您展示了如何创建到 AWS HealthImaging 的 MAP 连接器,该连接器可在使用 MONAI Deploy App SDK 构建的应用程序中重复使用,以集成并加速从云原生 DICOM 存储到医疗成像 AI 工作负载的图像数据检索。 MONAI Deploy SDK 可用于支持医院运营。 我们还演示了两种在 SageMaker 上大规模部署 MAP AI 应用程序的托管选项。
浏览示例笔记本 GitHub存储库 了解有关如何使用存储在 AWS HealthImaging 中的医疗图像在 SageMaker 上部署 MONAI 应用程序的更多信息。 要了解 AWS 可以为您做什么,请联系 亚马逊代表.
有关其他资源,请参阅以下资源:
作者简介
秦明 (Melvin) 是 NVIDIA 医疗保健团队的独立贡献者,专注于开发 AI 推理应用框架和平台,将 AI 引入医疗成像工作流程。 在 2018 年作为 Clara 创始成员加入 NVIDIA 之前,Ming 在 Stentor Inc. 担任首席工程师/架构师,花了 15 年时间开发放射科 PACS 和工作流 SaaS,该公司后来被飞利浦医疗保健公司收购,成立了 Enterprise Imaging 公司。
大卫·贝里卡特 是 NVIDIA 医疗保健部门的产品经理,领导 MONAI 部署项目工作组,将人工智能从研究转向临床部署。 他热衷于加速全球健康创新,并将其转化为真正的临床影响。 此前,David 曾在红帽工作,负责在人工智能、云、边缘计算和物联网交叉领域实施开源原则。 他最自豪的时刻包括徒步前往珠穆朗玛峰大本营和踢足球 20 多年。
布拉德·热内罗 是 NVIDIA 医疗保健联盟的全球主管,负责开发人员关系,重点关注医学成像,以加速人工智能和深度学习、可视化、虚拟化和分析解决方案的发展。 Brad 在医疗保健 IT 领域拥有 20 多年的经验,倡导无缝医疗保健和医学成像工作流程的普遍采用和集成到日常临床实践中。
刚富 是 AWS 的医疗保健解决方案架构师。 他拥有密西西比大学药物科学博士学位,拥有超过 10 年的技术和生物医学研究经验。 他对技术及其对医疗保健的影响充满热情。
JP莱杰 是一名高级解决方案架构师,为 AWS 的学术医疗中心和医学成像工作流程提供支持。 他在软件工程、医疗保健 IT 和医学成像领域拥有 20 多年的专业知识,在本地、云中以及与分析和 AI 混合的大数据量分布式部署中构建系统以提高性能、可扩展性和安全性方面拥有丰富的经验。
克里斯·哈菲 是 Amazon Web Services 的首席解决方案架构师。 他在医学成像行业拥有超过 25 年的经验,专门致力于构建可扩展的高性能系统。 他是流行的 CornerstoneJS 开源项目的创建者,该项目为流行的 OHIF 开源零足迹查看器提供支持。 他为 DICOMweb 规范做出了贡献,并继续致力于提高其基于 Web 的查看性能。
- :具有
- :是
- :不是
- :在哪里
- $UP
- 1
- 10
- 100
- 12
- 15 年
- 15%
- 20
- 20 年
- 200
- 2018
- 25
- 3d
- 7
- 8
- a
- 关于
- 学者
- 加快
- 加速
- ACCESS
- 无障碍
- 账号管理
- 后天
- 横过
- 加
- 额外
- 采用
- 优点
- 实惠
- AI
- AI模型
- 通知
- 算法
- 所有类型
- 无主钻戒指
- 让
- 还
- Amazon
- 亚马逊网络服务
- an
- 分析
- 和
- API
- API访问
- APIs
- 应用
- 应用领域
- 应用领域
- 架构
- 保健
- 人造的
- 人工智能
- AS
- At
- 属性
- 自动表
- 可使用
- AWS
- 基地
- 基于
- BE
- before
- 背后
- 生物医学
- 身体
- 都
- 布拉德
- 突破
- 带来
- 建立
- 建筑物
- 建
- 内建的
- by
- 呼叫
- 营
- CAN
- 关心
- 例
- Center
- 中心
- 克拉拉
- 程
- 临床资料
- 云端技术
- 码
- 如何
- 完成
- 包含
- 计算
- 配置
- 连接方式
- 安慰
- 财团
- CONTACT
- 容器
- 包含
- Contents
- 上下文
- 继续
- 贡献
- 贡献者
- 价格
- 节约成本
- 经济有效
- 成本
- 外壳
- 合写的
- 创建信息图
- 创建
- 创造者
- 定制
- data
- 数据中心
- David
- 深
- 深入学习
- 演示
- 证明
- 部署
- 部署
- 部署
- 部署
- 开发
- 发达
- 开发商
- 开发
- 发展
- 不同
- 分布
- do
- 码头工人
- 文件
- 向下
- 此前
- 边缘
- 边缘计算
- 高效
- 或
- 其他
- 使
- 端至端
- 端点
- 工程师
- 企业
- 环境中
- 珠峰
- 所有的
- 日常
- 例子
- 除
- 现有
- 体验
- 专门知识
- 探索
- 广泛
- 丰富的经验
- 非常
- false
- 高效率
- 文件
- 档
- 终于
- (名字)
- 舰队
- 专注焦点
- 重点
- 遵循
- 以下
- 如下
- Footprint
- 针对
- 申请
- 格式
- 发现
- 创建
- 骨架
- 止
- fu
- 充分
- 功能
- 功能
- 功能
- GitHub上
- 特定
- 全球
- 在全球范围内
- GPU
- 团队
- 帽子
- 有
- 有
- he
- 头
- 健康管理
- 医疗保健
- 相关信息
- 高性能
- 高度
- 他的
- 持有
- 医院
- 主持人
- 托管
- 托管
- 创新中心
- How To
- HTML
- HTTP
- HTTPS
- 杂交种
- ID
- 理想
- 身分
- if
- 说明
- 图片
- 图片
- 同步成像
- 影响力故事
- 实施
- 实施
- 进口
- 进口
- 改善
- in
- 公司
- 包括
- 包括
- 包括
- 包含
- 独立
- 行业中的应用:
- 創新
- 输入
- 输入
- 安装
- 例
- 代替
- 整合
- 积分
- 房源搜索
- 互动
- 路口
- 成
- 物联网
- 爱尔兰
- IT
- 它的
- 工作
- 加盟
- JPG
- JSON
- 键
- 知道
- 大
- 潜伏
- 后来
- 铅
- 领导人
- 信息
- 学习用品
- 学习
- Line
- 加载
- 装载机
- 装载
- 本地
- 长
- 机
- 机器学习
- 多数
- 使
- 管理
- 经理
- 管理的
- 地图
- 地图
- 医生
- 满足
- 会员
- 元数据
- 指标
- 分钟
- ML
- 时尚
- 模型
- 模型
- 模块
- 美好瞬间
- 显示器
- 更多
- 多模型端点
- 多
- 本地人
- 需求
- 网络
- 网络
- 全新
- 没有
- 不包含
- 北
- 笔记本
- 值得一提的
- Nvidia公司
- 对象
- of
- 优惠精选
- on
- 一
- 仅由
- 打开
- 开放网络
- 开放源码
- 运营
- 操作者
- 运营商
- 优化
- 附加选项
- 附加选项
- or
- 俄勒冈
- OS
- 其他名称
- 产量
- 超过
- 己
- 包
- 包
- 包装
- 对
- 并行
- 情
- 多情
- 径
- 模式
- 性能
- 允许
- 制药
- 博士学位
- 管道
- 像素
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 加
- 热门
- 帖子
- 供电
- 权力
- 在练习上
- 预测
- 准备
- 以前
- 先前
- 校长
- 原则
- 过程
- 处理
- 过程
- 处理
- 产品
- 产品经理
- 生产
- 项目
- 提供
- 蟒蛇
- pytorch
- 实时的
- 现实
- 接收
- 红色
- 红帽
- 减少
- 参考
- 地区
- 地区
- 关系
- 表示
- 请求
- 要求
- 岗位要求
- 需要
- 研究
- 研究人员
- 资源
- 响应
- 提供品牌战略规划
- 回报
- 可重复使用
- 运行
- 运行
- s
- SaaS的
- sagemaker
- SageMaker 推理
- 同
- 保存
- 储
- 可扩展性
- 可扩展性
- 鳞片
- 缩放
- 科学
- SDK
- 无缝的
- 部分
- 保安
- 分割
- 选择
- 自
- 前辈
- 系列
- 已服务
- 服务
- 特色服务
- 套数
- 设置
- 几个
- 形状
- 共用的,
- 应该
- 显示
- 如图
- 简易
- 尺寸
- 顺利
- 足球
- 软件
- 软件工程
- 方案,
- 解决方案
- 来源
- 专业
- 规范
- 花费
- 标准
- 步
- 步骤
- 存储
- 商店
- 存储
- 串
- 这样
- SUPPORT
- 支持
- 悉尼
- 产品
- 需要
- 团队
- 专业技术
- 测试
- 比
- 这
- 其
- 他们
- 然后
- 那里。
- 博曼
- Free Introduction
- 通过
- 时
- 至
- 一起
- 工具
- 向
- 交通
- 海卫一
- true
- 尝试
- 转
- 二
- 普及
- 大学
- 更新
- 使用
- 用过的
- 用户
- 使用
- 运用
- 效用
- 各种
- 版本
- 查看
- 弗吉尼亚州
- 愿景
- 可视化
- 想像
- 卷
- W
- 走
- 想
- we
- 卷筒纸
- Web服务
- 基于网络的
- 井
- 什么是
- ,尤其是
- 这
- 将
- 中
- 也完全不需要
- 工作
- 工作
- 工作流程
- 工作流程
- 加工
- 工作小组
- 年
- 完全
- 您一站式解决方案
- 和风网
- 零