入门指南#
设置和先决条件#
硬件要求#
最低 GPU 内存 (GB):对于生成 512^3 或更大尺寸的图像,需要 60 GB。请参考所需的 GPU 内存了解更多详情。
CPU x86-64 >= 8 核(推荐)
内存 >= 32 GB(推荐)
最低存储空间:50 GB(28 GB 容器大小)
软件要求#
最低 NVIDIA 驱动程序 版本:535
安装 Docker
NGC (NVIDIA GPU Cloud) 账户设置#
设置
NGC_API_KEY
export NGC_API_KEY=<Your NGC API Key>
使用您的 NGC API 密钥登录 Docker,命令为
docker login nvcr.io --username='$oauthtoken' --password=$NGC_API_KEY
NGC CLI 工具设置#
为您的操作系统下载 NGC CLI 工具。
在本地设置您的 NGC CLI 工具(您需要您的 API 密钥!)
ngc config set
输入 API 密钥后,您可能会看到组织和团队的多个选项。根据需要选择或按 Enter 键接受默认值。
使用说明#
运行 NIM#
拉取 NIM 容器
docker pull nvcr.io/nim/nvidia/maisi:1.0.0
运行 NIM 容器
docker run --rm -it --name maisi \ --runtime=nvidia -e CUDA_VISIBLE_DEVICES=0 \ -p 8000:8000 \ -e NGC_API_KEY=$NGC_API_KEY \ nvcr.io/nim/nvidia/maisi:1.0.0
使用 docker logs 监控进度
docker logs --follow maisi
健康和活跃度检查#
就绪检查
curl localhost:8000/v1/health/ready
活跃度检查
curl localhost:8000/v1/health/live
等待健康检查返回状态代码
200
Bash
base_url="https://127.0.0.1:8000" endpoint="/v1/health/ready" response=$(curl -s -o /dev/null -w "%{http_code}" "$base_url$endpoint") while [ "$response" -ne 200 ]; do echo "Waiting for the service to be ready..." sleep 5 response=$(curl -s -o /dev/null -w "%{http_code}" "$base_url$endpoint") done echo "Service is ready!"
Python
import requests import time base_url = "https://127.0.0.1:8000" response = requests.get(f"{base_url}/v1/health/ready") while response.status_code != 200: response = requests.get(f"{base_url}/v1/health/ready") time.sleep(5) print(response.json())
与 API 交互#
MAISI API 提供两个主要端点
/v1/maisi/info
:GET 请求以检索服务信息/v1/maisi/run
:POST 请求以生成合成图像
这是一个 Python 脚本,演示如何使用 MAISI NIM API 查询服务信息
import requests
import json
base_url = "https://127.0.0.1:8000"
# Query service info
info_response = requests.get(f"{base_url}/v1/maisi/info")
print("Service Info:", json.dumps(info_response.json(), indent=2))
这是一个生成合成图像的脚本,此脚本将 POST 请求发送到 /v1/maisi/run
并带有图像生成参数。然后它处理响应,保存 ZIP 文件或根据需要显示 JSON 消息。
import requests
from datetime import datetime
base_url = "https://127.0.0.1:8000"
# Generate synthetic image
payload = {
"num_output_samples": 1,
"body_region": ["abdomen"],
"anatomy_list": ["liver", "spleen"],
"output_size": [512, 512, 512],
"spacing": [1.0, 1.0, 1.0],
"image_output_ext": ".nii.gz",
"label_output_ext": ".nii.gz",
}
generation_response = requests.post(f"{base_url}/v1/maisi/run", json=payload)
if generation_response.status_code == 200:
print("Files generated successfully!")
if generation_response.headers.get('Content-Type') == 'application/zip':
# Save ZIP file with timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
zip_filename = f"output_{timestamp}.zip"
with open(zip_filename, "wb") as f:
f.write(generation_response.content)
print(f"Output saved as {zip_filename}")
elif 'application/json' in generation_response.headers.get('Content-Type', ''):
response_json = generation_response.json()
print("Response:", response_json.get('message') or response_json.get('error'))
else:
print("Unexpected response format")
else:
print(f"Error {generation_response.status_code}: {generation_response.text}")
注意:当使用 NVIDIA A100 GPU 时,生成单个 512x512x512 图像可能需要大约 10 到 20 分钟。确切时间可能因系统具体配置而异。
停止容器#
要停止容器,请运行
docker stop maisi
可视化输出#
示例输出#
使用 3D Slicer 可视化#
用户可以使用 3D Slicer 的查看器可视化 MAISI NIM 生成的分割结果。我们展示了安装 3D Slicer 和可视化 MAISI 分割的一些入门步骤。
安装 3D Slicer#
要安装 3D Slicer,您需要下载并安装稳定版和预览版。有关安装 3D Slicer 的更多信息,请参阅 3D Slicer 文档。
解压压缩文件,然后在文件系统中双击“3D Slicer”应用程序,根据不同的操作系统选择正确的版本。
可视化和渲染#
打开 3D Slicer 应用程序,在启动面板查看器下
打开 MAISI NIM 生成的 CT 体数据和分割文件,可以是 NRRD 或 NIFTI 文件。拖动文件或从菜单导入。在弹出窗口中,如果您只想加载文件,请选择“体数据”选项。或者您可以选择“分割”模式。
这是生成的 CT 体数据的示例
可视化生成的标签,显示所有标签。
同时可视化 CT 图像及其 MAISI 标签渲染。上图显示了叠加效果。
FAQ(常见问题解答)#
问:什么是 MAISI,它可以用来做什么?
答:MAISI(Medical AI for Synthetic Imaging,医学人工智能合成影像)是一种用于生成合成 CT 图像的 3D 潜在扩散模型。它主要用于医学影像研究中的数据增强,帮助补充有限的数据集并提高其他医学人工智能模型的性能。问:MAISI 可以用于临床目的吗?
答:不可以,MAISI 仅用于研究目的,不应用于临床诊断或治疗计划。问:运行 MAISI 的最低硬件要求是什么?
答:MAISI 需要至少 60 GB 内存的 GPU 才能生成 512^3 尺寸的图像。它已在 A100 80GB 和 H100 GPU 上验证。问:如何指定我想要在生成的图像中的解剖结构?
答:您可以使用 API 有效负载中的anatomy_list
参数来指定所需的解剖结构。有关可用选项的完整列表,请参阅 API 参考部分中的“支持的解剖结构”表。问:我可以控制生成的图像中特定器官的大小吗?
答:是的,您可以使用controllable_anatomy_size
参数来调整最多 10 个特定器官的大小。大小可以设置为 0.0 到 1.0 之间,或 -1 以移除器官。问:MAISI 支持哪些输出格式?
答:MAISI 可以输出 NIfTI、DICOM 和 Nrrd 格式的图像。您可以使用image_output_ext
和label_output_ext
参数指定所需的格式。问:在单个 API 调用中,我可以生成多少张图像?
答:您可以使用num_output_samples
参数指定要生成的图像数量。没有固定的限制,但生成大量图像可能需要更多时间和资源。问:是否可以生成不同身体区域的图像?
答:是的,您可以使用body_region
参数指定一个或多个身体区域。可用选项包括“head”、“chest”、“thorax”、“abdomen”、“pelvis”和“lower”。问:为什么我只得到部分身体区域?
答:如果请求的视野 (FOV) 小于实际身体大小,则可能会发生此问题。确保正确设置output_size
和spacing
参数以覆盖整个身体区域。这里您可以找到一些推荐的output_size
和spacing
值。问:为什么我会在请求的身体区域之外获得额外的身体区域?
答:如果指定的视野 (FOV) 大于请求的身体区域的实际大小,则可能会发生此问题。确保准确设置output_size
和spacing
参数,仅覆盖所需的身体区域。这里您可以找到一些推荐的output_size
和spacing
值。问:在生成图像时,如何处理 API 响应?
答:API 响应要么是包含生成图像的 ZIP 文件(如果成功),要么是 JSON 消息(如果存在错误或其他信息)。“与 API 交互”部分中提供的 Python 脚本演示了如何处理这两种类型的响应。问:如何报告与 MAISI 相关的问题或安全漏洞?
答:您可以通过 NVIDIA AI Concerns 门户报告安全漏洞或其他问题,网址为 https://www.nvidia.com/en-us/support/submit-security-vulnerability/。问:如果 Docker 容器无法启动,我该怎么办?
答:确保您已安装正确的 NVIDIA 驱动程序(最低版本 535)并且 NVIDIA Container Toolkit 已正确设置。此外,请验证您的系统是否满足最低硬件要求,尤其是 GPU 内存。问:如果健康检查失败怎么办?
答:再等几秒钟,然后重试。如果问题仍然存在,请使用docker logs --follow maisi
检查 docker 日志以查找任何错误消息。确保您的系统资源没有受到限制,并且容器可以完全访问 GPU。问:图像生成期间“内存不足”错误的原因是什么?
答:确保您的 GPU 至少有 60GB 内存。如果没有,请尝试减小output_size
参数或一次生成较少的样本。您也可以尝试减少anatomy_list
中的解剖结构数量。问:如何查看生成的输出文件?
答:输出文件采用 NIfTI、DICOM 或 Nrrd 格式,具体取决于您的指定。您可以使用医学影像软件(如 3D Slicer、ITK-SNAP 或 MRIcroGL)查看这些文件。确保输出文件已在 API 调用中指定的预期位置创建。问:如果 NGC CLI 工具设置失败,我该怎么办?
答:仔细检查您是否输入了正确的 API 密钥。如果问题仍然存在,请尝试从 NGC 网站重新生成新的 API 密钥。此外,请确保您已安装最新版本的 NGC CLI 工具。问:我可以调整大型或复杂图像的生成超时时间吗?
答:是的,您可以在启动 Docker 容器时使用GENERATE_IMAGE_TIMEOUT
环境变量为图像生成设置自定义超时时间。默认值为 1800 秒(30 分钟)。问:是否可以使用不同的端口作为 API 服务器?
答:是的,您可以在启动 Docker 容器时使用NIM_HTTP_API_PORT
环境变量指定不同的 API 服务器端口。默认端口为 8000。
如果您遇到任何其他问题,请参阅 NVIDIA MAISI 文档或联系 NVIDIA 寻求支持。