kuroの覚え書き

96の個人的覚え書き

AlmaLinux8.7に移行

新しいサーバマシンが導入されたため、環境をセットアップする。
これまでサーバはCentOS7を並列クラスタ、データベース用に使用し、AlphaFold2用GPUサーバに限ってUbuntu20.04をインストールしていた。
CentOS7のサポート期限が来年ということで、5年はあまり環境をいじらず使いたいので、バージョンを上げたいのだが、CentOS8はすでにサポートを切られてしまった。
そもそもCentOSの存在意義が変わってしまったので、いっそ他のディストリビューションに移行しようと思う。
候補としてUbuntuも考えたが、あんまり安定志向でないし、yumからaptに移るのもなんだかなあ、というわけでやめた。
RHELにすりゃいいっちゃあいいが、サブスクで使うならそもそもハードウェアもAWSでいいんじゃん、ってなわけで却下。
となるとRPM系でいくならOpenSUSE、Rocky Linux、AlmaLinux辺りだろう。で、今回AlmaLinuxを採用することにした。
バージョンはすでに9系まで行っているが、安定志向なので、あえての8系にとどめておくことにする。

  • サーバの構成

INSPUR NF3280A6 (AMD EPYC 7413 24C/48T)
memory: 256G
storage: 64TB RAID5

INSPUR NF3180A6 (AMD EPYC 7413 24C/48T)
memory: 256G
storage: 480 G SSD

INSPUR NF3180A6 (AMD EPYC 7413 24C/48T)
memory: 256G
storage: 480 G SSD

NF3280A6をヘッドノード兼用とした3ノードクラスタ。ネットワークは10Gイーサネットで構築。

  • OSのインストール

インストールは普通にDVDに焼いたインストーラで実施。(AlmaLinux 8.7)
ヘッドノードはサーバー版(GUI)をインストール。計算ノードは最小インストールを選択。
インストーラーはCentOS7のときと何ら変わっていないので間違いようがない。
RAIDの構成は別途必要。

klab.kuro.jp(仮)

  • ネットワーク構成
IPv4         hostname
10.0.1.90    k1-inspur-a6
10.0.1.89    k2-inspur-a6
10.0.1.88    k3-inspur-a6
  • NFSサーバ・NISサーバをインストール

ヘッドノードはHDDでRAIDを組んでおり、ファイルサーバも兼ねてもらう。
NISはRHEL8系では非推奨だが、ジョブスケジューラを使ったクラスタを構築する上で、設定が容易なので、当面はこれを使用することにする。
一般ユーザもこのヘッドノードサーバのみに作成する。

## SELINUXを無効化しておく
# nano /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
## 下行を変更
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

## 再起動して変更を有効にする
# reboot

# NFS サーバーの設定
# dnf -y install nfs-utils rpcbind
# nano /etc/idmapd.conf

## 5行目:コメント解除して自ドメイン名に変更
Domain = klab.kuro.jp

## NFS 共有に設定
# nano /etc/exports

/usr/local 10.0.1.0/24(rw,no_root_squash)
/home 10.0.1.0/24(rw,no_root_squash)

# systemctl enable --now rpcbind nfs-server 

## FirewalldにNFSサービスを許可
# firewall-cmd --add-service=nfs --permanent
# firewall-cmd --reload

## Ypserv をインストールして NIS サーバーを設定
# dnf -y install ypserv
# ypdomainname klab.kuro.jp
# nano /etc/sysconfig/network

NISDOMAIN=klab.kuro.jp
YPSERV_ARGS="-p 944"
YPXFRD_ARGS="-p 945"    #NIS関連サービスのポートを固定

## アクセス許可する NIS クライアントの範囲を指定
# nano /var/yp/securenets

255.0.0.0       127.0.0.0
255.255.255.0   10.0.1.0

## NIS ドメインに属するホストを登録 (サーバー/クライアント)
# nano /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.1.90 k1-inspur-a6.klab.kuro.jp k1-inspur-a6
10.0.1.89 k2-inspur-a6.klab.kuro.jp k2-inspur-a6
10.0.1.88 k3-inspur-a6.klab.kuro.jp k3-inspur-a6

# systemctl enable --now rpcbind ypserv ypxfrd yppasswdd nis-domainname

## NIS データベース更新
# /usr/lib64/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  k1-inspur-a6. klab.kuro.jp is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
        next host to add:  k1-inspur-a6.klab.kuro.jp
        next host to add:  # Ctrl + D キーを入力
The current list of NIS servers looks like this:

k1-inspur-a6. klab.kuro.jp

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/srv.world/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory '/var/yp/klab.kuro.jp'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory '/var/yp/klab.kuro.jp'

k1-inspur-a6. klab.kuro.jp has been set up as a NIS master server.

Now you can run ypinit -s k1-inspur-a6.klab.kuro.jp on all slave server.

## [/etc/hosts] へ登録した新規ホストをNISデータベースへ反映する
# cd /var/yp
# make 

## Firewalldに許可設定
# nano /etc/sysconfig/yppasswdd
## 該当行に追記
YPPASSWDD_ARGS="--port 950"

# systemctl restart rpcbind ypserv ypxfrd yppasswdd
# firewall-cmd --add-service=rpc-bind --permanent 
# firewall-cmd --add-port={944-951/tcp,944-951/udp} --permanent 
# firewall-cmd --reload 

計算ノードにNFSNISクライアントをインストールする

## NFSクライアントをインストール・設定
# dnf -y install nfs-utils

# nano /etc/idmapd.conf
## 5行目:コメント解除して自ドメイン名に変更
Domain = klab.kuro.jp

## 起動時にマウントするように設定
# nano /etc/fstab

/dev/mapper/almalinux-root /                       xfs     defaults        0 0
UUID=****************** /boot                   xfs     defaults        0 0
UUID=*************         /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/almalinux-home /home                   xfs     defaults        0 0
/dev/mapper/almalinux-swap none                    swap    defaults        0 0
## 以下に追記
k1-inspur-a6:/usr/local        /usr/local	nfs     defaults        0 0
k1-inspur-a6:/home             /home           nfs     defaults        0 0

## マウントポイントへのアクセス時に、動的に NFS 共有をマウントする
# dnf -y install autofs

# nano /etc/auto.master
## 最終行に追記
 /-    /etc/auto.mount

# nano /etc/auto.mount
## 新規作成 : [マウントポイント] [オプション] [ロケーション]
 /home -fstype=nfs,rw k1-inspur-a6:/home

## NISクライアントのインストールと設定
# dnf -y install ypbind rpcbind oddjob-mkhomedir
# ypdomainname klab.kuro.jp
# nano /etc/sysconfig/network

NISDOMAIN= klab.kuro.jp

# nano /etc/yp.conf
## 最終行に追記
# [domain (NIS ドメイン) server (NIS サーバー)]
domain klab.kuro.jp server k1-inspur-a6. klab.kuro.jp

# authselect select nis --force 
Backup stored at /var/lib/authselect/backups/2019-10-17-01-18-26.zBmEkS
Profile "nis" was selected.
The following nsswitch maps are overwritten by the profile:
- aliases
- automount
- ethers
- group
- hosts
- initgroups
- netgroup
- networks
- passwd
- protocols
- publickey
- rpc
- services
- shadow

Make sure that NIS service is configured and enabled. See NIS documentation for more information.

# systemctl enable --now rpcbind ypbind nis-domainname oddjobd 
# exit
  • Slurmのインストール

NF3280A6 (k1-inspur-a6)を管理ノード、ジョブ投入ノード兼計算ノードとし、
NF3180A6 (k2-inspur-a6、k3-inspur-a6)を計算ノードとする。

続く。

HomeディレクトリにLinuxbrewをインストールする

覚え

rcmdnk.com

【CentOS7】gccをソースからインストール | server-memo.net

結局

$ which gcc
/usr/local/bin/gcc
$ gcc --version
gcc (GCC) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

となったけど

$ brew install hello
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
dronedb

Warning: Building xz from source as the bottle needs:
- HOMEBREW_CELLAR: /home/linuxbrew/.linuxbrew/Cellar (yours is /home/kuro/.linuxbrew/Cellar)
- HOMEBREW_PREFIX: /home/linuxbrew/.linuxbrew (yours is /home/kuro/.linuxbrew)
==> Downloading https://downloads.sourceforge.net/project/lzmautils/xz-5.2.6.tar
Already downloaded: /home/kuro/.cache/Homebrew/downloads/f0d58652924441ff0e52ea2e154e2e949a3737d58d9b91052639afd4727c4e89--xz-5.2.6.tar.gz
==> Downloading https://ghcr.io/v2/homebrew/core/zlib/manifests/1.2.12_1
Already downloaded: /home/kuro/.cache/Homebrew/downloads/eb8a0a66a57927afa448fbd3ed7d26ba733902bc46538499b191b224fa4b90bd--zlib-1.2.12_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:c8e13538da968
Already downloaded: /home/kuro/.cache/Homebrew/downloads/da3369060a06b18eca8b27f2884116528c29a5d8b2252d91f5d38c3b013b73c6--zlib--1.2.12_1.x86_64_linux.bottle.tar.gz
==> Downloading https://ghcr.io/v2/homebrew/core/zstd/manifests/1.5.2-3
Already downloaded: /home/kuro/.cache/Homebrew/downloads/f1226cb81ee54df46f1bb53da8118ca107a4f229ac63dc9405f2519c9f6fb45e--zstd-1.5.2-3.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/zstd/blobs/sha256:006b5ab6a4616
Already downloaded: /home/kuro/.cache/Homebrew/downloads/fad42b2ea8e815a7377d5254c66ab075b4ff6731cd31f4073a5b69fbeb1b424d--zstd--1.5.2.x86_64_linux.bottle.3.tar.gz
==> Downloading https://ghcr.io/v2/homebrew/core/binutils/manifests/2.39_1
Already downloaded: /home/kuro/.cache/Homebrew/downloads/0e62125ed5cacf720aff507ece31b188bbc9b9f80c5a860eb9f7efb65d759f5b--binutils-2.39_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/binutils/blobs/sha256:efa7497e2
Already downloaded: /home/kuro/.cache/Homebrew/downloads/6b48e70fcf2d6cac042ea157418e4443cb64c6600ae8588375267caa97496480--binutils--2.39_1.x86_64_linux.bottle.tar.gz
==> Downloading https://ghcr.io/v2/homebrew/core/gcc/manifests/12.2.0-1
Already downloaded: /home/kuro/.cache/Homebrew/downloads/17f82b402f963fe2a37f78f96b2c576d044d8ae90286180fa458720f45d6484e--gcc-12.2.0-1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:c7f773f9af5607
Already downloaded: /home/kuro/.cache/Homebrew/downloads/8e39f41437b42328c2caa0cc411fc5efd9ac7ebb7a6058533b6f13239384480d--gcc--12.2.0.x86_64_linux.bottle.1.tar.gz
Warning: Building hello from source as the bottle needs:
- HOMEBREW_CELLAR: /home/linuxbrew/.linuxbrew/Cellar (yours is /home/kuro/.linuxbrew/Cellar)
- HOMEBREW_PREFIX: /home/linuxbrew/.linuxbrew (yours is /home/kuro/.linuxbrew)
==> Downloading https://ftp.gnu.org/gnu/hello/hello-2.12.1.tar.gz
Already downloaded: /home/kuro/.cache/Homebrew/downloads/75885520e988c7fe11cd90a933d9fc389e413d5c210aa889325bc61a90c482d4--hello-2.12.1.tar.gz
==> Installing dependencies for hello: xz, zlib, zstd, binutils and gcc
==> Installing hello dependency: xz
==> ./configure --prefix=/home/kuro/.linuxbrew/Cellar/xz/5.2.6
Last 15 lines from /home/kuro/.cache/Homebrew/Logs/xz/01.configure:

Initializing Automake:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether ln -s works... yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/tmp/xz-20220930-1461-1jyfg3p/xz-5.2.6':
configure: error: C compiler cannot create executables
See `config.log' for more details

READ THIS: https://docs.brew.sh/Troubleshooting

あいかわらすCコンパイラが働かないと言われてエラーが出る。
homebrewのスクリプトがどこかおかしなところを探しに出かけているのか?

Circosをインタラクティブに作成するShinyCircos

ゲノム解析論文でよく見かけるCircosなんだが、どうやって描いているのか調べると
Requirements // CIRCOS Circular Genome Data Visualization
こちらで配布されているアプリを使うらしいことがわかった。しかしこのアプリとっつきにくい。まあconfigをテキストで書いてその指示通りに画像を作るという仕組みなので、シンプルではあるんだが、パラメータが多すぎて、どこから手を付けていいのかわからない。そこで世の中にはこのアプリをバックエンドに用いて、GUIで使いやすくするような取り組みがたくさんなされている。まあそうなるわな。私も自分で作るつもりになって調べてみたらすでに作っていることを知ったわけだし。
いくつかプロジェクトはあるし、有料ソフトみたいなものもあるようだが、もともとRで書かれているアプリなのでRのpackageでGUIをラッピングしているのがシンプルに良いだろうと言うことでShinyCircosというものをためしてみることにする。
github.com
すでにwebサービスとしても公開されているらしいが、推奨としてはローカルにインストールしてね、もしくはサーバにインストールして使ってね、ってことだったので、まずはサーバに入れてみよう。

ターゲットはいつものCentOS7だ。
Rはローカルには入れているがサーバには入れていなかったのでまずはそこから。

$ sudo yum install R
$ which R
/usr/bin/R

でwebページに従って

> install.packages("shiny")  
> install.packages("circlize")  
> install.packages("RColorBrewer")
> install.packages("data.table")

ここまでは問題なくOK

> install.packages("RLumShiny")
 パッケージを ‘/home/kuro/R/x86_64-redhat-linux-gnu-library/3.6’ 中にインストールします 
 (‘lib’ が指定されていないため) 
 警告メッセージ: 
 パッケージ ‘RLumShiny’ が利用できません (for R version 3.6.0) 

あれあれ?これはなんだ?

いろいろ調べてみたけど解決できず・・・一旦CentOS7は置いておいてMacにローカルでインストールしてみるか。

MacにはRもRStudioも入っていたので、RStuidioを起動し、

> install.packages("shiny")  
> install.packages("circlize")  
> install.packages("RColorBrewer")
> install.packages("data.table")
> install.packages("RLumShiny")

お、問題なくインストールされた。

> source("https://bioconductor.org/biocLite.R")  
 エラー: With R version 3.5 or greater, install Bioconductor packages using BiocManager; see https://bioconductor.org/install

なに?
どうもBioconductorの使い方が変わっているらしいな。
Bioconductor: Genomicデータ解析ツール群 - Heavy Watal

> install.packages("BiocManager")
> BiocManager::install(c("GenomicRanges"))

こうするらしい。で、

> shiny::runGitHub("shinyCircos", "venyao")  


でけた。
このやり方だと、毎回起動するたびにGitHubからソースを一時フォルダにダウンロードすることになるので、ローカルにダウンロードしておいて

> library(shiny)
> runApp("/Applications/shinyCircos-master", launch.browser = TRUE)

とするといいようだ。

CentOS7へのインストールは課題だな。
とりあえず直接ダウンロードしてインストールしてみる。

$ wget https://cran.r-project.org/src/contrib/RLumShiny_0.2.3.tar.gz
$ R CMD INSTALL RLumShiny_0.2.3.tar.gz
* installing to library '/home/rnaseq/R/x86_64-redhat-linux-gnu-library/3.6'
エラー:このRはバージョン 3.6.0です。パッケージ 'RLumShiny' は R >=  4.0 を必要とします。

まず、CentOS7にyumでインストールできるRがR3.6.0だけど、RLumShinyが4.0以上を要求するらしい。
なので、epelから入れたR3.6をアンインストールして、代わりに4.0.5のソースをとってきてコンパイルしてインストールだな。

$ sudo yum remove --enablerepo=epel -y R 

$ ls /usr/bin | grep "R"

$ sudo rm -rf /usr/bin/R
$ sudo rm -rf /usr/bin/Rscript

$ wget https://cran.r-project.org/src/base/R-4/R-4.0.5.tar.gz
$ tar -zxvf R-4.0.5.tar.gz
$ cd R-4.0.5
$ sudo ./configure
・・・・・
configure: error: "--with-x=yes (default) and X11 headers/libs are not available"

ここでエラーが出る。
この対処として

$ sudo yum install xorg-x11-server-devel libX11-devel libXt-devel

OK

$ sudo ./configure
$ sudo make
$ sudo make check
$ sudo make install
$ R --version
R version 4.0.5 (2021-03-31) -- "Shake and Throw"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

これで良いはず。

$ sudo su - \
-c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""
$ wget https://download3.rstudio.org/centos7/x86_64/shiny-server-1.5.18.987-x86_64.rpm
$ sudo yum install --nogpgcheck shiny-server-1.5.18.987-x86_64.rpm

サーバのメモリ整理

なんだか、ツギハギに増設をしていたら気がついたら規格まちまちになってて、遅いものに足を引っ張られてるんじゃないかという気がしてきたので全部調べてみる。
# dmidecode -t memory

Server#0 RX200S7
Locator: DIMM-1A
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1B
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1E
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1F
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

あれ?M391B5773DH0-YK0ってPC3L-12800 unbuffered ECCだから1600 MT/sのはずなんだが。biosの設定のせい?

Server#3 RX300S7
Locator: Node0_Dimm0
Size: 8192 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT31GR7CFR4A
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm1
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm3
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm6
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm7
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm9
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-Y
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm0
Size: 8192 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT31GR7CFR4A
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm1
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm3
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm6
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm7
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm9
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-Y
Rank: 2
Configured Memory Speed: 1600 MT/s

こっちはすべてPC3L 12800Rでちゃんと1600出てる。
しかし見事にばっらばらだな。RANK1とRANK2の混在は問題ないんだろうか?

Server#m1
Bank Locator: Node0_Bank0
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M393B5170GB0-
Rank: 1
Configured Memory Speed: 1333 MT/s

こいつは同じ4GBが8枚
M393B5170GB0はPC3 10600Rなので規格通り。

Server#m2
Locator: Node0_Dimm0
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT125R7BFR8C
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm1
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm2
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm3
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm5
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm6
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm7
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm8
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm9
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s


Locator: Node1_Dimm0
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT125R7BFR8C
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm1
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm2
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm3
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm5
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm6
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm7
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm8
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm9
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

おや?こいつもmicronのPC3 10600Rなので1333 MT/sのはずだが、 と思ったらなんとHynixのPC3 8500Rのが混ざってる。こいつの遅さはこのメモリのせいか?外してしまおう。

と思ったが、結局全部10600だった。よくよく調べるとそもそもRX300 S7って2G PC3-10600Rは動作保証がないようだ。規格通りの速度が出ていないのはそのせいかも。

CentOS7にpyenv-virtualenvを噛ましてAnacondaを入れてETE3toolkitをインストールする

なんともややこしいが禁断のAnacondaをCentOS7に入れてみる。
とにかくメインのサービスの邪魔をしないように厳重に環境を切り分けておく必要がある。
単純なPythonの環境切り分けなら、venvが今風なんだろうけど、混ぜるな危険のcondaなのでちょっと面倒だがpyenvを使う。
特定のディレクトリの中だけでAnacondaを動作させるためにvirtualenvも入れておく。

まずは何はなくともpyenvとvirtualenvのインストール。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ source .bash_profile
$ pyenv install anaconda3-5.3.1
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Downloading Anaconda3-5.3.1-Linux-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-Linux-x86_64.sh
Installing Anaconda3-5.3.1-Linux-x86_64.sh...
Installed Anaconda3-5.3.1-Linux-x86_64.sh to /home/rnaseq/.pyenv/versions/anaconda3-5.3.1

$ pyenv virtualenv anaconda3-5.3.1 anac1
Solving environment: done

・・・・・

# To activate this environment, use:
# > source activate anac1
#
# To deactivate an active environment, use:
# > source deactivate
#

Looking in links: /tmp/tmp_ys7svrl
Requirement already satisfied: setuptools in /home/rnaseq/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (61.2.0)
Requirement already satisfied: pip in /home/rnaseq/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (21.2.4)

$ source activate anac1
pyenv-virtualenv: activate anac1
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

(anac1) $ source deactivate
pyenv-virtualenv: deactivate anaconda3-5.3.1/envs/anac1

$ mkdir anac1
$ cd anac1
$ pyenv versions
* system (set by /home/rnaseq/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
$ pyenv local anac1
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1

これで環境は整ったと思い、ETE3 toolkitを入れていこうと

(anac1) $ conda create -n ete3 python=3
pyenv: conda: command not found

The `conda' command exists in these Python versions:
  anaconda3-5.3.1

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.

ここで一旦つまづく。


(anac1) $ cd
$ pyenv global anaconda3-5.3.1
(anaconda3-5.3.1) $ conda create -n ete3 python=3
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.13.0

Please update conda by running

    $ conda update -n base -c defaults conda

・・・・・

# To activate this environment, use
#
#     $ conda activate ete3
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(anaconda3-5.3.1) $ cd anac1/
(anac1) $ pyenv local anac1
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3
(anac1) $ pyenv global system
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3
(anac1) [rnaseq@mn-rx1330m3 anac1]$ cd
$ pyenv versions
* system (set by /home/rnaseq/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3

一旦Anacondaをglobalに切り替えてインストール後globalをsystemに戻してやる。

(anac1) $ conda activate ete3
(ete3) (anac1) $ conda install -c etetoolkit ete3 ete_toolchain
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.13.0

Please update conda by running

    $ conda update -n base -c defaults conda

・・・・・



Downloading and Extracting Packages
ete3-3.1.2           | 2.1 MB    | ################################################### | 100% 
argtable2-2.13       | 2.8 MB    | ################################################### | 100% 
dialigntx-1.0.2      | 2.4 MB    | ################################################### | 100% 
numpy-1.19.2         | 21 KB     | ################################################### | 100% 
paml-4.8             | 7.1 MB    | ################################################### | 100% 
trimal-1.4           | 1.4 MB    | ################################################### | 100% 
pyqt-5.9.2           | 5.6 MB    | ################################################### | 100% 
numpy-base-1.19.2    | 5.2 MB    | ################################################### | 100% 
pip-21.2.2           | 2.1 MB    | ################################################### | 100% 
sip-4.19.8           | 290 KB    | ################################################### | 100% 
libxslt-1.1.34       | 573 KB    | ################################################### | 100% 
glib-2.69.1          | 1.9 MB    | ################################################### | 100% 
muscle-3.8.31        | 1.9 MB    | ################################################### | 100% 
gstreamer-1.14.0     | 4.0 MB    | ################################################### | 100% 
python-3.6.13        | 32.5 MB   | ################################################### | 100% 
fontconfig-2.13.1    | 299 KB    | ################################################### | 100% 
iqtree-1.5.5         | 6.8 MB    | ################################################### | 100% 
phyml-20160115.patch | 3.9 MB    | ################################################### | 100% 
jpeg-9e              | 273 KB    | ################################################### | 100% 
mkl-service-2.3.0    | 56 KB     | ################################################### | 100% 
freetype-2.11.0      | 943 KB    | ################################################### | 100% 
scipy-1.5.2          | 18.5 MB   | ################################################### | 100% 
expat-2.4.4          | 211 KB    | ################################################### | 100% 
libxcb-1.15          | 609 KB    | ################################################### | 100% 
setuptools-58.0.4    | 979 KB    | ################################################### | 100% 
intel-openmp-2022.0. | 8.5 MB    | ################################################### | 100% 
clustalo-1.2.4       | 2.0 MB    | ################################################### | 100% 
lxml-4.6.3           | 1.4 MB    | ################################################### | 100% 
gst-plugins-base-1.1 | 6.3 MB    | ################################################### | 100% 
mkl_random-1.1.1     | 382 KB    | ################################################### | 100% 
pmodeltest-1.4       | 727 KB    | ################################################### | 100% 
mkl-2020.2           | 213.9 MB  | ################################################### | 100% 
phylobayes-4.1c      | 26.7 MB   | ################################################### | 100% 
libgcc-7.2.0         | 304 KB    | ################################################### | 100% 
fasttree-2.1         | 272 KB    | ################################################### | 100% 
certifi-2021.5.30    | 141 KB    | ################################################### | 100% 
slr-1.4.3            | 638 KB    | ################################################### | 100% 
mafft-6.861          | 4.7 MB    | ################################################### | 100% 
ete_toolchain-3.0.0  | 2 KB      | ################################################### | 100% 
pcre-8.45            | 257 KB    | ################################################### | 100% 
qt-5.9.7             | 85.9 MB   | ################################################### | 100% 
libxml2-2.9.14       | 771 KB    | ################################################### | 100% 
dbus-1.13.18         | 586 KB    | ################################################### | 100% 
libpng-1.6.37        | 364 KB    | ################################################### | 100% 
raxml-8.2.11         | 10.4 MB   | ################################################### | 100% 
icu-58.2             | 22.7 MB   | ################################################### | 100% 
mkl_fft-1.3.0        | 185 KB    | ################################################### | 100% 
kalign-2.03          | 176 KB    | ################################################### | 100% 
six-1.16.0           | 19 KB     | ################################################### | 100% 
t_coffee-11.00       | 5.8 MB    | ################################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

無事インストールが完了した。AnacondaなしでのインストールとかMacにインストールはどうしてうまく行かないんだろう。

ただまあete3としてこれらを使う気は実はなくて、インストールされたツール群を自分のアプリから呼び出して使うつもりなのだが。
ete3として使うときはanac1ディレクトリに入って、

(anac1) $ conda activate ete3

としてやってからコマンドを叩くことになる。

ETE Toolkitで系統解析

ClustalWはお手軽にアライメントをとって系統樹を描くことが出来る。
しかしClustalWで出力されるdndファイルを使った系統樹は近年、系統樹としてはあまり信頼をされない。
ClustalWで実施される解析は近隣結合法(Neighbor joining method)で、計算量は極めて少なく、短時間で描写できるメリットは有るが信頼度としてはあまり高いとは言えない。
なので、大まかに系統を描いてざっくりとした分類をするくらいなら問題ないが、系統解析がメインの仕事に用いるにはちょっと役者不足と言われる。

そこで最尤法やBayes法による描写ができる環境構築を目指すことにした。目に止まったのはETE Toolkitというpythonパッケージ。
etetoolkit.org

まずはインストールしてみる。CentOS7サーバに入れていつものようにWebアプリに組み込みたい。
私はAnacondaは使わない方針なので、

$ sudo yum install PyQt4.x86_64 numpy.x86_64 python-lxml.x86_64 python-six.noarch
$ python3 -m pip install --upgrade ete3
$ ete3 upgrade-external-tools

と実施したが、

$ ete3 upgrade-external-tools
target directory? [/home/kuro/.etetoolkit/]:
Downloading latest version of tools...
Decompressing...
Compiling tools...
Compiling tcoffee ...Ok
Compiling clustalo ...argtable2 library is missing. Attempting to compile a local version
Ok
Compiling muscle ...Ok
Compiling dialigntx ...Ok
Compiling mafft ...Ok
Compiling kalign ...Ok
Compiling prank ...Ok
Compiling probcons ...Ok
Compiling trimal ...Ok
Compiling pmodeltest ...Ok
Compiling fasttree ...Ok
Compiling raxml ...Ok
Compiling phyml ...Ok
Compiling consel ...Ok
Compiling paml ...Ok
Compiling slr ...ERROR
Compiling slr. Check log /home/kuro/.etetoolkit/ext_apps-latest/slr.log

という感じでslrのコンパイルでエラーが出て止まってしまう。

$ cat /home/kuro/.etetoolkit/ext_apps-latest/slr.log
rm: `/home/kuro/.etetoolkit/ext_apps-latest/bin/Slr' を削除できません:そのようなファイルやディレクトリはありません
rm -f *~ *.o
rm: `../bin/Slr'を削除できません:そのようなファイルやディレクトリはありません
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o slr.o -c slr.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o like.o -c like.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree.o -c tree.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o data.o -c data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rng.o -c rng.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o model.o -c model.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o bases.o -c bases.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o codonmodel.o -c codonmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gencode.o -c gencode.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o utility.o -c utility.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o matrix.o -c matrix.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o optimize_new.o -c optimize_new.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o spinner.o -c spinner.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o options.o -c options.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree_data.o -c tree_data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o linemin.o -c linemin.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gamma.o -c gamma.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o statistics.o -c statistics.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o mystring.o -c mystring.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o nucmodel.o -c nucmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o root.o -c root.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o vec.o -c vec.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o brent.o -c brent.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rbtree.o -c rbtree.c
gcc  -o ../bin/Slr slr.o like.o tree.o data.o rng.o model.o  bases.o codonmodel.o gencode.o utility.o matrix.o optimize_new.o spinner.o options.o tree_data.o linemin.o gamma.o statistics.o mystring.o nucmodel.o root.o vec.o brent.o rbtree.o -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99 -L -lblas -llapack -lm 
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetrf.o): in function `dgetrf_':
dgetrf.f:(.text+0x348): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf.f:(.text+0x3f9): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetri.o): in function `dgetri_':
dgetri.f:(.text+0x335): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x47d): undefined reference to `dswap_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x505): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x59f): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsyev.o): in function `dsyev_':
dsyev.f:(.text+0x508): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsytrd.o): in function `dsytrd_':
dsytrd.f:(.text+0x386): undefined reference to `dsyr2k_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytrd.f:(.text+0x6a7): undefined reference to `dsyr2k_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrtri.o): in function `dtrtri_':
dtrtri.f:(.text+0x140): undefined reference to `_gfortran_concat_string'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x27a): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x2c4): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x570): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x5f1): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsteqr.o): in function `dsteqr_':
dsteqr.f:(.text+0xab0): undefined reference to `dswap_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(xerbla.o): in function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x69): undefined reference to `_gfortran_transfer_character_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x79): undefined reference to `_gfortran_transfer_integer_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x81): undefined reference to `_gfortran_st_write_done'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x8a): undefined reference to `_gfortran_stop_string'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetrf2.o): in function `dgetrf2_':
dgetrf2.f:(.text+0x18e): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x1f6): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x35c): undefined reference to `idamax_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x425): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlatrd.o): in function `dlatrd_':
dlatrd.f:(.text+0x125): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x1a3): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x29e): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x326): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x3a0): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x425): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x4a2): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x4f0): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x55d): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x5c1): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x6f5): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x738): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x788): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x7d2): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x880): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x8f7): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x99a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0xa16): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0xa9f): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlatrd.o):dlatrd.f:(.text+0xb16): more undefined references to `dgemv_' follow
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsytd2.o): in function `dsytd2_':
dsytd2.f:(.text+0x1b3): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x1ff): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x249): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x28b): undefined reference to `dsyr2_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x46d): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x4cc): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x529): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x58a): undefined reference to `dsyr2_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrti2.o): in function `dtrti2_':
dtrti2.f:(.text+0x159): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x17d): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x2e5): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x310): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfg.o): in function `dlarfg_':
dlarfg.f:(.text+0x39): undefined reference to `dnrm2_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x16f): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x1fc): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x255): undefined reference to `dnrm2_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfb.o): in function `dlarfb_':
dlarfb.f:(.text+0x1a5): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x22a): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x299): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x313): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x4ac): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x513): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x582): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x5ee): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x71c): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x783): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x7f2): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x85e): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x995): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xa29): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xa98): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xb24): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xc7a): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xd09): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xd79): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xe06): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xf44): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xfb3): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1023): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1090): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x11cf): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1251): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x12c1): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x133c): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1475): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x14e6): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1556): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x15c3): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x16c4): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1734): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x17b1): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1835): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x18a3): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfb.o):dlarfb.f:(.text+0x191e): more undefined references to `dgemm_' follow
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarft.o): in function `dlarft_':
dlarft.f:(.text+0x4c4): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x543): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x6db): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x87d): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x91b): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0xa6a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dorg2l.o): in function `dorg2l_':
dorg2l.f:(.text+0x221): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dorg2r.o): in function `dorg2r_':
dorg2r.f:(.text+0x2e6): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarf.o): in function `dlarf_':
dlarf.f:(.text+0x13a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x185): undefined reference to `dger_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x206): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x250): undefined reference to `dger_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `Matrix_Matrix_Mult':
matrix.c:(.text+0x7c): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `Matrix_MatrixT_Mult':
matrix.c:(.text+0x123): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `MatrixT_Matrix_Mult':
matrix.c:(.text+0x1bc): undefined reference to `dgemm_'
collect2: エラー: ldはステータス 1 で終了しました
make: *** [Slr] エラー 1
cp: `../bin/Slr'をstatできません:そのようなファイルやディレクトリはありません
ls: /home/rnaseq/.etetoolkit/ext_apps-latest/bin/Slr にアクセスできません:そのようなファイルやディレクトリはありません

とな。
discussionを見ると同じような症状が書かれている。
Compiling slr ...ERROR

LAPACKライブラリをインストールせよ。とな。

$ brew install LAPACK

これだけではだめ。
liblapackとlibblasが/usr/lib/liblapack.aと/usr/lib/libblas.aにあることを確認。

$ ete3 upgrade-external-tools
target directory? [/home/kuro/.etetoolkit/]:

とインストールを開始したら、すかさず別のターミナルで

$ cd .etetoolkit/ext_apps-latest/src/slr/src
$ nano Makefile.linux

Makefileを開き、

LDFLAGS = -L$(BLASDIR) -lblas -llapack -lm

LDFLAGS = -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas -lm

に書き換える。なんとトリッキーな。

すると、やっぱりslrでエラーが出る。

$ cat /home/kuro/.etetoolkit/ext_apps-latest/slr.log
rm: `/home/kuro/.etetoolkit/ext_apps-latest/bin/Slr' を削除できません:そのようなファイルやディレクトリはありません
rm -f *~ *.o
rm: `../bin/Slr'を削除できません:そのようなファイルやディレクトリはありません
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o slr.o -c slr.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o like.o -c like.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree.o -c tree.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o data.o -c data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rng.o -c rng.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o model.o -c model.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o bases.o -c bases.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o codonmodel.o -c codonmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gencode.o -c gencode.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o utility.o -c utility.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o matrix.o -c matrix.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o optimize_new.o -c optimize_new.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o spinner.o -c spinner.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o options.o -c options.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree_data.o -c tree_data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o linemin.o -c linemin.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gamma.o -c gamma.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o statistics.o -c statistics.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o mystring.o -c mystring.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o nucmodel.o -c nucmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o root.o -c root.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o vec.o -c vec.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o brent.o -c brent.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rbtree.o -c rbtree.c
gcc  -o ../bin/Slr slr.o like.o tree.o data.o rng.o model.o  bases.o codonmodel.o gencode.o utility.o matrix.o optimize_new.o spinner.o options.o tree_data.o linemin.o gamma.o statistics.o mystring.o nucmodel.o root.o vec.o brent.o rbtree.o -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99 -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas -lm 
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrtri.o): in function `dtrtri_':
dtrtri.f:(.text+0x140): undefined reference to `_gfortran_concat_string'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(xerbla.o): in function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x69): undefined reference to `_gfortran_transfer_character_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x79): undefined reference to `_gfortran_transfer_integer_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x81): undefined reference to `_gfortran_st_write_done'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x8a): undefined reference to `_gfortran_stop_string'
collect2: エラー: ldはステータス 1 で終了しました
make: *** [Slr] エラー 1
cp: `../bin/Slr'をstatできません:そのようなファイルやディレクトリはありません
ls: /home/rnaseq/.etetoolkit/ext_apps-latest/bin/Slr にアクセスできません:そのようなファイルやディレクトリはありません

しかしエラーが減っている。

ん、よく見ると間違っているじゃないか。

LDFLAGS = -L/usr/lib/liblapack -llapack -L/usr/lib/libblas -lblas -lm

なんじゃないか?

いや同じエラーが出て止まるな・・・

未解決

AlphaFold2.1.0登場

さて、Alphafold2の公開から4ヶ月ほど経ったが、その間に出てきた多量体解析のアイデアなどを取り込んでver2.1がアップされた。
GoogleColabの方ではいち早くバージョンアップがされていたわけだが、gitの本体の方も正式に対応したということか。

アップグレードのキモとしては使用するデータベースを2つ更新、2つ追加ということになっている。
ダウンロードのやり方はmoriwakiさんのページを見てもらうwことにして、一点だけ。

Docker imageの構築の際、以前はrun_docker.pyのなかで、データベースのディレクトリや、結果の出力先を設定しておくことになっていたが、今回その設定は廃されて跡形もない。
代わりに解析の実行時に引数で

--data_dir='/mnt/ssd/af_database'  --output_dir='/mnt/ssd/af_results'

のように与えることになったようだ。

ちょっと悩んだので共有しとく。

富士通サーバPRIMERGY RX200S7にIvy BridgeのCPUは搭載可能か

駄目でした。ちーん。


そうとう今更なんだが・・・

RX200S7はE5-2600系Sandy Bridge世代のXeon CPUを搭載している。
Intelのtic-toc戦略によりSandy Bridgeとその次の世代のIvy Bridgeは同一アーキテクチャで基本互換性があることになっている。

この基本、ってところが問題で、CPUとマザーボードは必ずしもアーキテクチャがあっているから動作するわけではなく、ファームウェアbiosが対応していることが必要らしい。

そんなわけで、ソケットも一緒だし行けるかなあと買ってみたところ見事に轟沈。
電源を入れてもbiosどころか何も映らずエラーすら出ない沈黙。

なんというかE5のXeonなんて普通、業務用なわけで、あえて世代違いの換装なんて冒険しないのよね。故に情報もほとんど出回ってなくて、検索しても何も出てこなかった。ということで人柱になってしまいましたとさ。

RX200S7, RX300S7にE5-2650v2は使えませんからね。

AlphaFold2 総括

一部業界で話題沸騰のAlphaFold2だが、ソースの公開から一月ちょっと遅れで、ようやく自前サーバで解析できる環境を構築した。

要求スペック
2.5TB以上のSSD/HDD容量 (必須、SSD推奨)
CUDA11に対応しているNVIDIAGPU(推奨)
大容量(32GB以上)のRAM(推奨)

だそうで。
うちにあるサーバのスペック
HDD: 8TB (RAID0
GPU: NVIDIA GeForce GT710 (1GB)
RAM: 64GB
CPU: E3-1230v6

当初GPUがGT710しかなくて、それだと初期の段階でメモリー不足となって止まってしまった。
そこで、GPUなしの設定で試してみるも、途中でエラーが出て先に進まない、という結果に終わった。(結果として、このエラーの原因は与えたFASTAファイルの末尾に余計な*が入っていたためとのちに判明。GPUなしでも問題なかった可能性もある。)

その後GPU入手
GPU: NVIDIA GeForce RTX3060 (12G)

あいかわらずエラーで先に進まない、と悩んだが、一点目は先に書いたとおりFASTAファイルの不備、二点目はRTX3060とCUDA11.0の組み合わせの問題であった。RTX30シリーズはCUDA11.1以上でないと不具合があるらしい。githubから落としてきたファイルで、docker上で動作する方式を選択した場合、dockerイメージの構築の際に読み込むdocker/Dockerfileの中でCUDA11.1を選択しておく必要がある。なお、動作中のGPUをモニタリングする限り、GPUメモリは2Gは常に使用していたので、それ以上はないと動作しないんじゃなかろうか。

これら問題を解消した結果、無事にAlphaFold2が走り切るようになった。

Google colab版はMMseqs2を使っていてHHblitsを使う正式版よりも精度が落ちるとの話である。しかしこのHHBritsはやたらめったら時間がかかるようで、うちの環境ではここだけで6時間ほどかかる。google colab版では5分ほどで完了することを考えると、精度向上との天秤かなあ。しかしGoogle colabの結果も素人目にはほとんど差がわからないのだが。

f:id:k-kuro:20210829101127p:plainf:id:k-kuro:20210829101148p:plainf:id:k-kuro:20210829101157p:plain
green: Arabidopsis Flowering locus T(FT) X線結晶構造解析
magenta: Ipomoea nil FT Full spec AlphaFold2
cyan: Ipomoea nil FT Google colab AlphaFold2

追記。
当初4TB のHDD(WD RED)をストライピングしたディスクにデータベースを入れていたのだが、これを4TBのSSD(SATAIII接続)に置き換えたところ劇的なスピードアップが実現した。
だいたい6時間ほどかかっていた解析が1時間程度で完了するようになった。結局の所データベースの読み出しに時間がかかっていた模様。というわけでさらにSATAIIIからNVMeにすればもっと速くなりそうな気もするが、うちの環境では結局pci-e3.0スロットに増設となるためちょっと面倒で、実効速度もそこまで上がらないかもしれない



AlphaFold2とは。
地球上の生物の体の大部分はタンパク質によって構成されている。いわゆる遺伝子とはタンパク質の設計図であり、多くの生物ではDNAとして情報を持っている。筋肉など体を構成したり、消化酵素をはじめ、体の機能性を維持するための酵素を形作るため、設計図であるDNAからタンパク質を合成する。(いま問題のCOVID19など一部のウイルスの遺伝子はRNAであるが、通常はタンパク質を作るとき、一時的な設計図のコピーとしてRNAが作られる。)
さて、DNAの設計図からどのようにタンパク質が作られるかというと、DNAの遺伝情報が4種類の塩基(A,T,G,C)で記述されていて、それらをもとに数十種類のアミノ酸が順に指定されており、まずそれらのアミノ酸を1次元的(紐状)に連結させたもの(ペプチド)を形成する。しかし、筋肉であったり、酵素であったり、最終的なタンパク質は3次元(立体)でなければ意味がなく、そのためには合成された1次元のペプチドをうまく折りたたむことで立体の構造をとらせるわけだ。ところがこの1次元のペプチドから3次元のタンパク質にどうやって折りたたむのか、ということの原理原則が実はまだ完全には解明されていない。個々のアミノ酸の特性や、繋がり方から、分子としての結合の角度などがある程度は計算することができ、ある程度の部分的な構造というのは予測できるが、アミノ酸の配列だけからは全体像の完全な予測がこれまでできていなかった。構造を知るには基本的にはX線構造解析など、実際にタンパク質を超高解像度で観察することで知るほかないが、これには莫大な時間、費用がかかるため、ごく一部のタンパク質でしか解析がされていない。
そこで昨今、各分野で開発が盛んなAIを用い、タンパク質の構造予測を実現しようというプロジェクトが各所で走り、しのぎを削ってきたわけだが、その中でダントツの解析精度を誇るプログラムとしてAlphaFoldが登場、そしてそのバージョンアップ版AlphaFold2が発表された。しかしDeep Mindという企業が開発したこともあり、高い精度が認められてはいたが、それを利用できるのは限られた研究チームでしかなかったのだが、先月、満を持してNatureに発表、そしてプログラムソースがオープンされたというわけだ。

AlphaFold2のその後2.2

いろいろわけがわからなくなってきている(特にPython絡み)ので、一旦minicondaもbrewで入れたpython3もアンインストールした。

(minicondaは~/miniconda3にインストールされているのでフォルダまるごとrm -rf)
(python3は $brew uninstall python3したあと$rm -rf /home/linuxbrew/.linuxbrew/bin/python3.9 これをやっておかないとpipで入れたモジュールが残り、python3をインストールし直したらそのまま復活してしまう。)

改めてpython3をbrewで入れ直し、今回はvirtualenvを入れる。
anaconda, minicondaはcondaとpipをまぜこぜに使うととたんに不整合が出るので、素のpython3にpipで環境構築したほうが結局はいい気がする。
その上でvirtualenvで環境を切り分けていこうかと思う。
メインのデータベースサーバはあまり複数の環境を切り替えることもないのでバーチャル環境はあえて入れていないが、機械学習関係はとかくバージョンの整合性が問題となるので、環境切り分けが重要そうだ。

ということで

python3 -m pip install virtualenv
virtualenv alphafold
source alphafold/bin/activate

これでvirtual環境に入り、

(alphafold) [kuro@tx1310m3 alphafold]$

プロンプトがこんなふうに変わることを確認
なお、virtual環境から抜けるには

deactivate

と入れる。

素の環境では

$ pip3 list
Package                           Version
--------------------------------- -------
backports.entry-points-selectable 1.1.0
distlib                           0.3.2
filelock                          3.0.12
pip                               21.2.4
platformdirs                      2.2.0
setuptools                        57.0.0
six                               1.16.0
virtualenv                        20.7.2
wheel                             0.36.2

だったが、
alphafold環境に入って

python3 -m pip install -r requirements.txt

とモジュールをインストールすると

$ pip3 list
Package                 Version
----------------------- -------------------
absl-py                 0.13.0
astunparse              1.6.3
biopython               1.79
cachetools              4.2.2
certifi                 2021.5.30
charset-normalizer      2.0.4
chex                    0.0.7
contextlib2             21.6.0
dm-haiku                0.0.4
dm-tree                 0.1.6
docker                  5.0.0
flatbuffers             1.12
gast                    0.4.0
google-auth             1.35.0
google-auth-oauthlib    0.4.5
google-pasta            0.2.0
grpcio                  1.34.1
h5py                    3.1.0
idna                    3.2
immutabledict           2.0.0
jax                     0.2.14
jaxlib                  0.1.70
keras-nightly           2.5.0.dev2021032900
Keras-Preprocessing     1.1.2
Markdown                3.3.4
ml-collections          0.1.0
numpy                   1.19.5
oauthlib                3.1.1
opt-einsum              3.3.0
pip                     21.2.4
protobuf                3.17.3
pyasn1                  0.4.8
pyasn1-modules          0.2.8
PyYAML                  5.4.1
requests                2.26.0
requests-oauthlib       1.3.0
rsa                     4.7.2
scipy                   1.7.0
setuptools              57.4.0
six                     1.15.0
tabulate                0.8.9
tensorboard             2.6.0
tensorboard-data-server 0.6.1
tensorboard-plugin-wit  1.8.0
tensorflow-cpu          2.5.0
tensorflow-estimator    2.5.0
termcolor               1.1.0
toolz                   0.11.1
typing-extensions       3.7.4.3
urllib3                 1.26.6
websocket-client        1.2.1
Werkzeug                2.0.1
wheel                   0.37.0
wrapt                   1.12.1

こうなった。
deactivateすると、もとのリストに戻ることも確認。

ちょっと気になるのはRTX30とtensorflowのバージョンの適合性。なんかこれ問題があったような気がしてきた。今更ながら。

コレだ。
github.com

docker/Dockerfileの15行目
ARG CUDA=11.0

ARG CUDA=11.1
にする。CUDA 11.0がRTX30に対応していないのが原因なので11.1に変えるということらしい。
コレで

W external/org_tensorflow/tensorflow/stream_executor/gpu/asm_compiler.cc:235] Falling back to the CUDA driver for PTX compilation; ptxas does not support CC 8.6

ここは解消するに違いない。
さあ、6時間後に歓喜の瞬間が来るか?


キターーーーーーーー!
長い道のりであった。
しかし1タンパク質の解析に7時間程度かかっているのはやはりSSD推奨のところをHDDでごまかしているからかな。SSDも買ってもらおう。そうしよう。