oneDNN のインストールと利用(Ubuntu 上)
oneDNN(oneAPI Deep Neural Network Library)は,畳み込み,行列積,正規化などのディープラーニングの基本演算を CPU および GPU 向けに最適化して実装したオープンソースのライブラリである。TensorFlow,PyTorch,OpenVINO などが内部で利用している。開発は Intel から UXL Foundation に移管され,リポジトリは uxlfoundation/oneDNN である。
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now
oneDNN のインストール(Ubuntu のパッケージを使用)
Ubuntu 24.04 LTS 以降では,oneDNN が公式リポジトリ(universe)で提供されている。 端末で,次のコマンドを実行する.libdnnl-dev はヘッダファイルを含む開発用パッケージである.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install libdnnl-dev
自身のプログラムから利用するときは,dnnl.hpp を include し,-ldnnl を指定してリンクする.
g++ -std=c++17 example.cpp -o example -ldnnl
oneDNN のインストール(Intel の APT リポジトリを使用)
最新版や,Intel GPU 向けの SYCL 対応版を使用したいときは,Intel が提供する APT リポジトリからインストールする。 端末で,次のコマンドを実行する.
sudo apt -y install curl gpg
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| sudo gpg --dearmor -o /usr/share/keyrings/oneapi-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" \
| sudo tee /etc/apt/sources.list.d/oneAPI.list
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install intel-oneapi-dnnl-devel
このリポジトリからインストールした場合は,/opt/intel/oneapi 以下に配置される。使用する前に, 端末で,次のコマンドを実行して環境変数を設定する.
source /opt/intel/oneapi/setvars.sh
TensorFlow での oneDNN の利用
TensorFlow 2.9 以降では,x86 CPU 向けの公式ビルドで oneDNN による最適化が既定で有効である。個別に有効化の設定を行う必要はない。演算順序の違いにより計算結果の数値がわずかに変わる場合があり,これを避けたいときは, 端末で,次のコマンドを実行して無効化する.
export TF_ENABLE_ONEDNN_OPTS=0
iDeep,Chainer について
iDeep(ideep4py)は,Chainer から oneDNN(旧称 Intel MKL-DNN)を利用して計算を高速化するためのモジュールである。Chainer は 2019 年 12 月公開の v7 をもって新機能開発を終了し,開発元の Preferred Networks は PyTorch へ移行した。ideep4py の最終リリースは 2018 年であり,現在の Python やコンパイラでは導入できない場合が多い。
CPU での高速化を目的とする場合は,oneDNN を内部で利用する PyTorch または TensorFlow を使用する。PyTorch では,PyTorch の公式ビルドが oneDNN を含んでおり,追加の設定なしに CPU 向けの最適化が適用される。