【Windows】【OpenBLAS】【no GPU】MXNet 1.9(Building From Source)

公開日:2022年9月12日


If you want to use GPU, please see this page.
https://touch-sp.hatenablog.com/entry/2022/09/06/004928

Introduction

くわしく手順を公開してくれている人がいたので参考にさせて頂きました。
medium.com
備忘録として自分が行った手順を記録として残しておきます。

Environment

Visual Studioを除き、その他はなるべく最新のソフトウェアを使うようにしています。
ちなみにVisual Studio 2022でも問題なくBuild可能です。

Windows 11 (build: 22000.918)
Visual Studio Community 2019 v16.11.18
(or Visual Studio Community 2022 v17.3.3)
CMake 3.24.1
Git for Windows 2.37.3

cmake-guiを使用しますのでCMakeのPATHは通ってなくて問題ありません。
Git for Windowsは必ずしも必要ありません。

Preparation

Install OpenCV

こちらから「opencv-4.6.0-vc14_vc15.exe」をdownloadして実行します。


解凍先はCドライブ直下とし、
システム環境変数 OpenCV_DIRを作成し「C:\opencv\build」を追加しました。
システム環境変数 Pathに「C:\opencv\build\x64\vc15\bin」を追加しました。

Download OpenBLAS binary package

こちらから「OpenBLAS-0.3.21-x64.zip」をdownloadしてDドライブ直下に解凍します。


PATHの設定は不要です。

Download MXNet sources

Dドライブ直下で以下を実行します。

git clone --recursive https://github.com/apache/incubator-mxnet.git -b v1.9.1 --single-branch --depth 1 mxnet



こちらのリポジトリと「mxnet\include」ファルダを比較するとダウンロードがうまくいっているかどうかがわかります。以降の過程で失敗する時の多くはリンクファイル(ショートカット)がうまく機能していない時でした。

Build

CMake(cmake-gui)を立ち上げます。

「Where is the source code」を「D:/mxnet」、
「Where to build the binaries」を「D:/mxnet/build」
にして「Configure」ボタンを押します。

エラーが出るので修正を加え「Configure」を押します。

OpenBLAS_INCLUDE_DIR:D:/OpenBLAS/include
OpenBLAS_LIB:D:/OpenBLAS/lib/libopenblas.dll.a
USE_CUDA:not checked
USE_CUDNN:not checked
USE_MKLDNN:checked

上記の部分を修正すると「Configuring done」と表示されました。

「Configuring done」と表示されたら「Generate」ボタンを押します。うまくいっていれば「Generating done」と表示されます。
(警告はたくさん出ると思いますが無視して問題ないようです)


「Generating done」と表示されたら「Open Project」ボタンを押します。


自動的にVisual Studioが立ち上がるので「release」「x64」を選択します。


その後「ソリューションのビルド」を実行します。

Create whl file

DLLsのコピー

「D:\mxnet\python\mxnet」フォルダ内に各種DLLsをコピーします。

「D:\mxnet\build\Release」から

libmxnet.dll

「D:\OpenBLAS\bin」から

libopenblas.dll

「C:\opencv\build\x64\vc15\bin」から

opencv_world460.dll

MANIFEST.inの作成

「D:\mxnet\python」フォルダ内に「MANIFEST.in」というファイルを作成し以下を書き込みます。

recursive-include mxnet *

setup.pyの書き換え

「D:\mxnet\python」フォルダ内の「setup.py」の以下の1行を書き換えます。

書き換え前

data_files=[('mxnet', [LIB_PATH[0]])],

書き換え後

include_package_data=True,

whlファイルの作成

実行するPythonにwheelライブラリをインストールします。

pip install wheel

その後以下を実行しました。

python setup.py bdist_wheel --plat-name win_amd64



「D:\mxnet\python\dist」フォルダ内に「mxnet-1.9.1-py3-none-win_amd64.whl」が作成されているはずです。

Install MXNet

「mxnet-1.9.1-py3-none-win_amd64.whl」は好きな場所に移動して問題ありません。

pip install mxnet-1.9.1-py3-none-win_amd64.whl

これでインストールは完了です。

Check installation

>>> from mxnet.runtime import feature_list
>>> feature_list()
[✖ CUDA, ✖ CUDNN, ✖ NCCL, ✖ CUDA_RTC, ✖ TENSORRT, ✖ CPU_SSE, ✖ CPU_SSE2, ✖ CPU_SSE3, ✖ CPU_SSE4_1, ✖ CPU_SSE4_2, ✖ CPU_SSE4A, ✖ CPU_AVX, ✖ CPU_AVX2, ✔ OPENMP, ✖ SSE, ✖ F16C, ✖ JEMALLOC, ✔ BLAS_OPEN, ✖ BLAS_ATLAS, ✖ BLAS_MKL, ✖ BLAS_APPLE, ✔ LAPACK, ✔ MKLDNN, ✔ OPENCV, ✖ CAFFE, ✖ PROFILER, ✖ DIST_KVSTORE, ✖ CXX14, ✖ INT64_TENSOR_SIZE, ✔ SIGNAL_HANDLER, ✖ DEBUG, ✖ TVM_OP]

Check operation

以下のスクリプトで動作確認できています。
touch-sp.hatenablog.com
touch-sp.hatenablog.com