摘要

本 HPC 可视化容器用户指南详细概述了如何使用 NGC 注册中心提供的高性能计算 (HPC) 可视化容器。

1. HPC 可视化容器

除了访问 NVIDIA 优化框架 和 HPC 容器外,NVIDIA GPU Cloud (NGC) 容器注册中心还托管以下用于 HPC 的科学可视化容器。这些容器依赖于名为 ParaView 的常用科学可视化工具。

HPC 环境中的可视化通常需要远程可视化,也就是说,数据驻留在远程 HPC 系统或云中并在其上进行处理,用户从其工作站以图形方式与此应用程序交互。由于某些可视化容器需要专门的客户端应用程序,因此 HPC 可视化容器由两个组件组成
服务器容器
服务器容器需要访问服务器系统上的文件。下面提供了有关如何授予此访问权限的详细信息。服务器容器可以串行模式或并行模式运行。对于此 alpha 版本,我们专注于串行节点配置。如果您对并行配置感兴趣,请联系 hpcviscontainer@nvidia.com。
客户端容器
为了确保客户端应用程序和服务器容器的版本匹配,NVIDIA 在容器中提供了客户端应用程序。与服务器容器类似,客户端容器需要访问某些端口才能建立与服务器容器的连接。
此外,客户端容器需要访问用户的 X 服务器才能显示图形用户界面。
使用 NVIDIA Holodeck 的 ParaView
启用图形丰富的科学可视化;在 ParaView 和高端渲染引擎(如 NVIDIA Holodeck)之间架起桥梁。

使用 NVIDIA IndeX 的 ParaView
在常用的科学可视化工具 ParaView 中提供 NVIDIA IndeX 可扩展体绘制技术。

使用 NVIDIA OptiX 的 ParaView
在 ParaView 中提供 GPU 加速光线追踪技术;为大规模场景提供增强的视觉提示和高性能渲染。

2. HPC 可视化容器的先决条件

  • 安装 docker-cenvidia-docker2。首先安装 docker-ce,然后为您的操作系统和 Docker 版本安装 nvidia-docker2。有关安装 nvidia-docker2 的脚本,请参阅安装 NVIDIA Docker 2.0
    注意: 如果您已安装 nvidia-docker1 并打算保留它,则可以安装 nvidia-container-runtime
  • 根据您的 GPU 产品类型和系列,为您的操作系统安装 NVIDIA 显示驱动程序版本 384.57 或更高版本。有关更多信息,请参阅 下载驱动程序
  • 确保您拥有支持 Compute Unified Device Architecture® (CUDA) 版本的 NVIDIA GPU,其计算能力为 6.0.0 或更高版本。例如,Pascal GPU 架构世代或更高版本。
  • 使用您的 NGC API 密钥登录位于 nvcr.ioNVIDIA® GPU Cloud (NGC) 容器注册中心。有关如何获得访问权限并获取 API 密钥的分步说明,请参阅 NGC 入门指南

2.1. 安装 NVIDIA Docker 2.0

以下脚本安装 NVIDIA Docker 2.0,这是拉取使用 NVIDIA IndeX HPC 可视化容器的 ParaView 的先决条件。

NVIDIA Docker 2.0 完全支持容器中的并发图形和计算功能。NGC 的当前安装在 NVIDIA Docker 1.0 上运行。在任何这些实例上使用容器之前,必须安装 NVIDIA Docker 2.0。

使用以下脚本在您的实例上安装 NVIDIA Docker 2.0。
# Install NVIDIA Docker 2.0
docker volume ls -q -f driver=nvidia-docker | \
  xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
curl -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/nvidia-docker.list <<< \
"deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64 /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64 /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64 /"

sudo apt-get -y update
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Tests
#docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

3. 使用 NVIDIA Holodeck 的 ParaView

目前,使用 NVIDIA Holodeck 容器的 ParaView 需要在服务器主机和客户端主机上都运行 X 服务器。因此,只需要单个容器镜像。

在服务器主机和客户端主机上拉取 docker 镜像,如下所示
docker pull nvcr.io/nvidia-hpcvis/paraview-holodeck:glx-17.11.13-beta

3.1. 运行使用 NVIDIA Holodeck 容器的 ParaView

  1. 为您的容器创建 X 转发变量。
    XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth;
    touch /tmp/.docker.xauth;
    xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -
    
  2. 在服务器主机上,启动 ParaView Holodeck 服务器
    docker run --rm -it --runtime=nvidia \
    -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
    -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
    -p 11111:11111 \
    --shm-size=4g \
    nvcr.io/nvidia-hpcvis/paraview-holodeck:glx-17.11.13-beta \
    ./service.sh externalvis pvserver

    将显示显示空间场景的 Holodeck 渲染窗口。

    在您收到类似于以下消息的消息后,服务器容器即可就绪
    “Accepting connection(s): [...]:11111”
  3. 设置 X 访问权限并在客户端主机上启动客户端容器。确保替换 your_server_hostname
    XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth 
    touch /tmp/.docker.xauth
    xauth nlist :0 | sed -e 's/^..../ffff/' \
    | xauth -f /tmp/.docker.xauth nmerge -docker run --rm -it --runtime=nvidia \
    -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
    -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
    nvcr.io/nvidia-hpcvis/paraview-holodeck:glx-17.11.13-beta \
    sh -c paraview\ --server-url=cs://your_server_hostname:11111 

    将显示 ParaView 用户界面。

  4. 要启用 Holodeck 中的渲染,请替换 ParaView 的默认视图。通过关闭布局删除默认视图
  5. 插入新的外部可视化视图
  6. ParaView Holodeck 容器现在可以显示可视化管线。对于简单的测试场景,添加小波源
  7. 将小波源的范围从 -60 调整为所有三个维度的 60,然后单击 应用
  8. 添加轮廓过滤器,然后单击 应用
  9. 从视图中隐藏小波源,以防止边界框阻止等值面
  10. 使用 启用外部可视化 按钮启用通过 Holodeck 进行渲染

4. 使用 NVIDIA IndeX 的 ParaView

为了同时支持启用 X 的主机和无头主机,ParaView IndeX 容器镜像可用于 GLX 和 EGL 支持。以下部分介绍如何在不同用例中启动 IndeX 容器。

有关 ParaView 的更多信息,请参阅 ParaView 用户指南NVIDIA IndeX SDK

4.1. 使用 GLX 的单机

  1. 登录到 docker 存储库并在您的工作站上拉取启用 X 显示的容器
    docker pull nvcr.io/nvidia-hpcvis/paraview-index:glx-17.11.13-beta
  2. 指定 X 转发变量
    XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth
    touch /tmp/.docker.xauth
    xauth nlist :0 | sed -e 's/^..../ffff/' \
    | xauth -f /tmp/.docker.xauth nmerge 
  3. 运行镜像。在此示例中,当前目录 $(pwd) 中的主机系统数据被挂载到容器中的 /work。应根据用户需要修改此设置。
    docker run --rm -it --runtime=nvidia \
    -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
    -v $(pwd):/work -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
    nvcr.io/nvidia-hpcvis/paraview-index:glx-17.11.13-beta \
    sh -c paraview

4.2. 使用 EGL 的服务器容器

在典型的客户端-服务器设置中,一个充当服务器的容器将在远程无显示器机器上运行,并连接到在工作站本地运行并提供图形前端的第二个容器。
使用以下命令从服务器主机上的 NGC 注册中心拉取启用 EGL 的无显示器容器
docker pull nvcr.io/nvidia-hpcvis/paraview-index:egl-17.11.13-beta
在服务器主机上运行服务器组件。我们监听默认端口 11111
docker run --runtime=nvidia -p 11111:11111 --rm -it \
nvcr.io/nvidia-hpcvis/paraview-index:egl-17.11.13-beta sh -c pvserver

4.3. 连接到服务器的 GLX 客户端

在您的工作站上拉取启用 X 显示的容器
docker pull nvcr.io/nvidia-hpcvis/paraview-index:glx-17.11.13-beta
设置 X 访问权限并启动客户端应用程序容器(确保将 your_server_hostname 替换为您的 ParaView 服务器主机的地址)
XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth
touch /tmp/.docker.xauth
xauth nlist :0 | sed -e 's/^..../ffff/' \
| xauth -f /tmp/.docker.xauth nmerge -
docker run --rm -it --runtime=nvidia \
-v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
-e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
nvcr.io/nvidia-hpcvis/paraview-index:glx-17.11.13-beta \
sh -c paraview\ --server-url=cs://your_server_hostname:11111

4.4. 使用 NVIDIA IndeX 的 ParaView 示例管线

  1. 退出启动画面。
  2. 要设置测试场景,请添加小波源,然后单击 应用
  3. 将显示模式从 轮廓 更改为 NVIDIA IndeX
  4. 将着色从 纯色 更改为 RTData
    结果是由 ParaView 的 IndeX 库在服务器 GPU 上渲染的 ParaView 小波源

5. 使用 NVIDIA OptiX 的 ParaView

使用 NVIDIA OptiX 容器的 ParaView 旨在像用户通常在容器外部一样运行 ParaView。以下部分介绍如何在不同用例中启动 OptiX 容器。

有关 ParaView 的更多信息,请参阅 ParaView 用户指南NVIDIA OptiX SDK

5.1. 使用 GLX 的单机容器

在具有物理显示器的系统上,或者在运行 ParaView 客户端时,用户希望启动支持 GLX 的容器。可以按如下方式完成此操作。
  1. 拉取 docker 镜像
    docker pull nvcr.io/nvidia-hpcvis/paraview-optix:glx-17.11.13-beta
  2. 设置 X11 转发变量
    XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth;
    touch /tmp/.docker.xauth;
    xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -
    
  3. 运行镜像。在此示例中,当前目录 $(pwd) 中的主机系统数据被挂载到容器中的 /work。应根据需要修改此设置。
    docker run --rm -it --runtime=nvidia -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 -v $(pwd):/work:rw nvcr.io/nvidia-hpcvis/paraview-optix-glx-beta:17.11.10 sh -c paraview
    

5.2. 使用 EGL 的服务器容器

在 GPU HPC 资源上启动 ParaView 服务器通常需要 EGL 支持,这需要单独构建 ParaView,为此我们有一个单独的容器。
  1. 拉取容器
    docker pull nvcr.io/nvidia-hpcvis/paraview-optix:egl-17.11.13-beta
  2. 指定连接端口并按如下所示启动容器(在此示例中,我们监听默认端口 11111
    docker run --runtime=nvidia -p 11111:11111 --rm -it \
    nvcr.io/nvidia-hpcvis/paraview-optix:egl-17.11.13-beta sh -c pvserver
  3. 对于希望在支持 GLX 的工作站上运行服务器的用户,同样可以使用带有 pvserver 参数的 GLX 镜像。

5.3. 运行 GLX 客户端并连接到服务器

启动服务器后,就可以直接使用 GLX 镜像运行客户端,并按如下所示连接到服务器。在这里,我们假设服务器正在端口 11111 上监听,可在 your.server.address 寻址。
docker pull nvcr.io/nvidia-hpcvis/paraview-optix:glx-17.11.13-beta

XSOCK=/tmp/.X11-unix; XAUTH=/tmp/.docker.xauth
touch /tmp/.docker.xauth
xauth nlist :0 | sed -e 's/^..../ffff/' \
| xauth -f /tmp/.docker.xauth nmerge -

docker run --rm -it --runtime=nvidia \
-v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
-e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
nvcr.io/nvidia-hpcvis/paraview-optix:glx-17.11.13-beta \
sh -c paraview\ --server-url=cs://your.server.address:11111

5.4. 可选:使用 ParaView .config 文件

重用 ParaView 配置文件以在 ParaView 会话之间保持设置很有用。为此,首先为 ParaView 创建一个新目录以存储其设置。

mkdir pvsettings

发出 docker run 命令时,添加以下命令作为参数

-v $(pwd)/pvsettings:/home/paraview/.config/ParaView

在镜像 URL 之前插入命令。例如,

docker run --rm -it --runtime=nvidia \
 -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth \
 -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=:0 \
 nvcr.io/nvidia-hpcvis/paraview-optix:glx-17.11.13-beta \
 -v $(pwd)/pvsettings:/home/paraview/.config/ParaView \
 sh -c paraview\ --server-url=cs://your.server.address:11111 

5.5. 使用 NVIDIA OptiX 的 ParaView 示例管线

  1. 退出启动画面。
  2. 在顶部下拉菜单中,单击 来源 > 小波。在左侧窗格中,单击 应用
  3. 从顶部下拉菜单中选择 过滤器 > 常用 > 轮廓。再次单击 应用
  4. 从顶部下拉菜单中选择 过滤器 > 常用 > 剪裁。将剪裁平面移动到所需位置,然后单击 应用
  5. 在左侧窗格的 平面参数 子窗格下,取消选中 显示平面 以隐藏剪裁平面。
  6. 在左侧窗格上向下滚动并选择 启用 OptiX
  7. 可选: 启用 阴影 OptiX
  8. 可选: 在 OptiX 中启用每像素 4 个样本和 4 个环境光样本。
  9. 可选: 在左侧窗格中单击 添加光源 并根据需要进行修改。 结果应如下所示

6. 故障排除

有关 nvidia-docker 容器的更多信息,请访问 GitHub 站点:NVIDIA-Docker GitHub

有关深度学习框架发行说明和其他产品文档,请参阅深度学习文档网站:深度学习框架发行说明

声明

声明

本指南中的信息以及本指南中引用的 NVIDIA 文档中包含的所有其他信息均“按原样”提供。 NVIDIA 不对产品的相关信息做出任何明示、暗示、法定或其他方面的保证,并且明确声明不承担任何关于不侵权、适销性以及特定用途适用性的暗示保证。 尽管客户可能因任何原因遭受任何损失,但 NVIDIA 对本指南中描述的产品的总累积责任应根据 NVIDIA 产品销售条款和条件进行限制。

本指南中描述的 NVIDIA 产品不具有容错功能,并非设计、制造或旨在用于与任何系统的设计、建造、维护和/或操作相关的用途,在这些系统中,此类系统的使用或故障可能会导致威胁人类生命安全或严重人身伤害或财产损失的情况(包括但不限于与任何核能、航空电子、生命支持或其他生命攸关的应用相关的用途)。 NVIDIA 明确声明不承担针对此类高风险用途的任何明示或暗示的适用性保证。 NVIDIA 不对客户或任何第三方因该等高风险用途引起的全部或部分索赔或损害承担责任。

NVIDIA 不保证或声明本指南中描述的产品在未经进一步测试或修改的情况下适合任何特定用途。 NVIDIA 不一定对每种产品的所有参数进行测试。 客户全权负责确保产品适合并符合客户计划的应用,并为该应用进行必要的测试,以避免应用或产品的默认设置。 客户产品设计的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本指南中包含的附加或不同条件和/或要求。 NVIDIA 不对任何可能基于或归因于以下原因的任何默认设置、损坏、成本或问题承担任何责任:(i) 以任何违反本指南的方式使用 NVIDIA 产品,或 (ii) 客户产品设计。

除客户有权将本指南中的信息与产品一起使用外,NVIDIA 在本指南下未授予任何其他明示或暗示的许可。 只有在获得 NVIDIA 书面批准、未经修改地复制且附带所有相关条件、限制和声明的情况下,才允许复制本指南中的信息。

商标

NVIDIA、NVIDIA 徽标和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。

Docker 和 Docker 徽标是 Docker, Inc. 在美国和/或其他国家/地区的商标或注册商标。

其他公司和产品名称可能是与其关联的各自公司的商标。