!

Dockerコンテナ内のPyVista#

jupyterlabでは,Dockerコンテナから pyvista を使用することができます. ローカルのDockerコンテナを起動するには, docker をインストールし,イメージをpullして実行する.

docker run -p 8888:8888 ghcr.io/pyvista/pyvista:latest

最後に,端末出力に表示されるリンクを開き,jupyterlabのpyvistaを試してみましょう.たとえば,次のようになります.

To access the notebook, open this file in a browser:
    file:///home/jovyan/.local/share/jupyter/runtime/nbserver-6-open.html
Or copy and paste one of these URLs:
    http://861c873f6352:8888/?token=b3ac1f6397188944fb21e1f58b673b5b4e6f1ede1a84787b
 or http://127.0.0.1:8888/?token=b3ac1f6397188944fb21e1f58b673b5b4e6f1ede1a84787b

注釈

`私たちのDockerコンテナの最新のタグは,こちら<https://github.com/pyvista/pyvista/pkgs/container/pyvista>`_ で見ることができます. ghcr.io/pyvista/pyvista:latest には JupyterLab がセットアップされており, ghcr.io/pyvista/pyvista:latest-slim は Jupyter を含まない軽量の Python 環境です.

注釈

Dockerレジストリを利用した作業 にある指示に従って,GitHubのコンテナレジストリにログインする必要があるかもしれません)

PyVista で独自のDockerコンテナを作成します#

PyVistaをこのディレクトリにクローンしcdでこのディレクトリに入り,独自のカスタマイズされたDockerイメージを作成します.

git clone https://github.com/pyvista/pyvista
cd pyvista/docker
IMAGE=my-pyvista-jupyterlab:v0.1.0
docker build -t $IMAGE .
docker push $IMAGE

jupyterlabでレンタルする際にオフスクリーンGPUをサポートさせたい場合は, VTKの構築 のEGLでのビルドに関する注意を参照するか, Release 0.27.0 のカスタムのプリビルドwheelを使用してください. pyvista/docker/jupyter.Dockerfile のDockerイメージを次のように変更して,カスタマイズしたvtk wheelをdockerイメージにインストールします.

COPY vtk-9.0.20201105-cp38-cp38-linux_x86_64.whl /tmp/
RUN pip install /tmp/vtk-9.0.20201105-cp38-cp38-linux_x86_64.whl

さらに,ホストマシンで実行されている同じバージョンのDockerイメージにGPUドライバをインストールする必要があります.例えば,Azure Kubernetes Serviceを実行していて,Kubernetesクラスタ上のGPUノードが 450.51.06 を実行している場合,同じバージョンをイメージにインストールする必要があります.基礎となるカーネル・モジュールを使用することになるので,コンテナー上にビルドする理由はありません(試行してもエラーになるだけです.).

COPY NVIDIA-Linux-x86_64-450.51.06.run nvidia_drivers.run
RUN sudo apt-get install kmod libglvnd-dev pkg-config -yq
RUN ./NVIDIA-Linux-x86_64-450.51.06.run -s --no-kernel-module

GPUでレンダリングしているかどうかを確認するには,まず nvidia-smi の出力をチェックします.

$ nvidia-smi
Sun Nov  8 05:48:46 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000001:00:00.0 Off |                    0 |
| N/A   34C    P8    32W / 149W |   1297MiB / 11441MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

ドライバのバージョン(これは実際にはカーネルドライバのバージョンです.)をメモし,それがdockerイメージにインストールしたバージョンと一致することを確認します.

最後に, ReportCapabilities を実行して,レンダーウィンドウがNVIDIAを使用していることを確認します.

>>> import pyvista
>>> pl = pyvista.Plotter()
>>> print(pl.render_window.ReportCapabilities())

OpenGL vendor string:  NVIDIA Corporation
OpenGL renderer string:  Tesla K80/PCIe/SSE2
OpenGL version string:  4.6.0 NVIDIA 450.51.06
OpenGL extensions:
  GL_AMD_multi_draw_indirect
  GL_AMD_seamless_cubemap_per_texture
  GL_ARB_arrays_of_arrays
  GL_ARB_base_instance
  GL_ARB_bindless_texture

display id not set を受信した場合,環境が正しく設定されていない可能性があります.