OmniverseではScript Editorがあるので、これを使ってPyTorchを操ると効率化できそうです。
まず、PyTorchをOmniverseで使うことができるかどうか試してみました。
PyTorchとは ?
PyTorch ( https://pytorch.org/ )は機械学習を行うためのライブラリです。
Pythonからアクセスできます。
最近流行りのテキストから画像生成をAIが行う「Stable Diffusion」( https://github.com/CompVis/stable-diffusion )のベース部分でも使用されています。
必要な環境構築の流れ
以下の手順で確認しています。
- Python環境のインストール
- CUDAのインストール
- PyTorchのインストール
- OmniverseでPyTorchを呼び出せるようにする
Windows 10上での操作で進めていきます。
最終的にOmniverse Create 2022.2.1でPyTorchを呼び出します。
なお、Omniverseは現状「Python 3.7.13」(Python37)を使用しています。
Pythonのバージョンは合わせる必要があります。
Python環境のインストール
Python環境は https://www.python.org/ よりバージョン別(Omniverseの場合は3.7.13)のPythonをインストールする方法があります。
別途、Anacondaを使う方法もあります。
Anacondaとは ?
参考 : https://www.python.jp/install/docs/pypi_or_anaconda.html
Anacondaとは、Pythonでよく使われるパッケージやライブラリをまとめてインストールしてくれます。
Python自身もAnaconda内に含まれています。
「仮想環境」で管理される構造になっており、これにより同一Pythonのバージョンでも環境ごとのパッケージやライブラリの依存関係を分けることができます。
同一PC上で複数のPythonを使ったプロジェクトを混在させる場合は、この「仮想環境」ごとに分かれていたほうが衝突が少なくなる場合も多いかもしれません。
このPythonをインストールするか、Anacondaをインストールするかを選びます。
同一PCに両方をインストールすることも可能です。
今回はPython単体をインストールしていきます。
Python 3.7のインストール
https://www.python.org/ のDownloads – Windowsをたどり「Python 3.7.13 – March 16, 2022」をインストールしました。
"K:\WinApp\Python37"にインストールしたとします。
Python37を起動するバッチファイルをテキストエディタで書きます。
「python37.bat」としました。
set PATH=K:\WinApp\Python37;K:\WinApp\Python37\Scripts;%PATH%
set PYTHONPATH=K:\WinApp\Python37\Lib\site-packages
%windir%\system32\cmd.exe
PATHにPythonのインストールフォルダと"\Scripts"フォルダ、
PYTHONPATHにPythonのインストールフォルダの"\Lib\site-packages"を指定する必要があります。
後で追加したPythonのパッケージやライブラリは"\Lib\site-packages"に追加されます。
このバッチをダブルクリックすると、コマンドプロンプトが表示されます。
python --version
と入力すると「Python 3.7.13」のように表示されます。
これでまずPythonをインストールできました。
CUDAのインストール
参考 : Windows10にPyTorch1.10とCUDA11.3の環境を作る
https://zenn.dev/opamp/articles/c5e200c6b75912
CUDA 11.3をインストール
CUDA 11.3をインストールします。
https://developer.nvidia.com/cuda-11-3-1-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local
より
OS : Windows
Architecture : x86_64
Version : 10
Installer Type : exe (local)
を選択してインストーラをダウンロードしてインストールします。
cuDNNのインストール
https://developer.nvidia.com/rdp/cudnn-download
より「cuDNN」をダウンロードします。
なお、NVIDIAの開発者登録(無料)を行っていないとダウンロードはできません。
「CUDA 11.x」のWindows版をダウンロードしました。zipファイルになります。
zipを解凍すると、bin,include,libフォルダとLICENSEファイルが展開されます。
このファイルをCUDA 11.3のインストールフォルダ(コマンドプロンプトで"where nvcc"と入力すると確認できます。デフォルトは"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3")
に上書きコピーします。
環境変数のパスを確認
インストール完了後、Windowsの環境変数でPATHをチェックします。
スタートメニューを開き「設定」を選択。
設定ウィンドウの左上の検索で「環境変数」と入力。
「システム環境変数の編集」を選択します。
「システムのプロパティ」ダイアログボックスで「環境変数」を選択。
「システム環境変数」に「CUDA_PATH」と「CUDA_PATH_V11_3」があるのが確認できます。
複数のCUDAがインストールされている場合、「CUDA_PATH」に現在のカレントのCUDAのパスを指定されています。
「CUDNN_PATH」も「CUDA_PATH」と同じであるのを確認します。
また、「Path」の先頭のほうに「CUDA_PATH」上のbinのパスとlibnvvpのパスが存在するのを確認します。
コマンドプロンプトで「nvcc -V」と入力。
以下のように表示されました。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
「Build cuda_11.3.r11.3」でCUDA 11.3がインストールされたのを確認できました。
コマンドプロンプトで「where cudnn64_8.dll」と入力。
以下のように表示されました。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\bin\cudnn64_8.dll
cuDNNがCUDA 11.3にインストールできているのを確認できました。
これでCUDAのインストールはOKです。
PyTorchのインストール
Python環境にPyTorchをインストールします。
インストールはPythonのpipを使います。
前述した「python37.bat」でPython37を使えるコマンドプロンプトを起動します。
このとき、管理者権限で「python37.bat」を起動するようにしてください。
pip list
と入力。
これで、pipでインストールされたパッケージが一覧されます。
このうち「torch」「torchaudio」「torchvision」というのがPyTorch関連のパッケージです。
torch 1.12.1+cu113
torchaudio 0.12.1+cu113
torchvision 0.13.1+cu113
と表示された場合、「cu113」でCUDA 11.3のGPUがPyTorchで使えるようになっています。
この場合はすでにCUDA 11.3用のPyTorchがインストール済みです。
「torch 1.12.1」みたいになってる場合はPyTorchはCPUでの動作になります。
この場合は、いったんtorchを削除します。
pip uninstall torch
pip uninstall torchaudio
pip uninstall torchvision
のようにすると、パッケージを削除できます。
PyTorchのインストールは https://pytorch.org/ を開いて下にスクロール。
オレンジのところをクリックしていき「Run this Command」を確認します。
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
となっていました。
これをコマンドプロンプトにコピー&ペーストします。
依存パッケージもダウンロードされてインストールされます。
再度「pip list」を実行し、
torch 1.12.1+cu113
torchaudio 0.12.1+cu113
torchvision 0.13.1+cu113
となっているのを確認します。
PyTorchのPythonでの確認
「torch_check.py」というPythonファイルを作成します。
以下のように記述しました。
import torch
print(torch.__version__)
print(torch.cuda.is_available())
これはPyTorchのバージョンとCUDAが使えるかを表示するだけのものです。
コマンドプロンプトで
python torch_check.py
と入力します。
以下のように出力されました。
1.12.1+cu113
True
これで、PyTorchが使用でき、かつ、CUDAも有効なことを確認できました。
OmniverseでPyTorchを呼び出せるようにする
Omniverse Create 2022.2.1を使用しました。
Omniverse CreateのScript EditorでPyTorchを使えるようにします。
今までの作業で"K:\WinApp\Python37"にPython37を入れていました。
このときの"K:\WinApp\Python37\Lib\site-packages"がPYTHONPATHとなっています。
ここにpipでインストールしたパッケージは格納されています。
これをPythonの検索パスとして加える必要があります。
Script Editorで「import torch」と入力して実行すると、パッケージへのパスが通ってないためエラーになります。
Pythonの検索パスは「sys.path.append」を使って追加できます。
Script EditorでTabを追加し、
以下のようなプログラムをScript Editorに書いて実行しました。
import sys
import os
# Append path.
def appendSysPath (newPath):
existF = False
for path in sys.path:
if path == newPath:
existF = True
break
if existF:
return
sys.path.append(newPath)
appendSysPath("K:\WinApp\Python37\Lib\site-packages")
再び「import torch」を実行すると、今度はエラーは出てきませんでした。
import torch
print(torch.__version__)
print(torch.cuda.is_available())
を実行します。
PyTorchおよびCUDAの認識を確認できました。
後は、PyTorchの作法に乗っ取ればOmniverseでもPyTorchでいろいろできそうですね。
(といいつつ、筆者はそこの知識はない)
ExtensionでPyTorchを使う場合は、
Extension開始時にon_startupが呼ばれるため、ここでsys.path.appendを使ってPythonパッケージの検索パスを追加するのがよいかと思います。
とりあえず今回はここまでです。
Anaconda使用時も同様の手順で行けますが、これは次回解説します。