kuroの覚え書き

96の個人的覚え書き

DNAのmultiple-FASTAファイルを翻訳してアミノ酸の配列を得る

個々のDNA配列からアミノ酸配列に変換するツールは数あれど、multi-FASTAにまとまっているDNA配列、それもATGーstopじゃなく5UTR-3UTRなどのcDNA配列から、読み枠をすべてサーチして最長のORFだけをリストにしてくれるツールはなかなかない。

http://shigen.nig.ac.jp/tools/translatorV2/

それが実現できるのがこのサイト。素晴らしい。感動した。




追記
2019年5月、久しぶりに使おうと思ったらサイトが閉じられていた・・・
異動されちゃったんかなあ。ほんと勘弁してほしいなあ。

PXEブートのまとめ

PRIMERGY RX200をネットワークブートでディスクレス運用するまとめ。

まず、クライアント側でPXEブートに使うネットワークポートを確認し、BIOSPXE enableに設定する。PRIMERGYの場合デフォルトで1つのポートだけPXE対応に設定されているはず。(2つ両方とも対応はできる)
クライアント側の準備はひとまずこれだけ。

サーバ側ですることは
DHCPサーバとTFTPサーバをインストールして起動する
ポートを開放する
起動イメージとroot領域を用意する
の3点。


PXEサーバのアドレスを192.168.1.1
クライアントのアドレスは192.168.1.100以降をDHCPで取得とする


まずはtftpサーバのインストール、設定、起動
# yum -y install syslinux xinetd sftp-server
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

# nano /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no                                      #yes→noに書き換え
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

# systemctl start xinetd
# systemctl enable xinetd

続きを読む

PRIMERGY RX200S7にCentOS7をインストール

結局RX200S7を追加入手。やすかったものでつい。
PRIMERGY RX200 S7 ラックベースユニット(2.5インチ×4) / PYR207RQN3
基本スペックは
CPU:xeon E5-2520 (2.0GHz 6core 12thread) *2
MEM:16GB UDIMM
HDD:なし
RAID:オンボードSATAソフトウェアRAIDのみ
CD/DVDドライブ:なし
CPUは結構強力(クロックは低いが12コア!)だけど、HDD周りはちょっと弱い。
最初オンボードSASも使えると思っていたが、いろいろ調べた結果SATAしか使えない事が判明。
例によってオンボードソフトウェアRAIDのドライバを用いないとCentOS7は入れられない。
RX1330M3で使ったドライバはmegasr2だったが、これではインストールできず
http://azby.fmworld.net/app/customer/driversearch/ia/drviadownload?driverNumber=F1019699
ここからダウンロードできるmegasrが必要であった。

以下MacRAIDドライバディスクを用意する場合

$ diskutil list

USBメモリのデバイス名を確認し、

$ diskutil unmountDisk /dev/diskxx

というふうにアンマウントする。
そのうえでダウンロードしたドライバをUSBメモリ

$ dd if=megasr-16.01.2014.0318.4fts-16.el7.5-000.x86_64.iso of=/dev/rdiskxx

というふうにddで書き込む


以下インストール手順(結構ハマった)
まずはLCI MegaRAIDの設定を行っておく。
電源スイッチを入れるとしばらくしてMegaRAIDがHDDを認識する画面が出るのでctl+Mで設定に入る。
VirtualDiskの設定をマニュアルに従って実施する。
http://jp.fujitsu.com/platform/server/primergy/manual/peripdf/b7fy-2551-01.pdf



インストールDVDをドライブに入れて起動
インストールを選択する画面ですかさずescキーを押す
プロンプトに
>linux dd modprobe.blacklist=ahci
と入力
USBメディアを読み込むためrを押す
USBメディアの番号を入力
ドライバファイルの番号を入力
読み込むためcを押す
一つ前のメディア選択に戻るのでcを押す
インストーラが起動するので言語選択→諸々選択してインストールを実施する。
ドライバが上手くあたってないとディスクが選択できないのでやり直し。

bwaでtranscript.faにマッピングしたあとcufflinksで解析するには

bwaを使ってRNAseqのリードをtranscript.faをリファレンスとしてマッピング、出来上がったBAMファイルからcufflinksでFPKMを得ようとしたが、gtfファイルが無いので、FPKMを計算すると、マッピング領域のゆらぎを反映して1つのtranscriptの中にいくつかのlocusを勝手に想定してFPKMが計算されてしまうということがおこる。

これを防いでtranscriptごとにFPKMを計算させるにはやはりgtfファイルを用意するしかなさそうだ。
入り口はtranscripts.faファイル。
まずは

$ samtools faidx transcripts.fa

fastaのindexを作成する。
transcriptsのfastaなのでヘッダ行にtranscript名、次の行に配列、となっているのでidxファイルは
transcript名 配列の長さ 配列の改行数
という形になっているので、これをgtfのフォーマットに合わせてawkで整形してやる。

$ awk '{print $1 "\tmarker\tCDS\t1\t" $2 "\t.\t+\t.\ttranscript_id \"" $1 "\"; gene_id \"" $1 "\";"}' transcripts.fa.fai > transcripts.gtf

gene_id, transcript_idをどちらもヘッダ行の内容にしておく。
出来上がったgtfファイルを用いてcufflinksを実行する。

Retro Pieをインストールする

PS2を持っているのだがDVDドライブが認識しなくなって、使えなくなってしまった。いくつかお気に入りだったり、攻略しきれていないものがあったりするのだが、どうにもならんなーと思っていたら、PS2までRaspberry Piでエミュレートできているらしいとの情報を得た。結局ラズパイの使いみちもゲームくらいなんだろうな。
すでに運用しているRaspbian jessieに追加インストールという手もあるが、別のSDを用意して差し替えて使うというのもいいかな。

ということで、インストールをこころみる。
https://retropie.org.uk
ここからイメージをダウンロードする。現時点でv4.4らしい。
.gzで圧縮されているので解凍し、ddコマンドでSDカードに焼き込む。

$ diskutil list

でSDカードが

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.7 GB    disk2
   1:                  Apple_HFS NO NAME                 31.7 GB    disk2s1

このように認識されていたので

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
$ sudo dd bs=1m if=/Users/kuro/Desktop/retropie-4.4-rpi2_rpi3.img of=/dev/disk2
2305+0 records in
2305+0 records out
2416967680 bytes transferred in 1398.879308 secs (1727789 bytes/sec)

インストールはこれでいい。
次はゲームパッドの設定

クラスタサーバ拡張計画

ここまでで
ヘッドノード(兼計算ノード0):PRIMERGY RX1330 M3 (Xeon E3-1220v6/64GB/2TB*2)
計算ノード1:PRIMERGY RX200 S6 (Xeon E5630*2/26GB/146GB*2)
計算ノード2:PRIMERGY RX200 S6 (Xeon E5630*2/26GB/146GB*3)
Network HDD:Terastation (3TB*4)
という構成でクラスタサーバを構築できた。
計算ノード0は最新CPUだが、構成的にはエントリーサーバ、計算ノード1,2は4世代前のCPUだが構成的にはミドルクラスサーバという感じで、実際に8スレッドでRNAseqのデータをトリミングーマッピングー発現解析まで実施してみると、どちらのノードでもだいたい同じくらいの時間で処理が完了しているっぽい。(処理内容にもよるかもしれないが、若干ノード0が速いか)

案外うまく構築できたので、気を良くして更に拡張してやろうかという気になってきた。
実際のところ、現在ハンドリングしているデータ量なら、今回構築したサーバでも1実験あたりのデータ処理が1日に収まるレベルであるため、此処から先は趣味の範疇になりそうだが。

その上で、拡張するならどういう構成がいいだろうか。

案1 計算ノード1,2と同等のサーバをガツンと増やす。
概要:CPUの世代がちょっと古く、クロックスピードがあまり高くないが、とにかく安い。
費用:サーバ本体1ノード2,500円(安!)ただし、大抵の場合1CPU構成でE5503(2core/2thread)なので、CPUをE5630あたり*2で1,000円位+追加ヒートシンク1,000円位+メモリCPUあたり12GBで2,000円位=合計6,500円位+送料合計3,500円位なので総計1万円/ノード
という感じ。

案2 RX100S7世代のサーバをぼちぼち増やす。
概要:CPUが1世代新しくなるが、エントリークラスになる。
費用:サーバ本体1ノード1,000円(安!)ただしPentium G620クラスCPU搭載なのでX3440あたりが1,000円程度+メモリ2G*4 1,000円位で総計3,000円+送料合計3,000円なので総計6,000円

CPUあたりの費用としてはあまり変わらないわけだが。

クラスタ内においたTerastationにクラスタ外のMacからAFPで接続する

まずはTerastationの設定。
これまでのところNFS以外はすべて切っていたが、Macから接続するならAFPが便利なのでAFPをオンにする。
WEBブラウザterastationに接続し、ファイル共有設定画面でAFPのスライドスイッチを1にしておく。

次にヘッドノードのポート開放とポートフォワーディング
AFPはport548を使用するようなので

# firewall-cmd --add-port=548/tcp --zone=internal --permanent
SUCCESS
# firewall-cmd --add-port=548/tcp --zone=external --permanent
SUCCESS
# firewall-cmd --reload
SUCCESS

とポートを貫通させておく。
次にヘッドノードに届いたAFPリクエストをクラスタ側のterastation(192.168.1.10)にフォワーディング

# firewall-cmd --zone=external --add-forward-port=port=548:proto=tcp:toport=548:toaddr=192.168.1.10 --permanent
SUCCESS
# firewall-cmd --reload
SUCCESS

これでOK
サーバもルータ配下にあるためセキュリティは甘め。

# firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: ssh dhcpv6-client http vnc-server
  ports: 5000/tcp 548/tcp
  protocols: 
  masquerade: yes
  forward-ports: port=548:proto=tcp:toport=548:toaddr=192.168.1.10
  source-ports: 
  icmp-blocks: 
  rich rules: 

Macからは
Finder>移動>サーバへ接続...

afp://(ヘッドノードのIPアドレス

とするとユーザ/パスワードの画面が開くのでterastationに設定したユーザを入れて接続

ただし、ルータの外からはフォワーディングを設定していないので接続不可。
ルータ外からはVNCでヘッドノードに接続しての作業に限定しておく。

いっそのこと普段作業しているMacに常時terastationおよびヘッドノードの/homeをマウントしておいて、データは常にそこにおいておくというのも手ではあるが、Macーサーバ間のネットワークが貧弱すぎてちょっと躊躇するのね。やっぱりサーバ〜ルータ間に光ケーブル敷設するかなあ。

XEON覚書

富士通 PRIMERGY RX200S6 xeon E56xx (Nehalem もしくはWestmere)
同世代のNEC→Expres5800/R120a-1 xeon E55xx, Expres5800/R120b-1 xeon E55xx, E56xx

富士通 PRIMERGY RX200S7 xeon E5-26xx (Sandy Bridge)
同世代のNEC→Expres5800/R120d-1 xeon E5-24xx, Expres5800/R120e-1 xeon E5-24xx,Expres5800/R120f-1 xeon E5-26xx

TORQUEでメモリリミットを設定する

中古サーバ主体のクラスタのため、メモリはあまり潤沢にあるとは言えない。(システムとしては1ノードあたり192GBまで乗せることができるが現状1ノードに12GBしか積んでない。26GBまでは増強予定だが。)
なので、無茶な計算をさせると一気にメモリを使い切ってスワップに入ってしまい、最悪クラッシュしてしまうので、ジョブごとにメモリ上限を設定しておきたいのだが。

SGE/UGEだと

#$ -l h_vmem=12G

のように-lオプションでスクリプトに書いておけばメモリ上限を設定できるはずなんだが、TORQUEで

#PBS -l mem=12G

としてもどうもちゃんと機能していないっぽい。

なにか情報が無いかと検索。日本語の情報は見つからないな。
http://www.clusterresources.com/pipermail/torqueusers/2011-December/013923.html

qmgr -c 'set queue large resources_default.pmem = 16gb'
qmgr -c 'set queue large resources_default.vmem = 16gb'

こんなふうにqueの設定として入れておくのが一つの手らしい。この場合、1コアあたりが使えるメモリ上限なので、うちの今のシステムだと12G/16core =768Mとなる?
計算ノードを兼ねているヘッドノードのみ64G/8core =8Gなので、ヘッドノードのみ使うqueを分けて設定しておくほうが良いな。
3ノードフルに使うときはメモリ上限を768M、ヘッドノードのみのときは8Gまで許容というふうに。


もう1点、ノードを使い分ける上で問題となるノードの指定がうまくできない。

#PBS -l nodes=HostA:ppn=8
#PBS -l nodes=1:ppn=8:HostA

どちらも

qsub: submit error (Job exceeds queue resource limits MSG=cannot locate feasible nodes (nodes file is empty, all systems are busy, or no nodes have the requested feature))

というエラーが出て受け付けてくれない。
そこで、というか別解として、ヘッド兼計算サーバと計算専用サーバの2グループを作って、グループ指定でやってみることにした。
ヘッドノードで

$ sudo nano /var/lib/torque/server_priv/nodes 

で、

    HostA np=8 A num_node_boards=1 numa_board_str=8
    HostB np=16 B num_node_boards=1 numa_board_str=16
    HostC np=16 B num_node_boards=1 numa_board_str=16

というふうにnp= の後ろにスペースを挟んでグループ名(A、B)を入れてpbs_serverを再起動

#PBS -l nodes=1:ppn=8:B

とするとグループBだけで動作する。A、B両方で計算させたいときは、これまで通り、なにもグループ指定しなければいい。
グループAは8Gまで使っていいけどグループBは768Mまでしか使わない〜っていうのを一緒に設定するのはちょっと無理かな。


参考
http://isotope.iis.u-tokyo.ac.jp/~kei/?plugin=attach&refer=IT%20memo%2Flinuxmemo4&openfile=103-Torque取扱説明.pdf

TORQUEで計算ノードからヘッドノードへoutput/errorが返せない

Unable to copy file /var/lib/torque/spool/147.HostA.OU to quser@HostA:/home/quser/test.sh.o147, error 1
*** error from copy
Host key verification failed.
lost connection
*** end error output
Output retained on that host in: /var/lib/torque/undelivered/147.HostA.OU

こんな感じのエラーメールが返ってきて、test.sh.o147が出力されない。

sshの鍵認証が必要なのかなとかいろいろ悩んだが
https://naozoblog.blogspot.com/2007/02/torque.html
こちらに解決策が。

ヘッドノードの/homeを計算ノードの/homeにマウントしているので
計算ノードの
/var/lib/torque/mom_priv/config

$usecp *:/home /home

を追記してpbs_momを計算ノードで再起動してやる。

これでエラーなく走り切るようになった。