<aside> 🪄
Pixi Advent Calendar 2025 12日目の記事です。
</aside>
で少し触れましたが, 最近の 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 も更新が必要ということ)
libcudart.so, libraries) — ↑ pypi | conda | docker で管理nvidia.ko — ↓ ホストで管理libcuda.so
</aside>
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.toml と Dockerfile で異なるバージョンのライブラリ, local と docker で計算結果が違う, 考えたくもありません.
<aside> 👼🏻
???「諦めないで….」
FROM ghcr.io/prefix-dev/pixi:0.61.0
</aside>
な、何だこの見たこと無い base image は !??!?!?!?!?!?!?!?!(マジで何)(※ debian です)
pixi 公式から, pixi の家 みたいな base image が配布されており, この base image の上で pixi 環境を再現することが想定されています. この場合は最低限 pixi.toml pixi.lock を渡せば, ローカルと Docker で全く同じ環境が再現されることになります.