コンテンツにスキップ

pixi を触ってみた

複数の OS や CPU/GPU 環境に対応したパッケージマネージャー pixi を試し、基本設定と CUDA のサンプルで出たエラーを紹介します。CUDA を依存関係へ追加する手順は資料からの引用で、手元では未検証です。

pixi とは

pixi は、 既存の conda エコシステム上に構築された高速ソフトウェア パッケージ マネージャーです。Windows、macOS、Linux で開発環境を迅速に立ち上げます。

自動ロックファイルは、オペレーティング システム間で再現可能な環境を生成します ( Docker なしでも! )。

pixi は、Python、R、C/C++、Rust、Ruby など、多くの言語をサポートしています。

— pixi

Python プロジェクトをサポートする機能として、pyproject.toml形式で環境を管理できます。依存関係の解決やインストールにはuvが使われています。

pixi は複数環境の管理をサポートしており、CPU/GPU、Linux/macOS/Windows などの異なる環境ごとに環境を構築できます。

setup

curl -fsSL https://pixi.sh/install.sh | bash

サンプルの実行

CUDA を使う例が公式リポジトリにあるので、これを実行してみます。

pixi run --env cuda python

実行したマシンには NVIDIA GPU もドライバーもなく、次のエラーで停止しました。この例は__cudaが 12.1 以上の環境を要求しています。

  × The platform you are running on should at least have the virtual package __cuda on version 12.1, build_string: 0

__cudaは、NVIDIA ドライバーが対応する CUDA の版を表す仮想パッケージです。CUDA Toolkit のインストール状況とは異なります。ドライバーの対応状況を使う仕組みは、conda の仮想パッケージの説明と、pixi の System Requirementsで確認できます。

CUDA パッケージを依存関係に追加する

CUDA ランタイムや Toolkit は、conda-forge からプロジェクトの依存関係として取得できます。ここからは、その追加手順を参考リンクから引用します。実行結果も同リンクのもので、筆者の環境では未検証です。

まずpixi searchで、追加できる版と依存関係を確認します。次の出力からチェックサムや URL は省きました。

pixi-faiss-gpu [main●●] % pixi search cuda
Using channels: conda-forge

cuda-12.6.3-ha804496_0 (+ 3 builds)
-----------------------------------

Name                cuda
Version             12.6.3
Subdir              noarch

Dependencies:
 - __linux
 - cuda-runtime 12.6.3.*
 - cuda-toolkit 12.6.3.*

依存先としてcuda-runtimeとcuda-toolkitも付いてきますが、pixi がまとめて解決します。あとは版を指定して追加すると、pixi.tomlの依存関係に加わります。

pixi-faiss [main●●] % pixi add cuda=12
✔ Added cuda=12

pixi addで追加すれば、CUDA パッケージの版をプロジェクト単位で管理できます。ただし、これで GPU やマシン側のドライバーが用意されるわけではありません。前節のエラーを解消して GPU で実行するには、対応する GPU とドライバーを備えた環境が必要です。

まとめ

pixi は conda エコシステムの上で動き、pyproject.toml形式の環境管理と、CPU/GPU や OS ごとの複数環境の切り替えに対応しています。今回の CUDA サンプルは、GPU とドライバーのない環境では実行できませんでした。CUDA パッケージを追加する手順は未検証であり、実行にはパッケージの依存関係だけでなく、マシン側の条件も満たす必要があります。