というわけで引っ越してきた。
2018年10月31日19:20現在の訪問者数 1192384
ゼロから再スタート。
はてなダイアリーでできていたことがこっちではできなかったりするのな。
結構リンク元参照とか楽しめたのに。思いがけない出会いがあったり。
カレンダーから記事をたどるのも結構使ってたけどね。
停電や不慮の電源トラブルに備えてオムロンのUPSを導入した。
全サーバー群の電源を確保できるような大容量のUPSは高価なため、WEBサービス用データを保持しているヘッドノードとNFSサーバとして使っているTeraStationだけでもつないでおけるようにと、750Wのものを手配した。
うちのTeraStationはUPS連動して電源異常を感知すると一定時間後にシャットダウンできる機能がついている。一方、UPSの方にも同様のユーティリティソフトが付いていて、サーバのシャットダウンができるようになっているらしい。
しかし、ここで困ったことが。UPSから異常検知シグナルを送るポートはUSB1ポートしかない。
付属ソフトでは複数台のサーバを連動してシャットダウンできる。
TeraStationは複数台ネットに接続していれば連動してシャットダウンできる。
ところがサーバとTeraStationは連動できないみたい。
こりゃTeraStationの連動機能は使わずに、サーバのシャットダウンシークエンスにTeraStationのシャットダウンも組み込むしかないか?と思ったのだが、どうもTeraStationは普通に簡単なコマンド一発でシャットダウンできるようにはなっていないらしい。
どうすりゃいいのかというとwgetでwebベースのコントロールサイトにアクセスして、webからシャットダウンボタンを押したように見せかけないとならないみたい。
そのためにはBASIC認証でログインして〜と結構面倒そうだな。
http://www.argv.org/~chome/blog/noisefactory/2010/02/tera-stationremoteshutdown.html
古いTeraStationはそもそもUPS連動機能がなかったらしく、先人のスクリプトは発見した。
これをモディファイして、同じようなことができるようにしてやらないと。
RX300S7にCentOS7をインストール。
計算ノードとして。
300GB SASドライブにシステムインストール。
一般ユーザーは作成しない。
NFSでヘッドノードの/home以下、/usr/local以下をマウント
NISでヘッドノードで作成したユーザ情報を共有
NFSのホスト:rx1330m3
NISのホスト:rx1330m3.nis
NAS(NFS):192.168.1.10
今設定しようとしているドメイン:192.168.1.2 y0-rx200s7
# yum install ypbind rpcbind # yum install nano # nano /etc/hosts # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.1 rx1330m3 rx1330m3.nis 192.168.1.2 y0-rx200s7 192.168.1.3 y1-rx200s6 192.168.1.4 y2-rx200s6 192.168.1.5 y3-rx300s7 192.168.1.6 n1-rx300s7 192.168.1.7 n2-rx300s7 # authconfig --enablenis --nisdomain=nis --nisserver=rx1330m3 --enablemkhomedir --update # systemctl start rpcbind ypbind # systemctl enable rpcbind ypbind
NFSのauto mountを導入
# yum -y install nfs-utils # nano /etc/idmapd.conf # cat /etc/idmapd.conf [General] #Verbosity = 0 # The following should be set to the local NFSv4 domain name # The default is the host's DNS domain name. Domain = y0-rx200s7 ......... # systemctl restart rpcbind # nano /etc/fstab # cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Aug 13 13:07:11 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=********-****-****-****-************ /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 rx1330m3:/usr/local /usr/local nfs defaults 0 0 192.168.1.10:/mnt/array1/home /mnt/nfs nfs defaults 0 0 # yum -y install autofs # nano /etc/auto.master # cat /etc/auto.master ......... /- /etc/auto.mount # nano /etc/auto.mount # cat /etc/auto.mount /home -fstype=nfs,rw rx1330m3:/home # systemctl start autofs # systemctl enable autofs
torque-client設定
# yum install -y epel-release # yum install -y torque-client torque-mom # nano /etc/torque/server_name # cat /etc/torque/server_name rx1330m3 # nano /var/lib/torque/mom_priv/config # cat /var/lib/torque/mom_priv/config # Configuration for pbs_mom. $pbsserver rx1330m3 $usecp *:/home /home $usecp *:/mnt/nfs /mnt/nfs $log_file_suffix %h # firewall-cmd --add-port=15001/tcp --zone=public --permanent # firewall-cmd --add-port=15002/tcp --zone=public --permanent # firewall-cmd --add-port=15003/tcp --zone=public --permanent # firewall-cmd --add-port=15003/udp --zone=public --permanent # firewall-cmd --add-port=15004/tcp --zone=public --permanent # systemctl start pbs_mom # systemctl enable pbs_mom
あとはbrewではなくyumでそれぞれのノードにインストールしているものを入れる。
# yum -y install java # yum -y install perl
bedtoolsでbamファイルのread coverageを求める方法は以前にも書いた。
現在のbedtoolsのバージョン(2.27.1)ではbedファイルではなくbamファイルから直接read coverageを出すことが可能になっている
$ bedtools coverage -a referense.bed -b sample.bam > sample_cov.bed
というフォーマットで問題なく解析できるのだが。
ただしこの操作は非常にメモリを食うらしく、4GB超のbamファイルを解析しようとすると64GBのメモリを使い切ってスワップも15GBくらい使って、どうにもならなくなって落ちる。
ところが、
$ bedtools bamtobed -i sample.bam > sample.bed
と一旦bedに変換してから、先程のコマンドにつなげると、bedへの変換にはほとんどメモリを消費せず、coverageの計算も30GB程度のメモリで十分に収まることがわかった。
というわけで、bam直の解析はやめといたほうが良い。
ということでjavascriptベースの他の選択肢もあたってみたい。
pileup.js
http://www.hammerlab.org/pileup/
これはシンプルでいいかもしれないな。
しかしnpmというパッケージシステムでインストールする?Node.jsってなに?また新しいことをいろいろ覚えないとならないのかね。
genomicviz
https://github.com/akmorrow13/genomicviz
pileup.jsをpythonに埋め込んでる?
biodalliance
http://www.biodalliance.org
これいいんじゃない?
そもそもIGV.jsでうまく表示されないのはBAMファイルからbedtools intersectでデータを処理したあとなんだが、bedtoolsの処理に問題があってBAMファイルがおかしくなっているんじゃないかな。
その点を調査してみよう。
どうやらSafariがバージョンアップし、adobe flash player以外のプラグインがことごとく使用不能になったらしい。
そこで困ったのが大学のサーバへのVPN接続。
webからVPN接続のための認証を行っていたのに、mac_sslvpnが使えなくなって接続できなくなった。
そういえば接続が成立するとBIG-IPなんちゃら〜という表示が出ていたことを思い出し、WEBを検索。
スタンドアロンのVPNクライアントソフトウェア(接続ツール)というものがあるらしく、
一応App storeにも登録されたソフトウェアがあった。
https://itunes.apple.com/us/app/f5access/id1243219105?mt=12
これを起動し、Manage VPN Configurationsを開く。
いつもメールで送られてくる接続情報のリンクをサーバとして登録
ID・パスワードは都度変わるので空欄のままでよい
Connect to [作成した接続名]というところをクリックしてID・パスワードを入力。
無事接続。
ゲノムデータをreferenceにRNA-seqデータをマッピングしているのだが、ゲノムデータで使われているものとはことなる品種のRNA-seqデータをマッピングしてみたところ、かなりたくさんのSNPが含まれていることがわかった。
普通の発現解析なら、SNPがあろうがマッピングさえできれば良いわけだけど、いまやろうとしている仕事では100%マッチでマッピングされていることが重要なので、これではまずい。
ということでreferenceを使用品種のRNAseqデータで再構築してやりたい。本来的にはゲノムseqデータでde novo assemblyすれば良いわけだけど、これは大規模すぎるため、まずはRNA-seqデータでexon領域だけ、それも発現している遺伝子の部分だけ再構築してやることを目指す。
調べてみるとreference-based assemblyを行えば、referenceを再構築できそうなのだが、
https://bi.biopapyrus.jp/rnaseq/assembly/
肝心の方法はなかなか情報が得られない。
上のページでもできる、とは書いておきながら方法は書かれていないわけで。
http://seqanswers.com/forums/showthread.php?t=73620
ここでようやくそれらしい記述が。
velvetというとさっきのページでも紹介されていたゲノムのde novo assemblyをde Bruijn graph(ド・ブラングラフと読むらしい)で行うソフトウェアらしいのだが、これに付随するColumbus extensionを使うとreference-guided assemblyもできるらしい。
てことで
https://www.ebi.ac.uk/~zerbino/velvet/
からダウンロードして環境構築してみる。
普通に適当なところに解凍し、makeするだけで使えるようになる。
あとはとにかくマニュアルに従うだけなのだが、まずはColumbus extensionのマニュアルを紐解く。
1 For impatient people > head myRegions.fa >chr1:123456789-123457789 ATGTGTGTACTAGCTAGCGCGCTAGCTAGTCATGTGTGTACTAGCTAGCGCGCTAGCTAGTC [etc ...] > sort myReads.sam > mySortedReads.sam > velveth my_dir 21 -reference myRegions.fa \ -shortPaired -sam mySortedReads.sam > velvetg my_dir [etc ...]
せっかち向けって・・・
これだけ見てもまあどうすりゃいいかは案外わかるな。
ベンチマークソフトを使ってもいいけど、実際に仕事に使うスクリプトを処理するのにかかる時間を計測したほうが意味があるだろう。
ということで、試しにBAMファイルをcufflinksにかけて遺伝子発現量を算出させてみた。
処理してみたBAMファイルは
1, 4.4GBリード数74139744
2, 416KBリード数8653
3, 11KBリード数116
の3ファイル
サーバのスペックは
A, Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz 4core 8thread mem:64GB
B, Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz 6core 12thread x 2 mem:16GB
C, Intel(R) Xeon(R) CPU E5630 @ 2.53GHz 4core 8thread x 2 mem:26GB
さて、
$ cat arrayjob180901.sh.o379-15 18/09/01 21:58:26 [21:58:27] Loading reference annotation. [21:58:29] Inspecting reads and determining fragment length distribution. Processed 31122 loci. > Map Properties: > Normalized Map Mass: 29205450.00 > Raw Map Mass: 29205450.00 > Fragment Length Distribution: Truncated Gaussian (default) > Default Mean: 200 > Default Std Dev: 80 [22:00:12] Estimating transcript abundances. Processed 31122 loci. finish cufflinks [22:02:38] Loading reference annotation. [22:02:39] Inspecting reads and determining fragment length distribution. Processed 31122 loci. > Map Properties: > Normalized Map Mass: 8924.00 > Raw Map Mass: 8924.00 > Fragment Length Distribution: Truncated Gaussian (default) > Default Mean: 200 > Default Std Dev: 80 [22:02:44] Estimating transcript abundances. Processed 31122 loci. finish cufflinks2 [22:03:03] Loading reference annotation. [22:03:05] Inspecting reads and determining fragment length distribution. Processed 31122 loci. > Map Properties: > Normalized Map Mass: 2074.00 > Raw Map Mass: 2074.00 > Fragment Length Distribution: Truncated Gaussian (default) > Default Mean: 200 > Default Std Dev: 80 [22:03:08] Estimating transcript abundances. Processed 31122 loci. finish cufflinks3 18/09/01 22:03:27 finish 18/09/01 22:03:27
こんな感じに処理は行われた。
A,
1, 4min11sec
2, 25sec
3, 24sec
total 5min1sec
B,
1, 5min59sec
2, 36sec
3, 33sec
total 8min10sec
C,
1, 6min41sec
2, 45sec
3, 42sec
total 8min10sec
データを書き込む処理などで実際に計算にかかった時間より余分がついてはいるがざっとこんな感じかな。
Bの24スレッドがあんまり伸びないのはメモリがボトルネックになっているのかもしれない。クロックも控えめだしな。
なんだかんだいって最新CPUが一番速いという当たり前のような結果となった。
まあそうじゃなかったら新しい機種がどんどん開発されている意味がないわな。
あるとき再起動したあと、NISクライアントがuserを受け付けてくれなくなり、ちょっと途方に暮れる。
NISサーバがどういうわけか起動していないので再起動してみたが、エラーが出て起動してくれない。
systemd[1]: Starting NIS/YP (Network Information Service) Server... ypserv[3798]: ypserv: can not bind UDP: Address already in use systemd[1]: ypserv.service: main process exited, code=exited, status=1/FAILURE systemd[1]: Failed to start NIS/YP (Network Information Service) Server. systemd[1]: Unit ypserv.service entered failed state. systemd[1]: ypserv.service failed.
このように言われる。ypserv: can not bind UDP: Address already in useここが怪しいよな。
で、
# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 775 rpc 6u IPv4 9606 0t0 UDP *:sunrpc rpcbind 775 rpc 7u IPv4 9607 0t0 UDP *:944 rpcbind 775 rpc 8u IPv4 9608 0t0 TCP *:sunrpc (LISTEN) rpcbind 775 rpc 9u IPv6 9609 0t0 UDP *:sunrpc rpcbind 775 rpc 10u IPv6 9610 0t0 UDP *:944 rpcbind 775 rpc 11u IPv6 9611 0t0 TCP *:sunrpc (LISTEN) avahi-dae 796 avahi 12u IPv4 8051 0t0 UDP *:mdns avahi-dae 796 avahi 13u IPv4 8052 0t0 UDP *:40829 chronyd 915 chrony 1u IPv4 18064 0t0 UDP localhost:323 chronyd 915 chrony 2u IPv6 18065 0t0 UDP localhost:323 flask 1286 rnaseq 3u IPv4 37148 0t0 TCP mn-rx1330m3:commplex-main (LISTEN) rpc.ypxfr 1288 root 4u IPv4 25503 0t0 UDP *:945 rpc.ypxfr 1288 root 5u IPv4 25506 0t0 TCP *:945 (LISTEN) sshd 1292 root 3u IPv4 26903 0t0 TCP *:ssh (LISTEN) sshd 1292 root 4u IPv6 26905 0t0 TCP *:ssh (LISTEN) cupsd 1297 root 9u IPv6 21293 0t0 TCP localhost:ipp (LISTEN) cupsd 1297 root 12u IPv4 21294 0t0 TCP localhost:ipp (LISTEN) (以下略)
なんかポート944と945がrpcbindで使われている。どうしてまたわざわざ競合するのだ。
NISはポートを変動させると聞いていたので
/etc/sysconfig/network
# Created by anaconda NISDOMAIN=nis YPSERV_ARGS="-p 944" YPXFRD_ARGS="-p 945"
という感じに固定していたのだ。これをしないとfirewallを抜けれないので。
nfsの方はserviceとしてfirewallに設定しておけるので、変動しても構わないのに。
というわけで、一旦rpcbindをstopしてからypservをstartし、rpcbindをもう一度startしてやることで回避できた。
しかし、これはまた起こる可能性がある事象だし、どうにかならんのかな。
CentOS7でPXEサーバを立ててディスクレスブートを試しているのだが、どうにもNASのTeraStationがマウントできない。
マシンスペックが異なるがHDDでブートしているノードからはNFSで普通にマウントできているのだが。
どうしても
mount.nfs: timeout set for Wed Aug 29 13:10:35 2018 mount.nfs: trying text-based options 'vers=4.1,addr=192.168.0.100,clientaddr=192.168.0.10' mount.nfs: mount(2): Protocol not supported mount.nfs: trying text-based options 'vers=4.0,addr=192.168.0.100,clientaddr=192.168.0.10' mount.nfs: mount(2): Protocol not supported mount.nfs: trying text-based options 'addr=192.168.0.100' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: trying 192.168.0.100 prog 100003 vers 3 prot TCP port 2049 mount.nfs: prog 100005, trying vers=3, prot=17 mount.nfs: trying 192.168.0.100 prog 100005 vers 3 prot UDP port 36182 mount.nfs: mount(2): Protocol not supported mount.nfs: Protocol not supported
こんな感じにエラーが出る。
といってNFSが全く使えていないわけでもなく、/homeや /usr/localはヘッドノードのディレクトリをマウントできている。
何が違うかというと、ヘッドノードの方はvers=4.1ですんなりマウントできているところがTeraStationはどうやらversion3しか搭載していないようで、他のノードからもvers=3でマウントが成立している。
NFS ver3がPXEブートではだめなのかなということでSMB(CIFS)でのマウントを試すべく、
# yum install -y cifs-utils samba-client
と必要なものをインストールしてみるも
# mount -t cifs //192.168.0.100/home /mnt/nfs Password for root@//192.168.0.100/home: (no echo) mount error: cifs filesystem not supported by the system mount error(19): No such device Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
と、こちらもcifsがサポートされていないとすげなくエラー。
cifsを別のノードにインストールして同じようにマウントをしてみるとちゃんとマウントされるので、やはりPXEブートだけの問題のようだ。カーネルのバージョンも同じなんだけど、普通にインストーラでインストールしたわけではないのでモジュール等がちゃんと入っていないんだろうかね。
なんか面倒くさくなってきたので、HDD入れて起動することにする。