今回のポイント
pipではなく、pipenvを使う場合、PyTorchのインストールコマンドを少し修正する必要があるが、修正のポイントを明示する。
- [o]
pipenv install ... --index <URL>
--- これを使うこと - [x]
pipenv install ... --extra-index-url <URL>
--- セキュリティリスクのために利用できなくなっている - [x]
pipenv install ... --index-url <URL>
--- こちらも利用できず、エラーになる
Windows11での例を提示するが、基本Linuxでも同じ(WSL2のUbuntuでも同じ)
ネット上で検索すると古い書式で実行しようとして躓いている記事が散見されるし、ChatGPT等の生成AIも間違えて教えてくれるので、厄介。
※2022年3月23日にセキュリティリスクのために変更されたとあり、当方では2023年10月の時点でインストール方法が変化したことを確認している。
-
Specifying Package Indexes
https://pipenv.pypa.io/en/latest/indexes.html -
GUIDE: How to install PyTorch via Pipenv (and how to add other 3rd Party Repositories). #4961
https://github.com/pypa/pipenv/issues/4961
※上記URLの2022/08/25の記事以降に記載されています。
Pipenvでの仮想環境の入った[.venv]フォルダを仮想環境フォルダ内に設置する方法も併記した。
前準備
- GPUのドライバを最新版にしておく
https://www.nvidia.com/ja-jp/drivers/ - 搭載されているGPUに応じて制約を確認する
https://developer.nvidia.com/cuda-gpus - ドライバのバージョンにて利用可能なCUDAのバージョンをチェックする。
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - Pythonのインストール(インストールされていない場合)
https://www.python.org/
※初回のインストールの場合「Add Python *** to PATH」にチェックを入れてインストールすること!!
Pipenv関連の設定
1. pipのアップグレード
python -m pip install --upgrade pip
※Linuxの場合
python3 -m pip install --upgrade pip
2. 初めてPipenvを使う場合
2-1. pipenvのインストール
pip install pipenv
2-2. pipenvの環境変数設定
環境変数「PIPENV_VENV_IN_PROJECT」を「True」に設定
設定変更手順
【Windowsスタート・右クリック】→【システム】
→(画面内)【システムの詳細設定】
→【システムのプロパティ】ダイアログ表示
→(右下)【環境変数...】
→【環境変数】ダイアログ表示
→【システム環境変数】→【新規...】にて
変数名: PIPENV_VENV_IN_PROJECT
変数値*: True
と設定する。*boolean属性なのでTrueの代わりに、true, yes, 1 ないし on でも良い。設定解除は false, no, 0, ないし off になる
参考:PIPENV_VENV_IN_PROJECTの設定詳細
※既にpipenvを使っていて「Pipfile」および「.venv」が「c:/users/[利用者]/」直下に存在する場合には、無理に切り換えないこと。
どうしても切り換えたい場合
- 「c:/users/[利用者]/Pipfile」を利用中の仮想環境フォルダ内にコピー
-
pipenv --rm
で切替前の仮想環境を削除 - 「c:/users/[利用者]/Pipfile」を削除(※)
- 下記手順で「PIPENV_VENV_IN_PROJECT」環境変数を設定(ないし変更)して切替
- 切替後、利用中の仮想環境フォルダに入り
pipenv install
を実行すればコピーしておいた「Pipfile」の設定に従って「.venv」が利用中の仮想環境フォルダに再構築される。
[※削除しないと落とし穴にはまります]
pipenvでプロジェクトを初期作成しようとするとあらぬところにvenvフォルダが生成される.
[※仮想環境がどこにあるか不明な場合は下記を参照のこと]
[小ネタ]pipenvのvenvとPipfileの対応を確認して不要なものを消したい
3. pipenvのアップグレード(2回目以降にPipenvを使う場合)
pip install -U pipenv
4. 切り換えたいPythonのインストール
https://www.python.org/
切り換えたいPythonは予めWindowsにインストールしておく。
※Linuxの場合pyenv等で切り換えたいバージョンのPythonをインストールしておく。
最新のPythonを(追加)インストールする場合、パスを環境変数へ追加するように設定しておく必要がある。
設定関連の詳細
- インストール時に【Add Python *** to PATH】にチェックを入れる(オプション指定時であれば【add python to environment variables】にチェックを入れる)
- インストール後に「修正インストール」で後から修正も可能。
以前の(インストール済みよりも古い)バージョンを追加インストールする場合、パスを環境変数へは追加しない。
設定関連の詳細
- 【Add Python *** to PATH】のチェックは外しておく
- オプション指定時であれば【add python to environment variables】のチェックは外しておく
※仮想環境外では「py」コマンド(py.exe)で起動するpythonを切り換えることができるが、pathの設定を変えるものではない。
[参考]
https://qiita.com/landwarrior/items/1b5e0f9af5316a025fe0
https://qiita.com/mkgask/items/d741578efb13aac7db0e
5. Pipenv --python [バージョン] にて仮想環境構築
仮想環境を構築するフォルダを新たに作成し、該当フォルダに移動し、構築用コマンドを実行する。
Python 3.12.*** を使う仮想環境を構築したい場合、
mkdir [仮想環境構築用ディレクトリ名]
cd [仮想環境構築用ディレクトリ名]
pipenv --python 3.12
PyTorchのインストール
PyTorchのサイトにて自身の環境に合うインストールコマンドを入手する。
※WSL2でのUbuntuの場合にはOSに【Linux】を指定する。
https://pytorch.org/get-started/locally/
PyTorch Build: 【Stable(***)】
YourOS: 【Windows】
Package: 【Pip】
Language: 【Python】
Compute Platform: 【CUDA ***】← 自身の環境に応じたバージョン、ないしCPUを選択
上記にて表示される【Run this Command】の 「pip3」を「pipenv」に変更し、さらに「-url」を削除したコマンド を実行する。(urlが入らない形式の場合、「pip3」を「pipenv」に修正するだけで良い)
例
[修正前]
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
[修正後]
pipenv install torch torchvision torchaudio --index https://download.pytorch.org/whl/cu118
※Pytorchの場合、システムにインストールされているCUDAとは無関係に上記のコマンドで指定されたCUDAが仮想環境内にインストールされ、自動的に切り替わってくれる。
※インストール時の画面(例)
仮想環境構築後のテスト
構築した仮想環境に入る。
cd [構築した仮想環境のフォルダ]
pipenv shell
下記を実行する。
import torch
cuda_is_available = torch.cuda.is_available()
print(f'torch_version = {torch.__version__}')
print(f'cuda_available = {cuda_is_available}')
if cuda_is_available:
print(f'cuda_device_count = {torch.cuda.device_count()}')
print(f'cuda_GPU_Num = {torch.cuda.current_device()}')
print(f'GPU_Name = {torch.cuda.get_device_name()}')
print(f'GPU_Compute_Capability = {torch.cuda.get_device_capability()}')
python cuda_check.py
実行例
※PythonおよびCUDAの異なるバージョンを構築した場合の例
PS:tc241p311cu118 > pipenv shell
Launching subshell in virtual environment...
PowerShell 7.4.5
[venv]PS:tc241p311cu118 > python cuda_check.py
torch_version = 2.4.1+cu118
cuda_available = True
cuda_device_count = 1
cuda_GPU_Num = 0
GPU_Name = NVIDIA GeForce RTX 3090
GPU_Compute_Capability = (8, 6)
[venv]PS:tc241p311cu118 > exit
PS:tc241p311cu118 > cd ..\tc241p312\
PS:tc241p312 > pipenv shell
Launching subshell in virtual environment...
PowerShell 7.4.5
[venv]PS:tc241p312 > python cuda_check.py
torch_version = 2.4.1+cu121
cuda_available = True
cuda_device_count = 1
cuda_GPU_Num = 0
GPU_Name = NVIDIA GeForce RTX 3090
GPU_Compute_Capability = (8, 6)
[venv]PS:tc241p312 >
pipenv仮想環境のセキュリティチェック
インストール前にはライブラリが正規のものか、インストール後にはライブラリの脆弱性を確認すること。
pipenv check
オプション類については下記を参照
=== 2024/10/06 10:33 追記 ===
念のため、PyTorch環境をチェックしてみたら、ver2.4.0, ver2.4.1にて脆弱性が含まれていることが判った。
分散トレーニングを開始するマスター ノードが侵害され、機密性の高い AI 関連データが盗まれる可能性
Ver2.2以降へのアップデートで対応可能なような記述だが、脆弱性がFixされたという情報にはなっておらず、そのまま持続している様子。
https://data.safetycli.com/v/71670/742/
https://jp.tenable.com/plugins/nessus/200978
https://huntr.com/bounties/39811836-c5b3-4999-831e-46fee8fcade3
生成AIが提示する「誤ったコマンドの例」
※正しくは[--index <URL>
]で、少なくとも本記事執筆時の1年前には変更されている。現時点で下記の状況であり、そのうちに変化するだろうけれど、生成AIが如何に表在的な情報のみに頼ってコードを検証していないかの実録としてここに記録しておく。
ChatGPT-4o, Gemini-1.5Flash, Microsoft Copilot
[--extra-index-url <URL>
]
Claude 3.5 Sonnet
[--index-url <URL>
]
【参考資料】
- https://www5.dent.niigata-u.ac.jp/~nisiyama/grad/python/pipenv-sys-install-GPU-j.pdf
- https://www5.dent.niigata-u.ac.jp/~nisiyama/grad/Pipenv-PyTorch.pdf
- Specifying Package Indexes
https://pipenv.pypa.io/en/latest/indexes.html - GUIDE: How to install PyTorch via Pipenv (andhow to add other 3rd Party Repositories). #4961
https://github.com/pypa/pipenv/issues/4961 - 【図で理解】PipenvによるPython仮想環境の管理
https://qiita.com/mtitg/items/3aa5e5c6d1c1cf6fd3c2 - Pipenv Commands
https://pipenv.pypa.io/en/latest/commands.html