OMP: Error #15:

相変わらずすぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方の続き。ようやくディープラーニングの章を進めているけれど、「MLPでMNISTの分類問題に挑戦しよう」というところのグラフを描画するところでつまずく。

Jupiter Notebookでこのプログラムを動かすと、最後のEpochまで動いたところで、

The kernel appears to have died. It will restart automatically.

という表示が出て止まる。

なんでかなと同じコードをターミナルから動かすと、やはり最後グラフの描画の前に

OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.
zsh: abort      python <ファイル名>.py

という表示が出て止まってしまう。どうしたものか。

とりあえず、日本語で検索して出てくる情報は以下のような感じ。

Anacondaを使用してMacでDeepLabのデモを実行

とりあえず、1つ目、2つ目のリンクにあるように、パッケージをインストールしたりアンインストールしてみてもうまく行かない。

結局最終的な解決策は3つ目のリンクにあるように

import os
os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'

という記述を追記して、解決。

ただし、これは根本的な解決ではないそうで、また出てきたら調べないと。

今度はTensorboardが動かない

前回、

はOpen CVで躓いたけれど、今回はTensorboard。すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方の第3章は無事にできて、4章の自然言語処理は飛ばして(画像処理&ディープラーニングを勉強したいから)、第5章へ。AnacondaでTensorflowは使えた。

ただ、本に載っているのはVer. 1.xのコードなので、何も気にせずにAnacondaでTensorflowをインストールするとVer. 2.xがインストールされる。すると、本の、test_ml_tb.pyをそのまま実行するとこんなエラーが出る。

yyyy-mm-dd hh:mm:ss: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations:  SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.
yyyy-mm-dd hh:mm:ss: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 12. Tune using inter_op_parallelism_threads for best performance.
Traceback (most recent call last):
  File "test_mul_tb.py", line 13, in <module>
    sess = tf.Session()
AttributeError: module 'tensorflow' has no attribute 'Session'

これは、64日目 pip install tensorflowしたら2.0がやってきました。にも書かれている通り、Ver. 2.xではSessionというのを使わなくなったからとのこと。なので、この部分を修正して、

import tensorflow as tf

a = tf.constant(10, name='10')
b = tf.constant(20, name='20')
c = tf.constant(30, name='30')

add_op = tf.add(a, b, name='add')
mul_op = tf.multiply(add_op, c, name='mul')

tf.print(mul_op)

tf.summary.create_file_writer('logs')

とかすれば動くみたい。(最後の行もFileWriterが使えないから修正。でもこれで動くのか未検証)

ただ、とりあえずは本に合わせて進めていきたいのでAnacondaのTensorflowをVer. 1.14.0にダウングレード。test_ml_tb.pyはもともとのコードで問題なく動く。

ただ、問題はその後。TensorBoardで機械学習を視覚化しようというところで、

$ tensorboard --logdir=./logs

とターミナルに入力して実行する必要があるけれど、これを実行すると、

[libprotobuf ERROR external/com_google_protobuf/src/google/protobuf/descriptor_database.cc:393] Invalid file descriptor data passed to EncodedDescriptorDatabase::Add().
[libprotobuf FATAL external/com_google_protobuf/src/google/protobuf/descriptor.cc:1367] CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size): 
libc++abi.dylib: terminating with uncaught exception of type google::protobuf::FatalException: CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size): 
zsh: abort      tensorboard --logdir=./logs

というエラーが出る。

で、海外のサイトとかを見てみると、Anacondaちゃんとインストールしてあるのかといった記述をよく見る。特に、macOS Catalinaだと、ターミナルがbashではなく、zshだからanacondaが公式に出しているインストール方法使ったほうがいいと。ということで、今回はanacondaだけアンインストール(アンインストール方法は前回の記事と同じ)。その後、How to Restore Anaconda after Update to MacOS Catalinaに従って再インストール。optフォルダではなくユーザー名直下にインストールできたので、.zshrcもこのサイトの通り一度書いたものを再修正。

それでもやっぱりTensorBoardは動かない…

さらにいろいろサイトを探し、参考にしたのは、

TensorBoard Fails to Launch, MacOS Catalina

Tensorboard can’t work on Macos Catalina #2985

これらによれば、仮想環境でPython 3.6をインストールして、そこに(condaではなく)pipでTensorflow Ver. 1.xをインストールしろとな。

指示の通り、ターミナルで

$ conda create -n <新しい環境名> python=3.6

とした後に、しつこいようだけどcondaではなく、

$ pip install tensorflow==1.14

として、新しい仮想環境上で、test_ml_tb.pyを動かしたら動いて、そのあとの

$ tensorboard --logdir=./logs

もちゃんと機能して、TensorBoardが見ることができた。なんだか不思議な感じです。

Open CVのためにMac初期化

前の仕事退職前からPythonや機械学習を勉強しようと思って、何冊か本を買って勉強中。それぞれの本に忠実にPythonをインストールしたり、もともと研究や仕事で使っていたQGISのPythonも(たぶん)あって、Macの中はゴチャゴチャ。

そんな中、すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方の第3章に取りかかろうとしてopenCVが動かずにスタック(実際には前のMacでは動いていたけど、12月に買い替えたMacで動かない…)

インストーラーパッケージでインストールしたAnacondaのJupiter Notebookを使っているけれど状況はJupyter NotebookでopenCVをimportしようとすると”ImportError:No module named cv2″が出てしまうの記事と同じ。

import cv2

とすると、

ImportError:No module named cv2

となる。

上記記事では、condaを使ってとなっているけれど、残念ながらcondaもうまく動かず。(この時点で、anacondaをどうインストールしたかも記憶なし…)condaがないことについては、anacondaをインストールしたのにcondaコマンドがなかったにやり方があったので、同じように

% echo "source ~/anaconda3/etc/profile.d/conda.sh" >> ~/.zshrc

としてたしか動くようになった(記憶なし…)

でもOpen CVをインストールできず。仕方なく、いちどAnacondaを消してみようとanaconda-cleanを使ってアンインストール(Anaconda3をmacOSから完全にアンインストールする方法)。それから再インストールはhomebrewも使ってなにかに忠実にと思い、HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモを参考にさせてもらい、Anacondaもコマンドラインでインストール。

が、やっぱりOpen CVをインストールできず。さらにはcondaも動かせなくなる。どうにも手詰まり。もうこうなれば最初からきれいにインストールしようとMac初期化を決行。

↑ここまで背景

で、なにかに忠実にインストールしておこうと思い、Anaconda を macOS にインストールする手順を参考に、Homebrewもpyenvも使わずにインストーラーでインストール(とりあえず現時点では違うバージョンのpythonなど使う予定はないし)。

環境は以下の通り

  • macOS Catalina (Version 10.15.2)
  • Anaconda 2019.10 Python 3.7 version 64-Bit Graphical Installer

インストール後、ターミナルで

% conda --version

とすると、返ってくるのは

zsh: command not found: conda

ここはこれまで色々調べてきた中で、ターミナルがbashからzshになったのが理由ということで、macOS CatelinaにAnacondaをインストールする(zshでの不具合対応)を参考にさせていただき、ターミナルで、

% touch .zshrc

としてファイルを作成。

% open ~/.zshrc

で、ファイルを開いて、

export PATH="/Users/[ユーザー名]/opt/anaconda3/bin:$PATH

と記述して保存。最後に、

% source ~/.zshrc

これで改めて

% conda --version

とすると

conda 4.8.1

と出てきた。

ようやく使えるように。。。肝心のOpen CVはとりあえずAnacondaのEnvironmentsからインストールしてJupiter Notebookでは使えるようになった。(ターミナルからはまだ…)

どうインストールするか、事前によく調べて、どうインストールしたか記録しておくのはホント重要と思ったものです。

QGISも改めてQGIS 3.10.2 ‘A Coruña’をインストールして無事に今のところ動作してる。