[Omniverse] Omniverse環境でPyTorchを使えるようにする

  • by

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使用時も同様の手順で行けますが、これは次回解説します。