kuroの覚え書き

96の個人的覚え書き

Deep Learning再び

しばらく中断していたDeep Learningをまた再開しようと思う。
なんか、いろいろやっているうちに環境を壊してしまったので、再構築からスタート。
毎回、環境構築で時間がかかって、それだけで疲れてしまって肝心のデータ解析までできてないような。

この分野の進展は超早いので、1年前に買った本の情報などはかなり古くなっていて、インストールの仕方なんかもすっかり洗練されていたりするみたいだ。

ということで現時点でのインストール関係の覚書。
とりあえずこれまでの反省に立って、Linuxの素の状態へのインストールはトラブったときにいろいろ面倒なので仮想環境で構築することにする。

KVMで仮想環境をCentOS7上に構築し、ゲストOSとしてUbuntu18.04を入れることにする。
仮想環境にsshでログインして以下インストール作業をする。

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

$ python3 -V
Python 3.6.9

$ python3 -m pip install tensorflow

$ python3 -m pip list
Package               Version
--------------------- -------------------
absl-py               0.12.0
apturl                0.5.2
asn1crypto            0.24.0
astor                 0.8.1
Brlapi                0.6.6
cached-property       1.5.2
certifi               2018.1.18
chardet               3.0.4
click                 6.7
colorama              0.3.7
command-not-found     0.3
cryptography          2.1.4
cupshelpers           1.0
cycler                0.10.0
decorator             4.1.2
defer                 1.0.6
distro-info           0.18ubuntu0.18.04.1
gast                  0.4.0
google-pasta          0.2.0
grpcio                1.36.1
h5py                  3.1.0
httplib2              0.9.2
idna                  2.6
importlib-metadata    3.8.0
Keras-Applications    1.0.8
Keras-Preprocessing   1.1.2
keyring               10.6.0
keyrings.alt          3.0
language-selector     0.1
launchpadlib          1.10.6
lazr.restfulclient    0.13.5
lazr.uri              1.0.3
louis                 3.5.0
macaroonbakery        1.1.3
Mako                  1.0.7
Markdown              3.3.4
MarkupSafe            1.0
matplotlib            2.1.1
netifaces             0.10.4
numpy                 1.19.5
oauth                 1.0.1
olefile               0.45.1
pexpect               4.2.1
Pillow                5.1.0
pip                   21.0.1
protobuf              3.15.6
pycairo               1.16.2
pycrypto              2.6.1
pycups                1.9.73
pydot-ng              2.0.0
pygobject             3.26.1
pymacaroons           0.13.0
PyNaCl                1.1.2
pyparsing             2.4.7
pyRFC3339             1.0
python-apt            1.6.5+ubuntu0.5
python-dateutil       2.6.1
python-debian         0.1.32
pytz                  2018.3
pyxdg                 0.25
PyYAML                3.12
reportlab             3.4.0
requests              2.18.4
requests-unixsocket   0.1.5
scipy                 0.19.1
SecretStorage         2.3.1
setuptools            54.2.0
simplejson            3.13.2
six                   1.15.0
ssh-import-id         5.7
system-service        0.3
systemd-python        234
tensorboard           1.14.0
tensorflow            1.14.0
tensorflow-estimator  1.14.0
termcolor             1.1.0
typing-extensions     3.7.4.3
ubuntu-drivers-common 0.0.0
ufw                   0.36
unattended-upgrades   0.1
urllib3               1.22
usb-creator           0.3.3
wadllib               1.3.2
Werkzeug              1.0.1
wheel                 0.36.2
wrapt                 1.12.1
xkit                  0.0.0
zipp                  3.4.1
zope.interface        4.3.2

おや?tensorflowが1.14しか入らないよ?今2.0以上に行っているはずなんだが。

どうやらpipのバージョンが古いようだ。

$ python3 -m pip install pip

$ python3 -m pip install --upgrade tensorflow

$ python3 -m pip list 
......
tensorboard            2.4.1
tensorboard-plugin-wit 1.8.0
tensorflow             2.4.1
tensorflow-estimator   2.4.0
......

$ python3 -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
2021-03-28 01:24:30.266613: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-03-28 01:24:30.266703: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2021-03-28 01:24:32.709611: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-03-28 01:24:32.709778: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2021-03-28 01:24:32.709798: W tensorflow/stream_executor/cuda/cuda_driver.cc:326] failed call to cuInit: UNKNOWN ERROR (303)
2021-03-28 01:24:32.709825: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (kkuro-KVM): /proc/driver/nvidia/version does not exist
2021-03-28 01:24:32.710260: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-03-28 01:24:32.716037: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
tf.Tensor(-1853.1768, shape=(), dtype=float32)

これでよし。cudaにエラーが出ているが、このあと入れていく。

# Add NVIDIA package repositories
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
$ sudo apt-get update

$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb

$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt-get update

# Install NVIDIA driver
$ sudo apt-get install --no-install-recommends nvidia-driver-450
# Reboot. Check that GPUs are visible using the command: nvidia-smi
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

おや?なんで?

今日は時間切れ。

タンパク質立体構造の予測

すでに解かれているタンパク質モデルをお手本に別の似たタンパク質の立体構造を予測してみる。

UCSF Chimeraでできるらしいのだが、このソフトウェアは色々できることがありすぎて、逆に使い方がわかりにくい。
そこで、そもそもChimeraも内部で使っているらしい、MODELLERをコマンドラインから使うことにする。

https://salilab.org/modeller/
ここからソフトウェアをダウンロードしてくる。
Academicな使用は無料だが、インストールするにはRegistrationが必要である。
インストーラを起動してRegistrationするとメールで送られてくるキーワードを入力すると、無愛想にインストール完了するがコマンドがインストールされるだけなのでアプリのようなものはできない。

今回はversion 10.0をダウンロードしたので、起動するには

$ mod10.0
usage: mod10.0 script [...]

とする。
ちなみに

$ which mod10.0
/usr/local/bin/mod10.0

とりあえずインストールができたなら、ためしになんかモデリングしてみる。
シロイヌナズナFTタンパク質をお手本にトマトのFTタンパク質をモデリングしてみよう。ほとんど一緒だから、まずおかしなことにはならないでしょう。

まず必要なものはPDBファイルというもの。これを
f:id:k-kuro:20210317185900p:plain
このように
https://pdbj.org
からダウンロードしてくる。pdb1wkp.entを落としてきて1WKP.pdbという名前にしておく。

次にアライメントファイルを作成する。(ファイル名はalign.pirとした)

>P1;Solyc03g063100.2.1
sequence:Solyc03g063100.2.1::::::::
RDPLVVGRVVGDVLDPFTRTIGLRVIYRDREVNNGCELRPSQVINQPRVEVG
GDDLRTFFTLVMVDPDAPSPSDPNLREYLHWLVTDIPATTGSSFGQEIVSYESPRPSMGI
HRFVFVLFRQLGRQTVYAPGWRQNFNTRDFAELYNLGLPVAAVYFNCQRESGSGGRRRSA
D*
>P1;1WKP
structureX:1WKP:6:A:168:A::::
RDPLIVSRVVGDVLDPFNRSITLKVTYGQREVTNGLNLRPSQVQNKPRVEIG
GEDLRNFYTLVMVDPDVPSPSNPHLREYLHWLVTDIPATTGTTFGNEIVSYENPSPTAGI
HRVVFILFRQLGRQTVYAPGWRQNFNTREFAEIYNLGLPVAAVFYNSQRES---------
-*

clustalw等でアライメントを作成してPIR形式で保存したところにヘッダーをつける。お手本となるAtのアミノ酸配列はPDBファイルをダウンロードしてきたページで配布されている配列を使っておくと間違いない。
上にモデリングしたい配列、下にお手本配列を置いたが、逆でもいいのかもしれない。
ヘッダーの書式はターゲットの1行目はPIRそのままでいい。まあなんでもいいみたい。
2行目には
sequence:(1行目で使った名前)::::::::
後ろのオプションはとりあえずそのまま。
お手本側のヘッダー1行目もPIRそのままでいいと思うが、PDBのIDにしておくのが無難かもしれない。
2行目は
structureX:(1行目で使った名前):6:A:168:A::::
X線構造解析されているときはstructureX。NMRのときはどうするんだろうね。(structureNらしい)
この後ろの6:A:168:Aというのが曲者で、おそらくN末の構造は不安定で解かれていないために6番目のアルギニンからしか情報がないらしく、PDBファイルの
f:id:k-kuro:20210317191132p:plain
この部分がARG A 6からになっている。ATGから構造が解かれていればMET A 1のようになっているはずだが。
またAというのがなにかというとPDBファイルが4量体の構造を解いているらしく
f:id:k-kuro:20210317191408p:plain
ABCDという4つのChainを含んでいるため、Aのchainをお手本とするよ、という意味になる。
168は同様にC末端がどこまでかを表している。

もともとのアライメントを取ったfastaファイルでは

>1WKPA:FLOWERING LOCUS T protein
GSHMSINIRDPLIVSRVVGDVLDPFNRSITLKVTYGQREVTNGLNLRPSQVQNKPRVEIG
GEDLRNFYTLVMVDPDVPSPSNPHLREYLHWLVTDIPATTGTTFGNEIVSYENPSPTAGI
HRVVFILFRQLGRQTVYAPGWRQNFNTREFAEIYNLGLPVAAVFYNSQRES

となっているがMの前のGSHは要らないのは当然としてPDBが6番目のRからなので、MSINIも削ってアライメントを作る必要がある(アライメントしてから削ってもいい)
今回はTargetの方もそれに合わせて頭を削っておいた。そのままではだめなのかは試してみていない。
さて、ここまで準備したら、最後にスクリプトファイルを書く。

from modeller import *
from modeller.automodel import *

log.verbose()
env = Environ()

a = automodel(env,
              alnfile  = 'align.pir',
              knowns   = '1WKP',
              sequence = 'Solyc03g063100.2.1')
a.starting_model= 1
a.ending_model  = 1
a.make()

これをscript.pyと名前をつけて、PDBファイル、アライメントファイルと同じフォルダに保存し、そのディレクトリ内で

$ mod10.0 script.py

とやるとパタパタパタっとファイルが生成されて完了する。
今回はSolyc03g063100.2.1.B99990001.pdbというファイルが生成されていた。
これをお手本にしたPDBファイルと比べてみよう。
f:id:k-kuro:20210317195608p:plain
ほほー。確かにそっくりだ。左はAtの4量体で右がトマトの予測構造。

CentOS7でsambaサーバ

やはりMacWindowsから共有できるファイルサーバを一つ立てておこうということで。

TX1310M3に起動ディスクとして1T (RAID1)、ファイル領域として4T (RAID1)を用意した。
ファイル領域は/mnt/disk2にマウントされている。
基本的にshareグループに入っているユーザがアクセスできるものとする。

共有ディレクトリとユーザグループの設定

# mkdir /mnt/disk2/share
# groupadd share
# chgrp share /mnt/disk2/share
# usermod -aG share kuro

smb.confの編集

# nano /etc/samba/smb.conf

# cat /etc/samba/smb.conf

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

#	printing = cups
#	printcap name = cups
        load printers = no
#	cups options = raw

[homes]
       	comment = Home Directories
        valid users = %S, %D%w%S
	browseable = No
	read only = No
	inherit acls = Yes

#[printers]
#	comment = All Printers
#	path = /var/tmp
#	printable = Yes
#	create mask = 0600
#	browseable = No

#[print$]
#	comment = Printer Drivers
#	path = /var/lib/samba/drivers
#	write list = @printadmin root
#	force group = @printadmin
#	create mask = 0664
#	directory mask = 0775

[Share]
        path = /mnt/disk2/share
        writable = yes
        create mode = 0770
        directory mode = 0770
        guest ok = no
        valid users = @share
	read only = no

SELinuxの設定&
起動してファイヤウォールに穴をあける

# semanage fcontext -a -t samba_share_t "/mnt/disk2/share(/.*)?"
# restorecon -R -v /mnt/disk2/share
# systemctl start smb nmb
# firewall-cmd --add-service=samba --permanent

sambaユーザのパスワード設定

# smbpasswd -a kkuro

完成。

SELinuxの設定がちょっとわかりにくいところ。

ラボ内サーバ体制の見直し

これまで、Fujitsu Primergy RX1330m3 をNGS解析用Cluster head node兼データベースサーバ兼WEBアプリサーバ兼開発プラットフォームというふうにフルに使っていた。
しかしデータベース&WEBアプリをラボメンバーがよく使うようになってきて、NGS解析で無理なジョブ走らせたり、アプリのテストなどしているとデータベースにつながらない、アプリが動かなくなった、と苦情を受けることが多くなってきたので計算資源を再編することにした。

RX1330m3はデータベースと統計処理等のWEBアプリサービスに専念させ、解析用クラスタヘッドノード、アプリ開発テスト環境用にほぼ同スペック(XEON E3-1230v6, 64GBメモリ搭載)のサーバを調達した。

サーバ   CPU               メモリ           				HDD
#database server
Fujitsu RX1330M3 E3-1230v6(4C/8T, 3.50GHz)   DDR4-2400 (PC4-19200E) UDIMM 64GB		4T (RAID1)

#cluster
THIRDWAVE R121-340 E3-1230v6(4C/8T, 3.50GHz)   DDR4-2400 (PC4-19200E) UDIMM 64GB		2T (RAID1)
Fujitsu RX300S7  E5-2667(6C/12T, 2.90GHz)x2  DDR3-1600 (PC3L-12800R) LV-RDIMM 32GB		300G (RAID1)
Fujitsu RX300S7  E5-2643(4C/8T, 3.30GHz)x2  DDR3-1600 (PC3L-12800E) LV-UDIMM 24GB		300G (RAID1)
Fujitsu RX200S7  E5-2630(6C/12T, 2.30GHz)x2  DDR3-1333 (PC3-10600R) RDIMM 44GB			300G (RAID10)
Fujitsu RX300S7  E5-2620(6C/12T, 2.00GHz)x2  DDR3-1600 (PC3L-12800R) LV-RDIMM 24GB		147G (RAID1)

#file server
NEC Express5800R110e-1e Pentium G2020 (2C/2T, 2.9GHz)  DDR3-1333 (PC3-10600E) UDIMM 4GB   8T (RAID1)

#file backup
Terastation5400R 																			 9TB (RAID5)

ユーザはRX1330M3においたNISサーバで一元管理し、一般データはFileサーバに置くようにしている。
データベースサーバのデータバックアップとしてTerastationに置く。

Mac用のデータバックアップをどうするかが悩みどころ、結局利用していないTX1310をデータバックアップサーバにするのもいいんだけど、いろいろ面倒だなあ。

グラフの要素を平均やボックスプロットに重ねる

以前より作っていたグラフ描画用ウェブアプリをバージョンアップしてつかいやすくした。
ボックスプロットやバーグラフに各要素点をかんたんに重ねることが可能になった。
f:id:k-kuro:20210126155628p:plain

これでNatureにも投稿し放題だね。

いよいよExcelは必須ではなくなってきたな。

pandasで読み込んだデータフレームからかんたんにグラフを作る

例えばStudent's T testをやるついでにグラフも描いとこうというような場合。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("./ttest.txt")
des = df.describe()
print(des)
# plt.figure()
des[des.index=='mean'].T.plot.bar(yerr=des[des.index=='std'].values,capsize=2)
# plt.savefig("./ttest.png")
# plt.close('all')

こんな感じで

f:id:k-kuro:20210125204546p:plain
こんな感じにサクッとグラフを描ける。

図をファイルとして保存したければコメントしている部分を外すだけ。

CentOS Stream 8をインストールしてみる

CentOSの行く末が不安なので、今のうちにとりあえずCentOS Streamの方を使ってみておくというのもよかろうということでCentOS7の仮想環境上にCentOS Stream 8をインストールしてみる。

インストール自体はとくに変わったところもなく順調に終了。
インストールしおわってから気がついたがminimal installの選択肢がなかったような。

何事もなかったようにデスクトップ画面が立ち上がってきた。
f:id:k-kuro:20210117163322p:plain
gnomeの画面もUbuntuと同じ感じになっているな。

f:id:k-kuro:20210117163528p:plain

流石に最新の環境を追求しているだけあって、Linuxbrewも一発で入った。

安定性を気にしない解析環境ならこれもありかもしれない。

MacOSのsafariで「ファイルを選択」ボタンが押せない

f:id:k-kuro:20210113205355p:plain

こういうファイルアップロードのボタンがいつの頃からか押せなくなってた。

High sierraを使っている自宅Mac miniやCatalinaのMBAでは押せるので、職場のMojaveだけで起こっている現象のようだ。

ちなみに
f:id:k-kuro:20210113205549p:plain

どうもMojaveでSafariを14.0.1以上に上げるとこの現象が出ているっぽい。で、解決策はない。
Catalinaにあげるしかないのか?そろそろあげどきだとは思っていたけど。

今日は仕事をこれまでにしとけというお告げと思って、OSバージョンアップやろう。
しかしCatalinaへのバージョンアップは先日iMacで失敗しているので怖いな。仕事用だけにバックアップ確実にとっとかないとな。

vncserverが起動しなくなった。

.vncディレクトリのログファイルを見ると

Xvnc TigerVNC 1.8.0 - built Nov 16 2020 16:47:50
Copyright (C) 1999-2017 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12004000, The X.Org Foundation


Mon Jan  4 09:30:20 2021
 vncext:      VNC extension running!
 vncext:      Listening for VNC connections on all interface(s), port 5903
 vncext:      created VNC server for screen 0

(imsettings-check:2945): IMSettings-WARNING **: 09:30:23.960: Could not connect: 接続を拒否されました

(imsettings-check:2945): GLib-GIO-CRITICAL **: 09:30:23.960: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed
/etc/X11/xinit/xinitrc.d/popup.sh: 3 行: cd: /usr/local/MegaRAID Storage Manager/MegaPopup: 許可がありません
/etc/X11/xinit/xinitrc.d/popup.sh: 13 行: cd: OLDPWD が設定されていません
/etc/X11/xinit/xinitrc.d/popup.sh: 行 12: ./popup: そのようなファイルやディレクトリはありません

** (process:2897): WARNING **: 09:30:23.989: Could not make bus activated clients aware of XDG_CURRENT_DESKTOP=GNOME environment variable: Could not connect: Connection refused
/home/kuro/.vnc/xstartup: 5 行:  2897 Terminated              sh /etc/X11/xinit/xinitrc
Killing Xvnc process ID 2883

はてさて、なんでだ?
rootユーザでは起動できるのに。

どうやらhomebrewのためのPATH設定と喧嘩しているらしい。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/local/bin:$HOME/bin

export PATH
#eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)

と最後の行をコメントアウトしたら起動した。

しかしそれでは困るな。

苦肉の策だが

PATH=$PATH:$HOME/local/bin:$HOME/bin:/home/linuxbrew/.linuxbrew/bin

export PATH

とPATHを通して使うこととする。他の環境変数がいらないのかどうかは試してみないと。

画像解析用サーバを考える。

兎に角デカイ画像ファイルを弄る必要があってメモリがMacminiじゃ足りない。
ということでサーバを一つ拵えようかと思っている。

スペックを考えるに
CPU:Xeon scalable (2nd Gen)で8コア以上
メモリ:128G以上、予算の許す限り。
MB:シングルCPUボードでもいいが、1CPUあたりのコア数を抑えて2CPUにするのもありかもしれない。
ケース:4Uのラックマウント型にしておくほうがいいか。
GPU:今のところ必須ではないがRTX3070あたりを1枚入れておくか。
HDD:4Tx2でRAID1

こんなところか。

大手メーカー製とか、生協で吊るしで売っているカスタマイズモデルってムダに高い気がするので、自作でいく。
SUPERMICROが色々カスタマイズしやすくて良さそう。

SuperWorkstation 5049A-T

SuperWorkstation 5049A-T

  • 発売日: 2019/07/03
  • メディア: Personal Computers
最初に見つけたのはこいつ。これをベースにするのはどうだろうか?
ケースの要件が一致してないが、これにXeon Gold1個乗っけてやるというのも潔いかもしれない。

次に検討したのがこっち。

これもタワー型だけど7049Aよりだいぶお安く2CPU対応。
これにこれを2つ乗っけるというのもありかもしれない。

いやまて、ラックマウントは捨てがたい。しかしSUPERMICROのシャーシは高いからMBだけ使うか?

これが上のタワー型で使われているMBらしいのでこいつを汎用サーバケースに入れてやればリーズナブルじゃないか。

これはPCI-Eの配置とSATAのコネクタの形状が違うがこっちのほうが使いよいか?

ケースはこれくらいがお手頃。頻繁にHDDを抜き差しすることもないからフロントからホットスワップとかでなくてもいいと思う。

グラボ

電源

メモリこれを4キットくらいいっとく。

ヒートシンクは純正でなくてもいいかもしれないが。

さあしめておいくら?

20/12/28時点では¥520,000くらいかな。まあまあいい感じじゃないの?

あ、HDD忘れてた。