matplotlibによるグラフの表示や、新規にXwindowでグラフを表示する場合など、クライアント側にウィンドウ表示の設定がされていない場合はグラフを表示するプログラムでエラーが出ます。
Windowsの場合、teratermやPuttyなどでログインしている場合は以下にあるXウィンドウ表示ためのプログラムをインストールし、 X11 forwarding の設定を適宜行ってください。
Macの場合は ssh でログインするときに
ssh -X server
ssh -Y server
として -X か -Y のオプションをつけてください。
ウィンドウ表示をオフにするには
import matplotlib
matplotlib.rcParams['backend'] = "Agg"
のようにし、グラフは直接画像ファイルへ出力します。
より詳細な情報は https://matplotlib.org/index.html を参考にしてください。
例として以下のようなコードでjsonファイルを読み込みすることができます。
import json
import numpy as np
f = open(jf, 'r')
jsonData = json.load(f)
f.close()
var=np.array(jsonData['hoge'])
homcloudから出力されるjsonは完全な辞書形式ではありませんので注意してください。
をお使いのPCへインストールします。 ターミナルからjsonファイルの標準出力をパイプで jq につなぐことで整形が簡単にできます。
#ノードの数の確認
cat optimal-cycles2.json | jq -c '. | length'
#result の中身の表示
cat optimal-cycles2.json | jq '.result'
#resultの中の boundary-points の内容表示
cat optimal-cycles2.json | jq -c '.result[]."boundary-points"'
#boundary-points の中の0番目の成分を簡易表示にして出力
cat optimal-cycles2.json | jq -c '.result[]."boundary-points"[0]'
File "/usr/local/lib/python3.6/site-packages/matplotlib/ticker.py", line 1956, in tick_values
"Data has no positive values, and therefore can not be "
ValueError: Data has no positive values, and therefore can not be log-scaled.
プロットレンジをオプション -x "[xmin:xmax]"
を適宜調節します。
python3 -m homcloud.plot_PD -d 1 -x "[0:10.0]" -X 256 -l output.idiagram -o output.1.png
サンプルデータが
といった場合には計算時にエラーが出たり,出力結果が奇妙(例えば対角線の下に birth-death pairが現われるなど)します. 例えば、正方格子データなどでこういったエラーが生じます. このエラーは入力の頂点座標の値をわずかにずらすと回避できます。
paraview-5.4を
brew install caskroom/cask/paraview
をインストールすると、インストール先が /Applications/ParaView-5.4.0.app となってバージョン名が名前に追加されます。 homcloud側で呼び出しに使っている名前と一致しなくなるので以下のようなエラーが出ます。 解決するには、0.9.5以降で実装された、paraviewの環境設定を行います。
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/homcloud/plot_PD_gui.py", line 602, in show_descendants_volumes
utils.invoke_paraview(tmpfile)
File "/usr/local/lib/python3.6/site-packages/homcloud/utils.py", line 153, in invoke_paraview
subprocess.check_call(["open", "-a", "paraview"] + list(args), **redirect)
File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 291, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['open', '-a', 'paraview', '/tmp/tmpy5ms2cya/e340e825-81c4-4eb5-9c67-7437132775a2.vtk']' returned non-zero exit status 1.
Abort trap: 6
シェルコマンドとして実行する時には mac や linux の環境では
export HOMCLOUD_PARAVIEW_PROGRAMNAME=/Applications/ParaView-5.4.0.app
のようにparaviewのアプリケーションのパスを明示してください。
windowsでは parabiew がインストールされている場所を調べておき、
set HOMCLOUD_PARAVIEW_PROGRAMNAME=C:\Program Files\ParaView 5.4.1-Qt5-OpenGL2-MPI-Windows-64bit\bin\paraview.exe
のように設定します。
ext/alpha_shape3.cc
やext/alpha_shape2.cc
が原因でインストールに失敗する場合は、一旦パッケージを解凍し、内部のsetup.pyを以下のように編集してから再度インストールを行います。
tar zxvf homcloud-base-0.8.5.tar.gz
cd homcloud-base-0.8.5
setup.py
の13行目、EXT_MODULES
へ以下のようにextra_compile_args
を追記します。
EXT_MODULES = [
Extension("homcloud.alpha_shape3",
include_dirs=[np.get_include()],
libraries=LIBS,
extra_compile_args=["-std=c++11"], <- 追加
sources=["ext/alpha_shape3.cc"]),
Extension("homcloud.alpha_shape2",
include_dirs=[np.get_include()],
libraries=LIBS,
extra_compile_args=["-std=c++11"], <- 追加
sources=["ext/alpha_shape2.cc"]),
]
python3でパッケージを作成しなおします。
python3 setup.py sdist
dist/homcloud-base-0.8.5.tar.gz
が生成されているので、これをインストールします。
cd dist
pip3 install homcloud-base-0.8.5.tar.gz
DebianやUbuntuなどのLinux環境でローカルにインストール場合には --user
をつけます。
pip3 install homcloud-base-0.8.5.tar.gz --user
matplotlibを使用時に、お使いの環境でGUI表示が使えない状況であるため、このエラーが出ていると考えられます。 matplotrcの環境設定でGUIをオフにすることで回避できます。
$HOME/.config/matplotlib/matplotlibrc
について、backendの部分を
backend: agg
とします。
以下のようなメッセージがOpenmpiから出て実行できないことがあります。
[[46339,0],0] ORTE_ERROR_LOG: Bad parameter in file orted/pmix/pmix_server.c at line 262
[[46339,0],0] ORTE_ERROR_LOG: Bad parameter in file ess_hnp_module.c at line 666`
実行時にシェルスクリプトを用意し、短いパス名のTMPDIRを定義しなおします。 例えばrun.shの行頭部分(2行目)に
export TMPDIR=/tmp
のような記述をして実行します。
以下の例のようにバージョンを以前のものに戻すことでエラーを回避できます。 最新版のOpenmpiを使う場合はA1を試してください。
参考: https://github.com/LLNL/spack/issues/3567
HomCloudは内部的にOpenMPIを使っています.そしてOpenMPIはrootではデフォルトでは 動作拒否をします.一方一般的にDockerでは内部的にrootで動かしていることが多いです. そのためDockerではエラーが発生して止まります.
対応策は以下のいずれかです.
OpenMPIにDockerでの動作を許容させる.OpenMPIのバージョンに依存しますが,以下の2つの環境変数を1
に指定するとROOTでも動作します.
OMPI_ALLOW_RUN_AS_ROOT
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM