小分けにして保存したデータをh5pyで一つにまとめる

小分けして保存したデータをひとまとめにしてhdf5ファイルに保存したい。クラスタのマスターノードはメモリ搭載量が小さいが、計算実行ノードではデータ全体がメモリに入る。小分けしたデータをnumpy arrayに一度に入れてしまうとマスターノードのメモリが足りない。小分けしたデータを逐次的にhdf5ファイルに書き込むことで問題を解決した。

with h5py.File("large_data.hdf5", 'w') as w:
    large_data = w.create_dataset('values', values_shape, dtype=dtype)
    idx = 0
    for fname, npts in zip(filenames, num_points):
        large_data[idx:(idx + npts)] = read_piece_data(fname)
        idx += npts

Wifiステーションとパソコンの向き

昨日義父から、車の電波で開けるタイプの鍵は偏光面を揃えると遠くまで届くという話を聞いた。想像だけど、鍵のアンテナが棒状に入っているので、それで作る電波は直線偏光する。車にも同じようなアンテナが入っているとすると、車のアンテナの伸びる方向と電波のそれを合わせると最大の感受率が得られるというもの。

最近、家の外のベランダから数十メートル離れたところで仕事をしている。ベランダ近くにwifiステーションを置くことで、wifiが外まで届いたり届かなかったり。iPadではダメだけど、Macbook Pro(2017)だとなんとか電波を拾ったり拾わなかったり、といった具合だ。風のせいと思っていたが、義父から聞いた話を思い出して、Macの方向を色々変えて試してみると、あら不思議、いや不思議じゃないかもしれないけど、ネットワークのスループットが全然違う。自分とwifiステーションを繋ぐ線に対して横向きになると一番具合がいい。この違いがsshfsがまともに使えるか使えないかといった、重要な閾値を横切っている。ちょっとした発見であるとともに、大変実用的な結果となった。でも、虫も増えてきたし、そろそろ外で仕事をするのも、もうおしまいかな。

LEGO boost pylgbst

pylgbstを使った。環境はUbuntu 18.04(VMじゃなく実機)。condaをセットアップして、READMEに書いている通りに、pygattとpylgbstをpipでインストール。サンプルを動かしてみると、pyナンチャラ(忘れた)がないと言われるのでインストールする。次に実行権限でこける。これは、pylgbstのissueに書いているようにすれば解決した(気がする)。その実行したコマンドはこちら。

sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`

今日はレゴが猫だったのでプログラムが書けなかった。バーニーが良い。LEGO boostもう一台欲しい。

Legendre polynomial

#!/usr/bin/env python

import numpy as np
import matplotlib.pyplot as plt

data = np.array(((-9, 5), (-4, 2), (-1, -2), (7, 9)), dtype=float)
xcoords = np.linspace(-10, 10, 201)
pts = np.arange(0, len(data))

l_x = []
for x in xcoords:
    l_j = []
    for j in pts:
        lval = 1.0
        for m in np.r_[pts[:j], pts[j + 1:]]:
            x_m, x_j = data[[m, j], 0]
            lval *= (x - x_m) / (x_j - x_m)
        l_j.append(lval)
    l_x.append(np.dot(data[:, 1], l_j))

plt.plot(xcoords, l_x)
plt.plot(data[:, 0], data[:, 1], 'o')
plt.show()

Finite difference coefficient - Wikipedia

https://doi.org/10.1090/S0025-5718-1988-0935077-0

Radial grid

#!/usr/bin/env python

import numpy as np
from matplotlib.patches import Circle
import matplotlib.pyplot as plt

# ln(r_n+1) = ln(r_n) + h
# h = 1, r_0 = 1
ln_r = np.arange(11)
radii = np.exp(ln_r)
fig, ax = plt.subplots()
for r in radii:
    ax.add_patch(Circle((0, 0), radius=r, fill=False))
plt.axis('scaled')
ax.set_aspect('equal')
plt.show()

https://doi.org/10.1016/0010-4655(70)90008-1

GPU VASPが動かない

最新のUbuntu 16.04でCudaを.debで入れるとGPU VASPが動かない。

Cuda 10.1でコンパイルするとundefined reference to 'cudaSetupArgument'になる。Cuda10でdeprecatedの関数がなくなった模様。

Cuda 9.2だとnvidiaのドライバが動かない。nvidia-smi -lが動かない。ドライバが見つからないから。カーネルとのミスマッチか。

VASP側を直すか、Cuda 9.2のインストールを頑張るか。cudaSetupArgumentを置き換えるための情報が簡単に見つからないので、Cuda 9.2の情報を探す。以下のサイトによるとnvidiaドライバとcudaを別々に入れると良さそうで、実際にうまくいく。

ubuntu+nVIDIA復旧成功 - ローリングコンバットピッチなう!

簡単にまとめると

sh cuda_9.2.148_396.37_linux.run --silent --toolkit --no-opengl-libs
sh cuda_9.2.148.1_linux.run --silent --accept-eula
apt install dkms
sh NVIDIA-Linux-x86_64-418.40.04.run --silent --no-opengl-files --no-libglx-indirect --dkms

condaのlinuxバージョンのnumpyかmklあたりのどれかが壊れている

conda update --allしたら何かが壊れた。 conda-forgeのnumpy(とscipy)をインストールして現状回復できた。具体的にどれが原因か不明。

% conda install -c conda-forge numpy scipy
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.1
  latest version: 4.6.8

Please update conda by running

    $ conda update -n base conda



## Package Plan ##

  environment location: /home/togo/.miniconda3/envs/dev

  added / updated specs:
    - numpy
    - scipy


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    liblapack-3.8.0            |4_h6e990d7_netlib         2.8 MB  conda-forge
    mkl-2018.0.3               |                1       198.7 MB
    libcblas-3.8.0             |4_h6e990d7_netlib          47 KB  conda-forge
    mkl_random-1.0.1           |   py37h4414c95_1         372 KB
    numpy-base-1.15.0          |   py37h1793315_0         4.1 MB
    numpy-1.16.2               |   py37h8b7e671_1         4.3 MB  conda-forge
    scipy-1.2.1                |   py37h09a28d5_1        18.1 MB  conda-forge
    openssl-1.1.1b             |       h14c3975_1         4.0 MB  conda-forge
    ca-certificates-2019.3.9   |       hecc5488_0         146 KB  conda-forge
    mkl_fft-1.0.6              |   py37h7dd41cf_0         150 KB
    certifi-2019.3.9           |           py37_0         149 KB  conda-forge
    libblas-3.8.0              |4_h6e990d7_netlib         181 KB  conda-forge
    ------------------------------------------------------------
                                           Total:       233.0 MB

The following NEW packages will be INSTALLED:

    libblas:         3.8.0-4_h6e990d7_netlib conda-forge
    libcblas:        3.8.0-4_h6e990d7_netlib conda-forge
    liblapack:       3.8.0-4_h6e990d7_netlib conda-forge

The following packages will be UPDATED:

    ca-certificates: 2019.1.23-0                         --> 2019.3.9-hecc5488_0   conda-forge
    certifi:         2019.3.9-py37_0                     --> 2019.3.9-py37_0       conda-forge
    numpy:           1.16.2-py37h7e9f1db_0               --> 1.16.2-py37h8b7e671_1 conda-forge
    openssl:         1.1.1b-h7b6447c_1                   --> 1.1.1b-h14c3975_1     conda-forge
    scipy:           1.2.1-py37h7c811a0_0                --> 1.2.1-py37h09a28d5_1  conda-forge

The following packages will be DOWNGRADED:

    mkl:             2019.3-199                          --> 2018.0.3-1
    mkl_fft:         1.0.10-py37ha843d7b_0               --> 1.0.6-py37h7dd41cf_0
    mkl_random:      1.0.2-py37hd81dba3_0                --> 1.0.1-py37h4414c95_1
    numpy-base:      1.16.2-py37hde5b4d6_0               --> 1.15.0-py37h1793315_0

Mojaveでコンパイルするときstdio.h(C)やstring.h(C++)等が見つからなくなった。

以下のページに書いているpkgのインストールが効いた。

build fails with OSX Mojave · Issue #9050 · neovim/neovim · GitHub

% open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Cの場合は明示的に設定することで回避できたのだが。

C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include