MacがIntelからApple Siliconに変わったこともあり、nilmtkを新しいマシンでも使えるようにしてみました。ただ、毎度、新規に環境構築をするのも面倒なのでdockerイメージを作ることにしました。
出来上がったものはこちら
NILMの代表的なデータセット(REDD, UKDALE, REFIT)を導入するためのスクリプトも入れてあるので素早く実験を開始することができます。
苦労した点
過去の記事 のときもうまくいかなかったように今回も公式手順 にある以下の conda install の方法はうまくいきませんでした 😞
$ conda config --add channels conda-forge $ conda install -c nilmtk nilmtk
IntelマシンではなくMac M1でビルドしていることもありますが、 約15000秒(約4.2時間)かかったあとに無情のエラーでビルド失敗..
ERROR: failed to solve: process "/bin/sh -c conda install -c nilmtk nilmtk -y" did not complete successfully: exit code: 1
過去の手順でやるしかないのかな..と思っていたところ pip install でインストールできる方法が偶然見つかりました
Unable to download nilmtk · Issue #953 · nilmtk/nilmtk · GitHub
In summary, for the most up-to-date installation instructions, here're the steps
- Create environment for python=3.8
- pip install git+https://github.com/nilmtk/nilmtk@0.4.3 Ref from here
- pip install git+https://github.com/nilmtk/nilm_metadata@0.2.4 Verify installation
- startup python console environment and enter import nilmtk
これの通りやるとnilmtkを問題なくインストールできました✨
ただ、DNN系のアルゴリズムを使えるnilmtk-contribを合わせてインストールしようとするとパッケージの依存関係が解決できずエラーになってしまいます..
解決方法としては、依存パッケージをインストールせずに本体のみをまずpipインストールし、そのあとに依存パッケージを別途インストールすることにしました。
Dockerfileでの該当箇所は以下
COPY files/requirements.nilmtk_contrib.txt /tmp RUN conda init bash && . ~/.bashrc && conda activate nilmtk-env \ && pip install git+https://github.com/nilmtk/nilmtk@0.4.3 \ && pip install git+https://github.com/nilmtk/nilm_metadata@0.2.4 \ && pip install --no-deps git+https://github.com/nilmtk/nilmtk-contrib \ && pip install -r /tmp/requirements.nilmtk_contrib.txt
あと、試しにPython3.8ではなくPython3.9に変えてみたところインスールNGだったので、Python3.8を使う必要があります
NILMデータセット
datasetディレクトリ以下に redd、refit、ukdaleのディレクトリがあり、各サブディレクトリに入って download.sh
と convert.py
を実行すれば nilmtkで使えるh5形式のファイルが生成されます
ただ、REDDは配布サイトであるhttps://redd.csail.mit.edu/にアクセスしても応答が返ってこなくダウンロードできません(場所が変わったのだろうか? 🤔)
以前にダウンロードしたファイルが手元にあったのでconvertできることは確認しています。
あと、UKDALEも一部のファイルがでかいので(house_1のmains.datで4.1Gある)、Dockerのメモリが16GBぐらい必要です。足りないとconvert中に Killed されます
Python3.11版のdockerイメージ
pipの方法だとPython3.8でしか動かせないので Python3.11版のdockerイメージも作りました。
こちらは 過去の記事 の方法に沿ってやらないといけませんが、無事イメージ作成 & インストールすることができました。
こちらも依存関係が難しくオリジナルのsetup.py を改修したファイルをコピーしてインストールするようにしました。
また、nilmtk-contribが古いKerasベースのコードになっており 新しいKerasのバージョンではライブラリのロード時にエラーになってしまい、こちらに関しても修正したファイルを別途用意しておき上書きコピーしてインストールするようにしました。