高级用法#
多 GPU 负载均衡#
VISTA-3D NIM 支持使用 Triton Inference Server 的多 GPU 负载均衡。此功能允许您跨多个 GPU 分布推理任务,从而可能提高高容量工作负载的吞吐量和性能。但是,此功能是可选的,并非基本操作所必需。
要启用多 GPU 支持
确保您的系统具有多个兼容的 GPU。
启动 Docker 容器时,通过设置
CUDA_VISIBLE_DEVICES
环境变量来指定您要使用的 GPU。启动 Docker 容器时,设置
NIM_HTTP_MAX_WORKERS
环境变量以指定用于处理 HTTP 请求的工作线程数。确保此数字至少等于 GPU 的数量。
docker run --gpus all --rm -it --ipc=host --net=host -e NGC_API_KEY=$NGC_API_KEY -e CUDA_VISIBLE_DEVICES=0,1,2,3 -e NIM_HTTP_MAX_WORKERS=4 nvcr.io/nim/nvidia/vista3d:1.0.0
使用本地图像文件或 DICOM 文件夹进行推理#
除了发送图像 URL 之外,您还可以指定本地图像文件(或包含多个图像切片的文件,例如 dicom 文件夹)用于推理请求。要启用此功能,在运行 NIM 容器时必须挂载相关路径
docker run --gpus all --rm -it --ipc=host --net=host -e NGC_API_KEY=$NGC_API_KEY -v /path/on/host:/path/in/container nvcr.io/nim/nvidia/vista3d:1.0.0
如果图像文件是 /path/on/host/image.nii.gz
,则在推理请求负载中,“image”应为 /path/in/container/image.nii.gz
。如果图像文件夹是 /path/on/host/dicom_folder
,则在推理请求负载中,“image”应为 /path/in/container/dicom_folder
。
将数据写入本地挂载目录#
要将推理结果写入本地挂载目录,应在请求负载中指定 local_working_dir
参数。要启用此功能,在运行 NIM 容器时必须挂载本地目录。
请确保该目录具有正确的权限,以允许 Docker 容器写入其中(例如,对其执行 sudo chmod -R 777
)。如果目录是 /path/on/host/results/
,则在推理请求负载中,local_working_dir
应为 /path/in/container/results/
。
覆盖 Bundle#
如果需要覆盖 bundle,请在运行容器时提供环境变量 OVERRIDE_DICT
。dict 应该是 JSON 编码的字符串。例如
docker run --gpus all --rm -it --ipc=host --net=host -e NGC_API_KEY=$NGC_API_KEY -e OVERRIDE_DICT='{"output_ext": ".nrrd"}' nvcr.io/nim/nvidia/vista3d:1.0.0
在没有 TensorRT 的情况下进行推理#
默认情况下,TensorRT 用于推理以利用其性能优化。但是,在某些情况下,您可能希望禁用 TensorRT 并使用默认的推理引擎。要禁用 TensorRT,请在运行容器时将环境变量 TRT_INFERENCE
设置为 False
docker run --gpus all --rm -it --ipc=host --net=host -e NGC_API_KEY=$NGC_API_KEY -e TRT_INFERENCE=False <vista3d nim container>
更改端口#
FastAPI 应用程序的默认端口是 8000
,添加环境变量 NIM_HTTP_API_PORT
可以在运行容器时更改它。例如
docker run --gpus all --rm -it --ipc=host --net=host -e NGC_API_KEY=$NGC_API_KEY -e NIM_HTTP_API_PORT=12000 nvcr.io/nim/nvidia/vista3d:1.0.0
注意: 某些端口(如 8001、8002 和 8080)可能已被容器内的其他服务使用。避免将
NIM_HTTP_API_PORT
设置为这些端口,以防止冲突。
图像 URL 限制#
为了确保 VISTA-3D 微服务的安全性和完整性,对可以从中获取图像的 URL 施加了某些限制。可以通过环境变量自定义这些限制,从而在不同的部署场景中实现灵活性。
环境变量#
ALLOWED_MIME_TYPES
:定义图像 URL 允许的 MIME 类型。默认值:
["application/dicom"]
示例:
-e ALLOWED_MIME_TYPES='["application/dicom"]'
DOMAIN_WHITELIST
:指定可以从中获取图像的域的白名单。默认值:
["https://.*", "https://raw.githubusercontent.com/NVIDIA/.*", "https://assets.ngc.nvidia.com/products/api-catalog/vista3d/.*", "https://storage.googleapis.com/.*", "https://.*.s3.amazonaws.com/.*", "https://.*.blob.core.windows.net/.*"]
示例:
-e DOMAIN_WHITELIST='["https://example.com", "https://trusted-domain.org"]'
DOMAIN_BLACKLIST
:指定禁止从中获取图像的域的黑名单。默认值:
[]
示例:
-e DOMAIN_BLACKLIST='["https://untrusted-domain.com", "https://malicious-site.org"]'
IMAGE_CONNECTION_TIMEOUT
:设置连接到图像 URL 的超时时间(秒)。默认值:10 秒
示例:
-e IMAGE_CONNECTION_TIMEOUT=15
IMAGE_READ_TIMEOUT
:设置从 URL 读取图像的超时时间(秒)。默认值:60 秒
示例:
-e IMAGE_READ_TIMEOUT=90
IGNORE_SSL_ERRORS
:如果设置为True
,则在获取图像时将忽略 SSL 错误。默认值:
False
示例:
-e IGNORE_SSL_ERRORS=True
MAX_IMAGE_SIZE
:定义可以处理的图像的最大大小(字节)。默认值:1 GB (~1000000000 字节)
示例:
-e MAX_IMAGE_SIZE=2147483648
# 2 GB
DOWNLOAD_CHUNK_SIZE
:定义下载大文件时每个块的大小(字节)。默认值:10 MB (~10000000 字节)
示例:
-e DOWNLOAD_CHUNK_SIZE=16777216
# 16 MB
IMAGE_URI_HTTPS_ONLY
:当设置为True
时,图像获取仅允许 HTTPS URL。默认值:
True
示例:
-e IMAGE_URI_HTTPS_ONLY=False
IMAGE_URI_ALLOW_REDIRECTS
:如果设置为True
,则允许图像 URL 重定向。默认值:
False
示例:
-e IMAGE_URI_ALLOW_REDIRECTS=True
SUPPORTED_IMAGE_EXT
:列出支持的图像文件扩展名。默认值:
[".nrrd", ".nii", ".nii.gz", ".dcm"]
示例:
-e SUPPORTED_IMAGE_EXT='[".nrrd", ".nii.gz"]'
要自定义任何这些环境变量,请在运行 NIM 容器时指定它们。以下示例结合了多个环境变量
docker run --gpus all --rm -it --ipc=host --net=host \
-e NGC_API_KEY=$NGC_API_KEY \
-e SUPPORTED_IMAGE_EXT='[".nrrd", ".nii.gz"]' \
-e MAX_IMAGE_SIZE=2147483648 \
-e IMAGE_CONNECTION_TIMEOUT=15 \
-e IMAGE_READ_TIMEOUT=90 \
-e DOMAIN_WHITELIST='["example.com", "trusted-domain.org"]' \
nvcr.io/nim/nvidia/vista3d:1.0.0
此示例为支持的图像扩展名、最大图像大小、连接和读取超时以及域白名单设置了自定义值。
FAQ(常见问题解答)#
问:什么是 VISTA-3D?它的主要用途是什么? 答:VISTA-3D(Versatile Imaging SegmenTation and Annotation,多功能影像分割和注释)是一个交互式基础模型,专为医学影像中人体解剖结构的精确分割和注释而开发。它主要用于全面的身体探索、详细的截面视图以及医学研究和分析中的交互式点提示分割。
问:VISTA-3D 可以用于临床诊断吗? 答:VISTA-3D 主要是一种研究工具。虽然它可以帮助为医学影像分析创建准确的 ground-truth 数据,但在没有适当的验证和监管批准的情况下,不应直接用于临床诊断。
问:运行 VISTA-3D 的最低硬件要求是什么? 答:VISTA-3D 需要至少 48 GB 内存的 GPU。它已在具有 Ampere 或 Hopper 架构的 NVIDIA GPU(如 A100 和 H100)上得到验证。
问:VISTA-3D 可以处理哪些类型的医学图像? 答:VISTA-3D 旨在处理 NIfTI 格式的 3D 计算机断层扫描 (CT) 图像。
问:如何指定我要分割的器官或结构? 答:您可以使用 API 负载中的
prompts
参数来指定所需的分割类别(器官或结构)。例如,"prompts": {"classes": ["liver", "spleen"]}
。问:我可以使用用户定义的点来指导分割过程吗? 答:是的,VISTA-3D 支持交互式点提示分割。您可以使用 API 负载的
prompts
字段中的points
参数提供特定点来指导分割过程。问:VISTA-3D 支持哪些输出格式? 答:VISTA-3D 可以 NIfTI (.nii.gz) 和 NRRD (.nrrd) 格式输出分割掩码。您可以在 API 调用中指定所需的格式。
问:如何查看分割结果? 答:您可以使用医学影像软件(如 3D Slicer、ITK-SNAP 或 MRIcroGL)查看分割结果以及原始 CT 图像。
问:是否可以同时分割多个器官? 答:是的,您可以在
prompts
参数的classes
列表中指定多个器官,以在单个 API 调用中分割多个结构。问:如果 Docker 容器无法启动,我该怎么办? 答:确保您已安装正确的 NVIDIA 驱动程序,并且 NVIDIA Container Toolkit 已正确设置。此外,请验证您的系统是否满足最低硬件要求,尤其是 GPU 内存。
问:如果健康检查失败怎么办? 答:再等待几秒钟,然后重试。如果问题仍然存在,请使用
docker logs --follow vista3d
检查 docker 日志以查找任何错误消息。确保您的系统资源没有受到限制,并且容器对 GPU 具有完全访问权限。问:分割期间“内存不足”错误的原因是什么? 答:确保您的 GPU 至少有 48 GB 内存。如果不是,请尝试使用较小的输入图像或一次分割较少的器官。您也可以尝试降低图像分辨率(如果可能)。
问:如何提高分割的准确性? 答:对于具有挑战性的情况,您可以使用交互式点提示分割功能。在器官边界上提供策略点以指导模型。
问:如果 NGC CLI 工具设置失败,我该怎么办? 答:仔细检查您是否输入了正确的 API 密钥。如果问题仍然存在,请尝试从 NGC 网站重新生成新的 API 密钥。此外,请确保您已安装最新版本的 NGC CLI 工具。
问:VISTA-3D 可以处理的图像大小是否有限制? 答:虽然没有严格的限制,但较大的图像需要更多的 GPU 内存和处理时间。如果您在处理非常大的图像时遇到问题,请考虑对感兴趣区域进行下采样或裁剪。
如果您遇到任何其他问题,请参阅 NVIDIA VISTA-3D 文档或联系 NVIDIA 以获得支持。