Skip to content

Instantly share code, notes, and snippets.

@kekyo
Last active April 20, 2025 12:22
Show Gist options
  • Save kekyo/96ee3328a0fedb462794ed91cede1a96 to your computer and use it in GitHub Desktop.
Save kekyo/96ee3328a0fedb462794ed91cede1a96 to your computer and use it in GitHub Desktop.
Ubuntu podmanでCUDAを有効化する方法

CUDA on Ubuntu podman container

Ubuntu host configuration

podmanでCUDAをコンテナ実行するためのホストマシンを0からセットアップする。筆者はCI/CD環境を整えるために物理サーバーマシンを用意して作業した。 これで ga_runner でGitHub ActionsでCUDAがお手軽に使えるようになる(はず。今後確認したら追記)

ホスト環境は: Intel(R) Core(TM) i7-10700T CPU, 64GB mem, NVIDIA GeForce RTX 4060 Ti 16GB

  • Ubuntu 24.04.2では、インストール時に3rd party driversを有効化してしまうと、NVIDIA driver 550がインストールされる。これは非常に不安定であり、クリーンインストール直後であってもWaylandがクラッシュして復帰が難しい問題がある(将来的に改善される可能性はある)。
  • これを回避しようと Ubuntu 22.04系列を使うと、podmanが古くて後述のCDIが使えないので注意。
  • そこで、24.04.2はsafe graphics modeでインストールを行い、3rd party driversのチェックを外してインストールする。インストール後にapt update, apt upgradeでパッケージを更新して、それからAdditional driversアプリケーションで、NVIDIA driverの570以降を手動でインストールすると回避できる。
  • NVIDIA driverは、oss driverとproprietary driverがあるが、properietary driverしか試していないので、oss driverでもCUDAやCDIが動くかどうかは不明。

Install CUDA toolkit

CUDAをホスト環境で使用可能にする。

  • 基本的にこのドキュメントの通りやる。最後のステップのドライバ更新は不要: https://developer.nvidia.com/cuda-downloads
  • 以下のコマンドでGPUが見えることを確認。もしanaconda環境などで実際のCUDAの実行確認が出来るならなお良い:
    $ nvidia-smi -L
    GPU 0: NVIDIA GeForce RTX 4060 Ti (UUID: GPU-15e793d7-7365-2265-986b-3edf727993ad)

ここまでで、ホスト側のCUDAは使用可能になった。コンテナを使わずにanacondaとかで直接CUDAする場合は、これ以降の作業は不要。

Install container toolkit

これを入れることで、dockerやCDI対応のコンテナエンジンで、コンテナ内部からCUDAが使えるようになる。

  • 基本的にこのドキュメントの通りやる。dockerはインストールしないので、ここではdockerによる確認は行わない: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
  • toolkitインストール後はCDIの有効化ステップを実行する。手順はここ: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html
  • CDIが有効化されていれば、podmanのコンテナ内からCUDAが使えるはず。以下のコマンドで確認するようにドキュメントには書かれているが、これはnvidia-smiコマンドなので、GPUの存在が確認出来るだけ(CUDAで計算をしていない)であることに注意:
    $ podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable ubuntu nvidia-smi -L
    Resolved "ubuntu" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
    Trying to pull docker.io/library/ubuntu:latest...
    Getting image source signatures
    Copying blob 2726e237d1a3 done   | 
    Copying config 602eb6fb31 done   | 
    Writing manifest to image destination
    GPU 0: NVIDIA GeForce RTX 4060 Ti (UUID: GPU-15e793d7-7365-2265-986b-3edf727993ad)
  • 実際にCUDAを使う例として、YOLO11でサンプル画像の学習を実行する例。これはYOLO11のドキュメントに書かれているdockerを使う例をpodmanに置き換えている。podmanに与える引数はCDI準拠となるためdockerとは多少異なる。その他に共有メモリのエラーが発生するので広げるオプション--shm-sizeも追加している:
    $ t=docker.io/ultralytics/ultralytics:8.3.104
    $ podman run --rm -it --shm-size=256m --device nvidia.com/gpu=all --security-opt=label=disable $t
    root@99a089c7bf03:/ultralytics# yolo train data=coco8.yaml model=yolo11n.pt epochs=10 lr0=0.01
    
        : 
    
          Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
          10/10      0.83G     0.9703       1.79      1.241         13        640: 100%|██████████| 1/1 [00:00<00:00, 14.01it/s]
                     Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 34.5
                       all          4         17      0.649       0.85      0.863      0.628
    
    10 epochs completed in 0.002 hours.
    Optimizer stripped from /ultralytics/runs/detect/train/weights/last.pt, 5.5MB
    Optimizer stripped from /ultralytics/runs/detect/train/weights/best.pt, 5.5MB
    
    Validating /ultralytics/runs/detect/train/weights/best.pt...
    Ultralytics 8.3.104 🚀 Python-3.11.11 torch-2.6.0+cu126 CUDA:0 (NVIDIA GeForce RTX 4060 Ti, 15950MiB)
    YOLO11n summary (fused): 100 layers, 2,616,248 parameters, 0 gradients, 6.5 GFLOPs
                     Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 45.6
                       all          4         17      0.625       0.85      0.888      0.655
                    person          3         10      0.611        0.6      0.603      0.287
                       dog          1          1      0.553          1      0.995      0.796
                     horse          1          2      0.731          1      0.995      0.674
                  elephant          1          2      0.386        0.5      0.745      0.283
                  umbrella          1          1      0.589          1      0.995      0.995
              potted plant          1          1      0.878          1      0.995      0.895
    Speed: 0.3ms preprocess, 1.8ms inference, 0.0ms loss, 0.6ms postprocess per image
    Results saved to /ultralytics/runs/detect/train
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment