<aside> 🪄

Pixi Advent Calendar 2025 12日目の記事です。

</aside>

何をホストで, 何を仮想環境で管理するのか

pixi で PyPI package を管理する

で少し触れましたが, 最近の pytorch wheel では依存で cuda runtime (cudart )が一緒についてくるので, ホスト環境に必要なのは driver の install のみです. 従って, pip install torch --index-url <https://download.pytorch.org/whl/cu121> すれば特に問題なくCUDA(GPU)を使うことが出来ます.

<aside> ✳️

pypi pytorch の場合

<aside> 🔥

torch

torch-2.5.1+cu121-cp310-cp310-linux_x86_64.whl

</aside>

<aside> ✳️

cuda

nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl

libcudart.so

</aside>

<aside> 💻

<aside> 🪛

nvidia driver

nvidia.ko libnvidia.so

</aside>

</aside>

</aside>

仮想化の対象となるのは基本的にこの nvidia driver より上の層になります.

<aside> ✳️

pypi pytorch の場合

<aside> 🪄

pixi

<aside> 🔥

torch

torch-2.5.1+cu121-cp310-cp310-linux_x86_64.whl

</aside>

<aside> ✳️

cuda

nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl

</aside>

</aside>

<aside> 💻

<aside> 🪛

nvidia driver

nvidia.ko libnvidia.so

</aside>

</aside>

</aside>

<aside> ⚠️

CUDA は GPUデバイスを管理するための低レベルの Driver API と 抽象化されたインタフェースを提供する高レベルの Runtime API から構成されています.

CUDA application を実行するにはそれをビルドした CUDA version と互換性のある driver が必要です.(要は, 実行したい CUDA version に合わせて driver も更新が必要ということ)


image.png

https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compatibility-developer-s-guide

</aside>

よく見る docker image

DLFW 黎明期からこういう docker image を良く見ます. これはこれで良いのですが,

pip で入る torch は cuda 付属のため, 別にこのような base image を作らずとも良いのです.

FROM pytorch/pytorch:2.5.1-cuda${CUDA_VERSION}-cudnn9-devel 

<aside> ✳️

pytorch base image の場合

<aside> 🐳

docker

<aside> 🥌

base image

<aside> 🔥

pytorch

</aside>

<aside> ✳️

cuda

</aside>

</aside>

</aside>

<aside> 💻

<aside> 🪛

nvidia driver

</aside>

</aside>

</aside>

また, 折角 pyproject.toml に依存関係を記述して lock もしたのに, 依存 package をまた dockerfile に二重に記述しなければいけません. pyproject.tomlDockerfile で異なるバージョンのライブラリ, local と docker で計算結果が違う, 考えたくもありません.

<aside> 👼🏻

???「諦めないで….

FROM ghcr.io/prefix-dev/pixi:0.61.0

</aside>

な、何だこの見たこと無い base image は !??!?!?!?!?!?!?!?!(マジで何)(※ debian です)

pixi-dockerを使う

pixi 公式から, pixi の家 みたいな base image が配布されており, この base image の上で pixi 環境を再現することが想定されています. この場合は最低限 pixi.toml pixi.lock を渡せば, ローカルと Docker で全く同じ環境が再現されることになります.

GitHub