!
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
を受信した場合,環境が正しく設定されていない可能性があります.