NILMTKのインストール

NILMTKのインストール方法の記事です。 ニッチなジャンルの話でここに辿り着いた方はNILMが何かを知っていると思うのでNILMが何かについては省略です。。

うまくいかなかった方法

公式のドキュメントではAnacondaでのインストールを推奨していますがうまくいきませんでした..

nilmtkとnilmtk-contribをインストールしようとすると次のようなコマンドになりますが

$ conda install -c conda-forge -c nilmtk nilmtk nilmtk-contrib

Solving environment: がくるくるとなっている状態から一向に処理が進みません.. (MacBook Pro メモリ16GB)

結局、MacBook Proでのインストールは諦め、クラウドインスタンス上でメモリ40GBぐらいまで増やすとインストールができました。ただ、数時間単位で時間がかかりました

うまくいった方法

setup.pyを使ってインストールをするのが大量のメモリを必要とせず時間も短く良さそうでした。

ただ、そのままだと最新のtensorflowがインストールされてしまい、NILMTKの一部のコードが動かないのでsetup.pyを編集してやる必要があります。 その他、いくつかのパッケージもバージョン指定しないとエラーが出ました。

以下、順を追って手順を紹介します。

今回、試したPythonのバージョンは3.8でした。

$ conda create -n nilmtk-env python=3.8

1. nilmtkのインストール

対象リポジトリをcloneしてきて、

$ git clone https://github.com/nilmtk/nilmtk.git
$ cd nilmtk

setup.pyを次のように編集して、

    install_requires=[
        "pandas==0.25.3",
        "numpy >= 1.13.3, < 1.20.0",
        "networkx==2.1",
        "scipy",
        "tables",
        "scikit-learn>=0.21.2",
        "hmmlearn>=0.2.1",
        "pyyaml",
        "matplotlib==3.1.3",
        "jupyterlab",
        "nbconvert==6.5.0",  # 追加
    ],

インストール

$ python setup.py develop
$ cd ..

2. nilm_metadataのインストール

同様にインストールします。これはsetup.pyを編集しなくても問題なくインストールできます。

$ git clone https://github.com/nilmtk/nilm_metadata.git
$ cd nilm_metadata
$ python setup.py develop
$ cd ..
$ python -c "import nilmtk"

のコマンドでエラーが出なければここまでのインストールokです

3. nilmtk-contribのインストール

まず、リポジトリの取得

$ git clone https://github.com/nilmtk/nilmtk-contrib.git
$ cd nilmtk-contrib

nilmtkのとき同様に、setup.pyの編集をする必要があります。

    install_requires=[
        # 'nilmtk>=0.4',  # コメントアウト
        # 'tensorflow>=2.0', # コメントアウト
        'tensorflow==2.4.1',  # 追加
        'keras==2.4.0',  # 追加
        'protobuf==3.9.2',  # 追加
        'six==1.15.0',  # 追加
        'h5py==2.10.0',  # 追加
        'cvxpy>=1.0.0'
    ],

インストール

$ python setup.py develop

次のコードでエラーが出なければ無事にすべてがインストール完了です

$ python -c "import nilmtk_contrib"

コードの修正が必要な箇所

nilmtk-contribのアルゴリズムを動かすのにいくつかコード修正が必要だったので紹介しておきます

nilmtk-contrib/nilmtk_contrib/disaggregate/WindowGRU.py

 48             filepath = self.file_prefix + "-{}-epoch{}.h5".format(
 49                     # "_".join(appliance_name.split()),  # コメントアウトする
 50                     "_".join(app_name.split()),   # 変更後
 51                     current_epoch,
 52             )

nilmtk-contrib/nilmtk_contrib/disaggregate/resnet_classification.py

277                 ##################
278                 #PLOTTING
279                 # self.classification_output_plot(prediction_classification,appliance)   # コメントアウトする

参考記事

インストールに詰まってしまった人は実は少ない?!のかNILMTKのインストールの記事はWeb上でほとんど見つかりませんでした。。 私の場合、これらの記事内容をそのまま真似するだけではうまくいきませんでしたがもしかしたら役に立つかもしれないので参考記事としてリンクを載せておきます