ONNX Runtime(GPU版)のインストール

ONNX Runtime(GPU版)のインストール 機械学習

「ONNX形式のモデルをもっと速く処理(推論)したい」
「ONNX RuntimeをGPUで起動させたい」

このような場合には、この記事の内容が参考になります。
この記事では、GPU版のONNX Runtimeをインストールする方法を解説しています。

本記事の内容

  • ONNX Runtime(GPU版)とは?
  • ONNX Runtime(GPU版)のシステム要件
  • ONNX Runtime(GPU版)のインストール
  • ONNX Runtime(GPU版)の動作確認

それでは、上記に沿って解説していきます。

ONNX Runtime(GPU版)とは?

ONNX Runtimeとは、クロスプラットフォームの高性能ML推論・学習アクセラレータです。
そして、GPU対応したモノがONNX Runtime(GPU版)となります。

TensorFlowで学習したモデルをONNX形式にしておけば、ONNX Runtimeで動きます。
同じように、PyTorchで学習したモデルをONNX形式にしておけば、ONNX Runtimeで動きます。

機械学習の仕組みを外部に公開する場合、ONNX形式にした方が無難だと言えます。
その方が、多くの人に使ってもらう機会が増えりる可能性がUPします。

そうやって公開されたプロジェクトの例は、以下。

これらはCPUでも動くと言えども、やはりGPUで動かしたいです。
絶対にGPUで動かす方が、高速に処理できますからね。

このような場合に、ONNX Runtime(GPU版)が求められることになります。

以上、ONNX Runtime(GPU版)について説明しました。
次は、ONNX Runtime(GPU版)のシステム要件を説明します。

ONNX Runtime(GPU版)のシステム要件

現時点(2022年8月末)でのONNX Runtime(GPU版)の最新バージョンは、1.12.1となります。
この最新バージョンは、2022年8月5日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

このサポート状況は、以下のPython公式開発サイクルに準じています。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

これは、ONNX Runtimeの開発が行き届いていることを証明しています。
ここまでは、ONNX Runtime(GPU版)のシステム要件はPython 3.7以降であればOKという内容です。

ONNX Runtime(GPU版)のシステム要件で最も重要なことは、以下になります。

  • CUDA
  • cuDNN

これらのバージョンを注意しないといけません。
ONNX Runtime 1.12系であれば、それぞれ次のバージョンが必要となります。

CUDA11.4
cuDNN8.2.4 (Linux)8.2.2.26 (Windows)

ONNX RuntimeとCUDA・cuDNNの依存関係は、次のページで説明されています。
https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements

では、これらのインストールについて以下で説明します。

CUDAのインストール

CUDAのインストールは、次の記事で解説しています。

すでに、私の環境ではCUDAを複数インストール済みでした。
このような環境の人も多いことでしょう。

CUDA 11.4は、たまたまインストールされていない状態です。

上記記事に従い、インストールを進めます。
まずは、該当するバージョンのCUDAのダウンロードからです。

CUDA Toolkit Archive | NVIDIA Developer
https://developer.nvidia.com/cuda-toolkit-archive

上記ページへアクセス。

CUDA 11.4をインストールした結果、環境変数のPathは次のようになりました。

cuDNNのインストール

検証では、Windowsを対象としています。
そのため、cuDNN 8.2.2.26をインストールします。

cuDNNのダウンロードは、次のページから可能です。

cuDNN Download | NVIDIA Developer
https://developer.nvidia.com/rdp/cudnn-download

ただし、ダウンロードにはNVIDIA Accountsでのログインが必要となります。
アカウントを作成して、ログインしましょう。

もしアカウントを作成するのが面倒なら、次のページへアクセスします。

cuDNN Archive | NVIDIA Developer
https://developer.nvidia.com/rdp/cudnn-archive

最新版のcuDNNが必要であれば、ログインは必須です。
過去バージョンであれば、ログインは不要になります。

ONNX Runtime(GPU版)で必要となるのは、cuDNNの過去バージョンです。
ちょっとした抜け道みたいなモノと言えます。

アーカイブページでは、多くのバージョンが公開されています。

この中から、 CUDA 11.4用のcuDNNを選択。
各OS用のダウンロードリンクが、表示されます。

ここでは、Windows用を選択してダウンロード。
ダウンロードしたzipファイルを解凍すると、次のようなファイルを確認できます。

この3つのフォルダをCUDA 11.4のインストール先にコピーします。
以下のような構成となっています。

コピーしようとすると、次のような警告が表示される場合があります。

この場合は、管理者権限で起動したPowerShellからコピーしましょう。
おそらく、この方法が最も簡単です。

Windowsマークを右クリックして、メニューを表示させます。
その中から、「Windows PowerShell(管理者)」を選択。

これにより、PowerShellが管理者権限で起動します。
そして、解凍したディレクトリ(cudaまで)へ移動。

移動できたら、フォルダを強制上書きします。

> Copy-Item bin 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4' -Force -Recurse 
> Copy-Item include 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4' -Force -Recurse 
> Copy-Item lib 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4' -Force -Recurse

これで、cuDNNのインストールは完了となります。

以上、ONNX Runtime(GPU版)のシステム要件を説明しました。
次は、ONNX Runtime(GPU版)のインストールを説明します。

ONNX Runtime(GPU版)のインストール

検証は、次のバージョンのPythonで行います。

> python -V 
Python 3.10.4

まずは、現状のインストール済みパッケージを確認しておきます。

> pip list 
Package    Version 
---------- ------- 
pip        22.2.2 
setuptools 65.3.0 
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、ONNX Runtime(GPU版)のインストールです。
ONNX Runtime(GPU版)のインストールは、以下のコマンドとなります。

pip install onnxruntime-gpu

ONNX Runtime(GPU版)のインストールは、少しだけ時間がかかります。
終了したら、どんなパッケージがインストールされたのかを確認します。

> pip list 
Package         Version 
--------------- ------- 
coloredlogs     15.0.1 
flatbuffers     2.0.7 
humanfriendly   10.0 
mpmath          1.2.1 
numpy           1.23.2 
onnxruntime-gpu 1.12.1 
packaging       21.3 
pip             22.2.2 
protobuf        4.21.5 
pyparsing       3.0.9 
pyreadline3     3.4.1 
setuptools      65.3.0 
sympy           1.11 
wheel           0.36.2

ONNX Runtime(GPU版)は、それなりの数のパッケージに依存しています。

以上、ONNX Runtime(GPU版)のインストールを説明しました。
次は、ONNX Runtime(GPU版)の設定を説明します。

ONNX Runtime(GPU版)の動作確認

ONNX Runtimeが、GPU版として機能するかどうかを確かめましょう。
そのためには、ONNXモデルを用意する必要があります。

どんなモデルも構いません。
とりあえず、13MBのONNXモデルのリンクを載せておきます。

ONNXモデルのダウンロードリンク
https://github.com/onnx/models/raw/main/vision/classification/mobilenet/model/mobilenetv2-7.onnx

modelというフォルダを作成して、そこにダウンロードしたモデルを保存します。
準備が整ったら、次のコードを実行してみてください。

import onnxruntime as ort

print(ort.get_available_providers())

provider = ['CUDAExecutionProvider','CPUExecutionProvider']
ort_sess = ort.InferenceSession('./model/mobilenetv2-7.onnx', providers=provider)
print(ort_sess.get_providers())

次のように表示されたでしょうか?

['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']
['CUDAExecutionProvider', 'CPUExecutionProvider']

上の結果は、インストールしたONNX Runtimeで対応可能な実行プロバイダのリストです。
デフォルトでは、GPU(TensorRT)、GPU(cuDNN)、CPUの順番で実行するとことになります。

そして、下の結果は GPU(TensorRT)、GPU(cuDNN)、CPUの順番で実際に処理を実行することを表しています。
もし次のように表示されたら、CPUでしかONNX Runtimeが動かない状況だということです。

['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']
['CPUExecutionProvider']

この場合は、システム要件を満たしているか確認してみましょう。
CUDAやcuDNNのバージョンが違うというケアレスミスがあるかもしれません。

以上、ONNX Runtime(GPU版)の動作確認を説明しました。

タイトルとURLをコピーしました