Hatena::ブログ(Diary)

kuroの覚え書き

[Vmax] [Macintosh/PC] [Network] [Make] [science] [Programing]

注:個人的覚え書きであり、いかなる内容も保証されるものではありません。
(ツッコミは歓迎しますが、全てに応えられるとも限りませんのであしからず。)

2018-08-22

[] 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が必要であった。

以下インストール手順(結構ハマった)

まずはLCI MegaRAIDの設定を行っておく。

電源スイッチを入れるとしばらくしてMegaRAIDがHDDを認識する画面が出るのでctl+Mで設定に入る。

VirtualDiskの設定をマニュアルに従って実施する。

http://jp.fujitsu.com/platform/server/primergy/manual/peripdf/b7fy-2551-01.pdf

ダウンロードしたドライバをUSBメモリに

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

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

インストールDVDをドライブに入れて起動

インストールを選択する画面ですかさずescキーを押す

プロンプトに

>linux dd modprobe blacklist=ahci

と入力

USBメディアを読み込むためrを押す

USBメディアの番号を入力

ドライバファイルの番号を入力

読み込むためcを押す

一つ前のメディア選択に戻るのでcを押す

インストーラが起動するので言語選択→諸々選択してインストールを実施する。

ドライバが上手くあたってないとディスクが選択できないのでやり直し。

2018-08-06

[][] 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を実行する。

2018-08-05

[] クラスタサーバ拡張計画

ここまでで

ヘッドノード(兼計算ノード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あたりの費用としてはあまり変わらないわけだが。

[]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)

インストールはこれでいい。

次はゲームパッドの設定

2018-08-02

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

まずはTerastationの設定。

これまでのところNFS以外はすべて切っていたが、Macから接続するならAFPが便利なのでAFPをオンにする。

WEBブラウザでterastationに接続し、ファイル共有設定画面でAFPのスライドスイッチを1にしておく。

f:id:k-kuro:20180804110306p:image

次にヘッドノードのポート開放とポートフォワーディング

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ーサーバ間のネットワークが貧弱すぎてちょっと躊躇するのね。やっぱりサーバ〜ルータ間に光ケーブル敷設するかなあ。

2018-07-21

[]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

2018-07-18

[]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

2018-07-17

[]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を計算ノードで再起動してやる。

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

2018-07-16

[] タイヤ交換

Vmaxタイヤ前後交換 

メッツラー SPORTEC M5

F:120-70/17ZR

R:160-60/17ZR

走行距離・・・・記録し忘れた。現在のトリップメーターで17kmのあたりだったはず。後で確認


114413kmだった。

前回交換が140306で101,425 kmだったので4年13,000kmほど使ったことになる。ミシュランpilotpower3案外保つな。

今度のメッツラーはどうだろう。

2018-07-14

[][] TORQUEつづき

どうもちゃんと動いていないような気がしてならないので、いろいろテストしてみる。

$ echo "sleep 30" | qsub -l nodes=1:ppn=8

こういうふうにジョブを投げると

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
97.HostA                  STDIN            rnaseq                 0 R batch

こんなふうに走る。

このコマンドを6個くらい連打すると

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
98.HostA                  STDIN            rnaseq                 0 R batch          
99.HostA                  STDIN            rnaseq                 0 R batch          
100.HostA                 STDIN            rnaseq                 0 R batch          
101.HostA                 STDIN            rnaseq                 0 R batch          
102.HostA                 STDIN            rnaseq                 0 R batch          
103.HostA                 STDIN            rnaseq                 0 Q batch 

このように5ジョブがR、1ジョブがQとなった。

-l nodes=1:ppn=8

としているので1ジョブで1ノードの8CPUを専有しているため、8/16/16の3ノードで5ジョブが走ったわけだ。

つまりちゃんとジョブ管理できているね。

$ echo "sleep 30" | qsub -l nodes=2:ppn=16

こんなふうに投げると2ノードを専有するため1ジョブしか走れなくなり

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
107.HostA                 STDIN            rnaseq                 0 R batch          
108.HostA                 STDIN            rnaseq                 0 Q batch

こうなる。

先日の動作試験ではHostAでしか動作しなかったのだが、スクリプトの書き方に問題があったのかもしれない。


TORQUEの場合、どうもどのノードで処理するかの指定が効かないし、実際にどのノードで走っているのかはわからないようだ。今のシステムのように計算ノードでCPUの種類や構成が違っている場合、指定ができたほうが割り振りが効率的にできそうな気もするのだが。

2018-07-12

[][] TORQUEとopenMPIをインストール

TORQUEのインストールは以前やった通り。3ノードがstatus: freeで認識された。

せっかくなのでmpiも入れてベンチマークなどもしてみたいのだが。

# yum install -y openmpi openmpi-devel

すべてのノードにインストール

使用するユーザ(root以外)についてPATHを足しておく。

export PATH=$PATH:/usr/lib64/openmpi/bin

インストール自体は簡単に終了したが、使い方が今ひとつわからない。

TORQUEのほうもqsubでアレイジョブを投げて見てもどうやらヘッドノードにしかジョブが割り振られない。なにかおかしいな。