canuのオプションでuseGrid=0としてグリッドエンジンを使わずに動かすのは簡単だけど、それだと時間がかかるので、グリッドエンジンを使って分散アセンブルをしたい場合。
スパコンで引っかかるのは、JAVAのメモリ指定回りが多い。
canuのLinuxバイナリをダウンロードして、canu-1.9/Linux-amd64/lib/site_perl/canu/Defaults.pm の1113行目付近に下記のようにversionを直接追加しておく。javaの起動が上手くいかず、バージョン指定が取れないからだけど、DDBJのスパコンは1.8なので、これで大丈夫っぽい。
$version=1.8;
もう一つ、canu-1.9/Linux-amd64/lib/site_perl/canu/OverlapMhap.pm の367行目と、475行目で確保するメモリを下記のように半分にしておく。とりあえずはこれで5 Gbp程度のナノポアデータからバクテリアゲノムはアセンブル出来た。
367行目:
print F "$javaPath $javaOpt -XX:ParallelGCThreads=", getGlobal("${tag}mhapThreads"), " -server -Xms", $javaMemory/2, "m -Xmx", $javaMemory/2, "m \\\n";
475行目:
print F " $javaPath $javaOpt -XX:ParallelGCThreads=", getGlobal("${tag}mhapThreads"), " -server -Xms", $javaMemory/2, "m -Xmx", $javaMemory/2, "m \\\n";
後は、グリッドエンジンの設定をcanuに伝えてあげる必要があって、実行時に例えば下記のように指定する。
./canu-1.9/Linux-amd64/bin/canu stopOnReadQuality=false stopOnLowCoverage=1 useGrid=1 maxMemory=64 maxThreads=8 -p out -d output_1 genomeSize=10m gridEngineResourceOption='-pe def_slot THREADS -l mem_req=MEMORY,s_vmem=MEMORY -l d_rt=1200:00:00 -l s_rt=1200:00:00' -nanopore-raw all.fastq
きっと、 -XX:+UseSerialGC とか、 XX:CompressedClassSpaceSize=32m とかをつけて頑張って調整すればもっとスマートに動くと思うけど、これらのオプションで適当に試した範囲ではコアダンプするまで行ったのがやっとだった。