プログラミングとかLinuxとかの備忘録

プログラミング、Linuxでハマった箇所や環境構築のメモ

PodmanでNVIDIA Container Toolkitを動かす

CUDAが正常に動いているUbuntu 24.04.2 LTSで以下の手順でセットアップした.

必要なパッケージのインストール

NVIDIA公式サイトの手順通りに作業を行う.

$ sudo apt update
$ sudo apt install --no-install-recommends curl gnupg2

リポジトリの追加

$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

パッケージリスト更新

$ sudo apt update

パッケージのインストール

$ export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1
$ sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

Container Device Interface (CDI)の設定

$ nvidia-ctk cdi list
INFO[0000] Found 0 CDI devices

となり,CDIバイスが見つからなかった.

  • nvidia-cdi-refreshサービスが自動的に/var/run/cdi/nvidia.yamlを生成してくれるようなので,PCを再起動.
  • sudo systemctl restart nvidia-cdi-refresh.serviceでサービスを再起動して自動生成(参考).

でもCDIバイスが見つからない状態だったため,NVIDIA公式ページにかかれている通り,直接コマンドを実行して生成.

$ sudo nvidia-ctk cdi generate --output=/var/run/cdi/nvidia.yaml

すると接続しているGPU2台分見つかった.

$ nvidia-ctk cdi list
INFO[0000] Found 5 CDI devices
nvidia.com/gpu=0
nvidia.com/gpu=1
nvidia.com/gpu=GPU-258fe8fe-2cd4-ad3d-221a-948ba4d376e3
nvidia.com/gpu=GPU-e6101b02-b410-8a5a-84e9-8cfca6ec344d
nvidia.com/gpu=all

Podmanコンテナの実行テスト

$ podman run --rm --device nvidia.com/gpu=all docker.io/nvidia/cuda:12.9.1-cudnn-runtime-ubuntu24.04 nvidia-smi

Ubuntu24.04.2 LTSへのPodmanのインストール

aptでインストール

$ sudo apt update
$ sudo apt install podman podman-compose

trueになっていればrootless

$ podman info | grep rootless
    rootless: true

Warningの削除

podman psとかを実行すると

WARN[0000] Network file system detected as backing store.  Enforcing overlay option `force_mask="700"`.  Add it to storage.conf to silence this warning

のWarningが出ていたので,~/.config/containers/storage.confを作成して,下記を追記し,Warningが出ないように設定を変更した.

[storage]
driver = "overlay"

[storage.options]
mount_program = "/usr/bin/fuse-overlayfs"

[storage.options.overlay]
force_mask="0700"

これ以下は一般的には不要な手順

ホームディレクトリがNFS上にある場合

NFSのアクセス制限の設定によっては,下のようなエラーが出てpodman runが途中で止まる.

Error: copying system image from manifest list: writing blob: adding layer with blob "sha256:32f112e3802cadcab3543160f4d2aa607b3cc1c62140d57b4f5441384f40e927": processing tar file(lsetxattr /boot: operation not supported): exit status 1

これはPodmanのイメージがホームディレクトリ下に保存されることが原因なため,NFS共有されていないストレージに保存場所を変更すると解決できる. ~/.config/containers/storage.confを編集して,graphrootをローカルHDD等に変更する(<USER>はユーザ名等に置き換える).

[storage]
+ graphroot = "/mnt/hdd/<USER>/podman"

コンテナ内でapt-getを実行できない場合

apt-getを実行すると,下記のようなエラーが表示され実行できない場合の対策

E: setgroups 65534 failed - setgroups (1: Operation not permitted)
E: setegid 65534 failed - setegid (22: Invalid argument)
E: seteuid 42 failed - seteuid (22: Invalid argument)
E: setgroups 0 failed - setgroups (1: Operation not permitted)
...

subuid,subgidを設定する必要がある.UID=1234の場合は,

$ sudo usermod --add-subuids 123400000-123465535 --add-subgids 123400000-123465535 ユーザ名
$ podman system migrate

とするとうまく動くようになる.

CentOS Stream9でdockerを動かす

Dockerのインストール

Podmanとかを削除

$ sudo dnf remove podman runc

ここからは公式の情報dnfに置き換えて実行していく。

リポジトリを追加

$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

インストール

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

$ docker --version
Docker version 20.10.18, build b40c2f6

サービスの起動

$ sudo systemctl enable docker
$ sudo systemctl start docker

dockerグループにユーザを追加する

$ sudo gpasswd -a ユーザ名 docker

ログインし直すと

$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

docker-composeのインストール

最新バージョンをdocker/compose - GitHubで確認してcurlでコピーする

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

パーミッションを設定

$ sudo chmod 0755 /usr/local/bin/docker-compose

確認

$ docker-compose --version
Docker Compose version v2.10.2

UNKNOWN attributeDescription "AUTOMOUNTINFORMATION" insertedの原因

OpenLDAPサーバーにうまくつながらず、調べてみると

$ sudo slapcat > /dev/null
6226d131 UNKNOWN attributeDescription "AUTOMOUNTINFORMATION" inserted.

と警告文が出ていた。

9.4.4. LDAP を使用した自動マウント機能マップの格納 Red Hat Enterprise Linux 6 | Red Hat Customer Portal を見る限りおそらくAutoFS(使っていない)の設定が原因っぽい。

とりあえずAutoFS関連のパッケージを削除するとつながるようになった。

$ sudo apt purge autofs autofs-ldap

警告文の仕方はわからなかった...

RTX3090+Ubuntu20.04でPyTorchを動かす

RTX3090 + Ubuntu20.04でPyTorch-1.7.0が動いたので、メモ.

ドライバのインストール

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt install nvidia-driver-455

インストール後に再起動

$ sudo reboot

CUDA-11.1のインストール

RTX3000シリーズはCUDA11にしか対応してない?

CUDA Toolkit 11.1 Update 1 Downloads | NVIDIA Developerの通りにコマンドを実行する

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda

cuDNN-8.0.5のインストール

NVIDIA cuDNN | NVIDIA DeveloperDownload cuDNNからダウンロードしてきたlibcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.debをインストールする。

$ sudo apt install -y ./libcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.deb

PyTorchのインストール

PyTorchのGet Startedページ

を選んで出てきたコマンドを実行する

$ pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

これでRTX3090+Ubuntu20.04+PyTorch1.7.0が動いた。

FreeBSD 12.1の初期設定

suを使えるようにする

suを使いたいユーザをwheelグループに追加する

$ vi /etc/group
- wheel:*:0:root
+ wheel:*:0:root,kento

パッケージのアップデート、必須パッケージのインストール

$ su
# pkg update
# pkg install sudo bash vim

sudoの設定

$ su
# visudo
- # %wheel ALL=(ALL) ALL
+ %wheel ALL=(ALL) ALL

デフォルトシェルをbashに変更

$ chsh -s /usr/local/bin/bash

IP固定

DHCPで下のように設定されていたものを固定割当に変更する

$ ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
    ether 08:60:6e:6e:d5:27
    inet 192.168.1.6 netmask 0xffffff00 broadcast 192.168.1.255
    media: Ethernet autoselect (1000baseT <full-duplex,master>)
    status: active
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

rcファイルを編集する

$ sudo vim /etc/rc.conf
- ifconfig_re0="DHCP"
+ ifconfig_re0="inet 192.168.1.6 netmask 255.255.255.0 broadcast 192.168.1.255
+ defaultrouter="192.168.11.1"

DNSはインストール時のまま変更する必要がなかった

$ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.1.1

Arch LinuxでKVMを動かす

環境

  • CPU: Ryzen 3600
  • Kernel: 5.8.13-arch1-1
$ LC_ALL=C lscpu | grep Virtualization
Virtualization:                  AMD-V

の通り、AMD-Vで仮想化がサポートされている

インストール

$ sudo pacman -S qemu libvirt virt-manager virt-viewer

自動起動

$ sudo systemctl start libvirtd
$ sudo systemctl enable libvirtd

IOMMUの有効化

bootオプションにamd_iommu=oを追加する

$ sudo vim /boot/loader/entries/arch.conf
- options root=PARTUUID=296bb6cc-2a3f-45d4-a3ad-9e8041d75903 rw
+ options root=PARTUUID=296bb6cc-2a3f-45d4-a3ad-9e8041d75903 rw amd_iommu=on

編集後に再起動する

$ sudo reboot

dmesgを確認し下のような出力が出てこればIOMMUが有効化されている

$ dmesg | grep IOMMU
[    0.395281] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    0.395282] AMD-Vi: AMD IOMMUv2 functionality not available on this system

virt-managerの起動

$ sudo virt-manager

とするとroot権限でVirtManagerが起動できるはず。