白旗製作所

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」

Pythonで書いたスクリプトをWindowsコマンドラインから実行しようとした際,
("python hogehoge.py"を実行)
「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」
というエラーが発生して,スクリプトが実行できませんでした.
Pythonスクリプトの中身はChainerでNNモデルを作成し,
学習済みモデルを読み込んで実行するものです.

環境は以下です.
Python 3.5.4 Anaconda
OS:Windows 7 Ultimate 64bit

以下のサイトには,Intel MKLをダウンロード・インストールして
System32フォルダにmkl_のつくdllをコピーすれば解決すると記載がありましたが,
私の環境では改善しませんでした.
pythonで機械学習:windowsで「Intel MKL」DLL エラー
pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」が解決

その後,エラーメッセージに出ていたlibiomp5md.dllというライブラリを
以下からダウンロードしてpythonのスクリプトファイルと同じフォルダに置くことで解決しました.

libiomp5md.dll-Dll ファイルダウンロード
このlibiomp5md.dllというライブラリですが,IntelのOpenMPというライブラリ群の一つで
Intel IPP7.0で提供が終了しているそうです.
今(2018/5),最新版はIPP9.0のようなので,最新版のMKLでは含まれていなかったのかも知れません.

スポンサーサイト
  1. 2018/05/27(日) 15:43:22|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

python matplotlibからベクタ形式画像ファイルの出力

Python matplotlibで描画した画像のベクタ形式での画像出力に
少し手間取ったので,方法をメモしておきます.


(1)通常のpngファイル出力
通常のPNGファイルであれば,出力先ファイルの拡張子をpngにしておけば
plt.savefig()で勝手にPNGで出力してくれます.

import matplotlib.pyplot as plt
plt.plot(x, y)
file = figure.png
plt.savefig(file)


(2)Windowsメタファイル(EMF)出力
plt.savefigが対応している出力形式にemfは含まれないため,
拡張子をemfにしても出力されません.

plt.savefigが対応する画像形式のうち,svgというベクタ形式ファイルで出力すると,
別途Inkscapeというソフトでsvg→emfに変換出来るようです.
Pythonから使いやすいように,inkscapeを呼び出すスクリプトを作成しておきます.

①Inkscapeのインストール
https://inkscape.org/ja/download/windows/より,installer(exe)をダウンロードして
Inkscapeをインストールします.

②スクリプトの作成
以下の内容をテキストファイルに入力し,"svg2emf.cmd"という名前で
パスの通った場所に保存しておきます.
内容としては,"inkscape.exe SVGファイルのフルパス名 -M 拡張子をemfに変えたフルパス名"を
コマンドプロンプトで実行させるものになります.

@echo off
set inkscape="C:\Program Files\inkscape\inkscape.exe"
%inkscape% %1 -M %~dpn1.emf

③pythonで以下を記述します.
import matplotlib.pyplot as plt
import os
plt.plot(x, y)
file = C:\Users\User\figure.svg
plt.savefig(file)
os.system("svg2emf "+file)

これでsvg出力した後emf変換まで出来るようになりました.


(3)PostScriptファイル(EPS)出力
通常,plt.savefigで拡張子をpsまたはepsにすると,PostScriptファイルを出力できます.

しかしながら,私の環境では以下のようなエラーが出て出力することができませんでした.

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 18-19: ordinal not in range(256)

恐らく図に利用している文字列等のエンコードエラーだと思うのですが,解決法がわかりませんでした.
どのみちPPT等で作成したemf画像もepsに変換して利用しようと思っていたため,
汎用的なemf→eps変換ソフトで対応することにしました.
どうやらMetafile to EPS Converterというソフトで変換できるようです.

①Metafile To EPS Converterのインストール
http://wiki.lyx.org/Windows/MetafileToEPSConverterからインストーラをダウンロードし
インストールします.

②スクリプトの作成
以下の内容を"emf2eps.cmd"という名前でパスの通った場所に保存します.

@echo off
set metafile2eps="C:\Program Files (x86)\Metafile to EPS Converter\metafile2eps.exe"
%metafile2eps% %1 %~dpn1.eps

③pythonでの実行
svgファイルを出力してemfに変換した後,以下を実行すればepsが作成されます.
os.system("emf2eps "+os.path.splitext(file)[0]+".emf")

これでめでたくEPSファイルも作成できました.

参考:
Windows版 Inkscape の入手
matplotlibのグラフをemfファイル形式に変換
SVG ファイルを EMF ファイルに変換して PowerPoint に貼り付ける
Metafile to EPS Converter
Metafile to EPS Converter で Windows Metafile を EPS に変換
バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
  1. 2018/01/04(木) 13:13:44|
  2. Python
  3. | トラックバック:0
  4. | コメント:1

WSL Ubuntu上のサーバをWindowsから立ち上げる

前回の記事でWSLの環境セットアップ方法を記載しましたが、毎回Ubuntuを立ち上げてサーバを起動して…、
とやるのは面倒です。幸いWSLコマンドはWindowsのコマンドプロンプトからでも実行できるため、これを利用して
サーバを楽に立ち上げられるようにします。

0. WindowsコマンドプロンプトからのWSL(Linux)コマンド実行
コマンドプロンプトを開き
 C:\Windows\System32\bash.exe -c 'コマンド'
もしくはbashがパスに入っていれば
 bash -c 'コマンド'
とするだけで、Linuxコマンドを実行することができます。

0.1 コマンドプロンプトの文字コードをUTF-8に変更する
Windowsのコマンドプロンプトの文字コードはデフォルトでCP932(シフトJIS)です。
UbuntuではUTF-8なので、文字化けする恐れがあります。以下のコマンドであらかじめ文字コードを変えておけます。
 chcp 65001

1. jupyter notebookの立ち上げ
↑で述べたことを利用して、
 C:\Windows\System32\bash.exe -c '~/.pyenv/versions/anaconda3-5.0.1/bin/jupyter notebook'
としてやれば、jupyter notebookが実行できます。
以下の点に注意してください。
・jupyter notebookのバイナリのアドレスを指定する必要がある
・実行ディレクトリがコマンドプロンプトのカレントディレクトリになる

2. sshdの立ち上げ
sshdの立ち上げにはsudoが必要です。bash.exeを直接叩くと
sudo権限では実行できないため、パスワードの入力が必要になります。
以下の2つの方法でこれを回避します。

2.1 コマンドプロンプトを管理者権限で立ち上げる
bashを実行するコマンドプロンプトを管理者権限で立ち上げておけば、
ここで実行するbash.exeはadmin権限(sudoとは異なる)で実行されるため、
sshdもそのまま立ち上げられます。
 C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'
一方、標準ではユーザーアカウント制御(UAC)で実行可否を聞かれることになります。

2.2 Ubuntu上で、sshd起動にはパスワードを不要にする。
以下をUbuntuで実行しておくことで、パスワード入力が不要になります。
 sudo visudo
を実行し、ファイル末尾に
 $USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
を追記します。ただし、$USERはWSLをインストールする際に作成したユーザ名に変更します。

3. 起動スクリプトの作成
2まででサーバが立ち上げられることが確認できました。この内容をスクリプトにして
ダブルクリックもしくはPC起動で立ち上がるようにします。
autostart.vbsというテキストファイルを作成し、以下を記述します。

set ws=wscript.createobject("wscript.shell")
ws.run "chcp 65001"
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
ws.run "C:\Windows\System32\bash.exe -c '~/.pyenv/versions/anaconda3-5.0.1/bin/jupyter notebook'",0

このautostart.vbsをダブルクリックするなりショートカットを作ってスタートアップに登録するなりしておけばOKです。

参考
WSL その50 - WindowsからLinuxコマンドを呼び出すコマンドの実行例
How to run Ubuntu service on Windows (at startup)?
  1. 2017/11/28(火) 00:34:30|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

Windows10のUbuntuでpython環境構築

これまで使用していたノートPC(マウスコンピューターLuvBook S)の基板が逝ってしまい、
起動しなくなってしまったので、新たに中古でThinkPad X230を購入してセットアップをしています。

LuvBookは基板以外は生きていたので、メモリ4GB×2をX230に移動しています。
それから、SSD 128GBからデータを救出した後、フォーマットし学生版のWindows 10 Educationをインストールしました。
また、せっかくWin10にしたので、python開発環境をWindows Subsystem for Linux(WSL)を用いUbuntuで構築することにしました。
以下に構築の手順を記載します。

1. [コントロールパネル] – [Windowsのプログラムと機能] – [Windowsの機能の有効化または無効化] で
「Windows Subsystem for Linux」へチェックを入れ、再起動する

2. Microsoft StoreからUbuntuを検索してインストール

3. Ubuntuを初回起動すると、ユーザー名・パスワードを聞かれ、インストール作業が行われる。

4. 環境の準備
 $ sudo apt install -y build-essential
 $ sudo apt install -y libsm6
 $ sudo apt install -y libxrender1

5. pyenvのインストール
 $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
 $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
 $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
 $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
 $ source ~/.bashrc

6. anacondaのインストール
 $ pyenv install -l | grep anaconda
 でバージョン確認。私はpython 3系しか使うつもりがなかったので、そっちだけインストールしました。
 $ pyenv install anaconda3-5.0.1
 $ pyenv rehash
 $ pyenv global anaconda3-5.0.1
 $ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.0.1/bin/:$PATH"' >> ~/.bashrc
 $ source ~/.bashrc

7. 各ライブラリのインストール
今回はseaborn、xgboost、plotly、pydotplus, graphvizをインストールします。
 $ pip install seaborn
 $ git clone --recursive https://github.com/dmlc/xgboost
 $ cd xgboost
 $ make -j4
 $ cd python-package
 $ python setup.py install
 $ pip install pydotplus
 $ sudo apt install graphviz
(必要であれば,conda update graphvizもやっておくと良いです.)

【2017/11/28追記】
ついでにTensorFlowもインストールしておきます。
今回はGPUも無かったのでCPUのみのバージョンをインストールします。
python3しかインストールしていないのでpip直叩きしましたが、インストール後にワーニングが出ました。
 $ sudo pip install tensorflow
 $ python
 >>> import tensorflow as tf
 /home/demio/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
return f(*args, **kwds)

どうやらtensorflow1.4はまだpython3.6に正式対応していないようです。
pythonのバージョンを3.5に落とすか、インストールするtensorflowのバージョンを1.3.0に落としておく必要があります。
 $ sudo pip install tensorflow==1.3.0

参考:
Installing TensorFlow on Ubuntu
Creating a specific 3.6 binary for Linux #14182 tensorflow/tensorflow GitHub

8. jupyter notebookの設定
 $ python
 > from IPython.lib import passwd
 > passwd()
でパスワードのハッシュ値をコピーしておく。
 $ cd
 $ jupyter notebook --generate-config
 $ sudo nano /.jupyter/jupyter_notebook_config.py
でコンフィグファイルを生成し、末尾に以下を追記
 c.IPKernelApp.pylab = 'inline'
 c.NotebookApp.ip = '*'
 c.NotebookApp.open_browser = False
 c.NotebookApp.port = 12345
 c.NotebookApp.password = u'ハッシュ値'
jupyter notebookを再起動
 $ jupyter notebook &
Windows10のウェブブラウザからhttp://localhost:12345にアクセスして見れるかチェック。

9. SSHサーバの立ち上げ
 Windows10のSSHサービス停止
 「サービス」からSSH Server Broker, SSH Server Proxyを停止(無効)
 Windowsファイアウォールの受信の規則のSSH Server Proxy Serviceを無効にし、
 新しい規則でTCP port22を有効にする。

ここからUbuntuの設定
 $ cd /etc/ssh
 $ sudo ssh-keygen -t rsa -N '' -f ssh_host_rsa_key
 $ sudo nano /etc/ssh/sshd_config
を開いて、
 Hostkey /etc/ssh/ssh_host_dsa/key
 Hostkey /etc/ssh/ssh_host_ecdsa/key
 Hostkey /etc/ssh/ssh_host_ed25519/key
をコメントアウト、
 UsePrivilegeSeparation を no
 PasswordAuthentication を yes
に修正して保存。
 $ sudo /etc/init.d/ssh restart
で再起動すればOK
Windows10からWinSCPやteraterm等でlocalhost:22にアクセスできるか確認。

参考:
UbuntuをWindows 10(Fall Creators Update)にインストールしてみた
UbuntuServer 16.04 LTSでJupyter Notebookを使った機械学習環境を手っ取り早く作る手順 with anaconda
Windows10 BashへのSSH接続メモ
  1. 2017/11/18(土) 16:27:59|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

anacondaのパッケージ検索

Anacondaでpythonパッケージをインストールしようとした時,
$ conda install package_name
PackageNotFoundError: Packages missing in current channels:

となりパッケージが見つからないと言われる.

こういった場合,
$ anaconda search -t conda package_name
とすると
Using Anaconda API: https://api.anaconda.org
Packages:
Name | Version | Package Types | Platforms |Builds
------------------------- | ------ | --------------- | --------------- |----------
  hoge/package_name | 0.6 | conda | linux-64 |py27_0
とパッケージ名を検索してくれるので,

$ conda install -c hoge package_name
とインストールしてやれば良い.
  1. 2017/10/22(日) 18:19:27|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。