機械学習のための GPU 関連ライブラリの設定 (podman 利用)
機械学習のための GPU 関連ライブラリの設定 (venv 利用) が設定されているものとする.
docker は root 権限が実質的に必要なので,podman を使うことにする.
podman, NVIDIA Container Toolkit のインストール
$ sudo apt update $ sudo apt install podman nvidia-container-toolkit
CDI の設定
$ sudo mkdir /etc/cdi $ sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
確認
$ cat /etc/cdi/nvidia.yaml | grep "name:"
subuid の作成. ユーザ admin01 の場合の例.
# usermod --add-subuids 100000-165535 admin01
コンテナイメージの置き場をホームディレクトリ (NFS マウント) からローカルディスクへ変更する. NFS 上に保管するようにすると上手く動かない.
# vi /etc/containers/storage.conf [storage] driver = "overlay" graphroot = "/pool1/containers/storage" rootless_storage_path = "/pool1/containers/storage/$USER" [storage.options.overlay] mount_program = "/usr/bin/fuse-overlayfs" force_mask = "700" # vi /etc/containers/registries.conf unqualified-search-registries = ["docker.io"]
設定ファイルの指定
# vi /etc/profile.d/podman_strage.sh
if [ "\$USER" != "root" ]; then
# 設定ファイルのパスも固定
export CONTAINERS_STORAGE_CONF=/etc/containers/storage.conf
fi
ローカルディスクの設定
# mkdir -p /pool1/containers/storage # chmod 1777 /pool1/containers/storage
読み込まれる設定ファイルと,コンテナを保管する場所が正しくなっているかの確認.
$ podman info --format '{{.Store.ConfigFile}}'
/etc/containers/storage.conf
$ podman info --format '{{.Store.GraphRoot}}'
/pool1/containers/storage/admin01
テスト
インストールされていないコンテナ (以下の例では nvidia/cuda:12.1.1-runtime-ubuntu22.04) を指定すると, 自動的にコンテナイメージがダウンロードされる.
$ podman run --rm --device nvidia.com/gpu=all --security-opt label=disable \ nvidia/cuda:12.1.1-runtime-ubuntu22.04 nvidia-smi -L .... GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-f93bcfaf-8668-bf96-32af-d366fd13c746) GPU 1: NVIDIA A100 80GB PCIe (UUID: GPU-e4a7c3aa-06b3-fc2a-acd2-fea39b81b653) GPU 2: NVIDIA A100 80GB PCIe (UUID: GPU-6e8145c7-ae6c-040e-d958-2a1336caf70f)
NVIDIA Container Toolkit のバージョン情報は以下で確認できる
$ nvidia-container-cli info NVRM version: 565.57.01 CUDA version: 12.7 Device Index: 0 Device Minor: 0 Model: NVIDIA A100 80GB PCIe Brand: Nvidia GPU UUID: GPU-f93bcfaf-8668-bf96-32af-d366fd13c746 Bus Location: 00000000:3b:00.0 Architecture: 8.0 ...(以下, 略)...
docker version のバージョン情報は以下で確認できる
$ podman version
現時点でインストールされている docker イメージは以下のコマンドで取得できる.
$ podman images # docker images REPOSITORY TAG IMAGE ID CREATED SIZE nvidia/cuda 12.1.1-runtime-ubuntu22.04 0495908f9381 13 months ago 2.24GB
利用する GPU を指定する.
docker の --gpus オプションで GPU 番号を指定する.
adm01@ncsv2:~$ podman run --device nvidia.com/gpu=0 --rm nvidia/cuda:12.1.1-runtime-ubuntu22.04 nvidia-smi -L GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-f93bcfaf-8668-bf96-32af-d366fd13c746) adm01@ncsv2:~$ podman run --device nvidia.com/gpu=2 --rm nvidia/cuda:12.1.1-runtime-ubuntu22.04 nvidia-smi -L GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-e4a7c3aa-06b3-fc2a-acd2-fea39b81b653) adm01@ncsv2:~$ podman run --device nvidia.com/gpu=3 --rm nvidia/cuda:12.1.1-runtime-ubuntu22.04 nvidia-smi -L GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-6e8145c7-ae6c-040e-d958-2a1336caf70f)