サンプルジョブの実行方法(基礎生物学編)

はじめに

RCCS では分子科学系のアプリケーションの他に、基礎生物学向けのアプリケーションについて、サンプルジョブスクリプトを順次用意しております。

RCCS で用意したものをそのまま使う場合はもちろん、自身のディレクトリに導入した別バージョンを使う際のテンプレートとしても利用できます
以下では salmon を例にして、サンプルをどのように実行するのかを説明します。

導入済みアプリケーションのリスト

いくつかの方法があります。

1. ウェブページ上のアプリケーション情報を参照する

基礎生物学向けのパッケージプログラムを使用する際は、事前に設定ファイルを読み込む必要があります。

source /apl/bio/etc/bio.sh

パッケージプログラム一覧(基礎生物学) のページに掲載されている情報で確認できます。
(現在順次サンプルプログラムを作成中です。)

2. module avail コマンドの出力を見る

source /apl/bio/etc/bio.sh で設定ファイルを読み込み終わると、以下のように出力されます。通常、ジョブとして投入するようなアプリについては以下で赤で示した /apl/bio/etc/modulefiles 内にあります。
基礎生物学向けのパッケージプログラム以外は /apl/modules/apl 内にあります。

[user@ccfep3 ~]$ module avail
--------------------------- /apl/bio/etc/modulefiles ---------------------------
abyss/2.3.4                                        meryl/1.4.1
allpathslg/52415                                   metaeuk/7-bba0d80
allpathslg/52488                                   metaphlan2/2.7.6
AmpliconNoise/1.27                                 metaphlan4/4.0.4
AMRFinderPlus/4.2.7                                minialign/0.6.0
ARAGORN/1.2.41                                     minimap2/2-2.24
arcs/1.2.4                                         minimap2/2-2.30
atria/3.1.2                                        miniprot/0.18
augustus/3.5.0                                     MMseqs2/14-7e284
bakta/1.12.0                                       MMseqs2/17-b804f
...
(中略)
...
meme/5.4.1                                         vsearch/2.22.1
merqury/1.3                                        vsearch/2.29.0
meryl/1.4                                          wgs/8.2
----------------------------- /apl/modules/defaults ----------------------------
2022  2024  2025

----------------------------- /apl/modules/oneapi ------------------------------
compiler-rt/2022.0.2  intelmpi/2021.5.1     mkl/2022.2.1    tbb/2021.10.0
compiler-rt/2022.2.1  intelmpi/2021.7.1     mkl/2023.0.0    tbb/2021.11
...
(略)
...

Key:
loaded  directory/  auto-loaded  default-version  modulepath
[user@ccfep3 ~]$

(module avail コマンドはキーボードの q を押すか、画面の下までスクロールさせると終了します。)

3. /apl を参照する

alphafoldなど、OS 非標準のアプリやライブラリについては、/apl に導入されています。そちらで直接確認することもできます。

/apl/(アプリケーション名)/(バージョンやリビジョン) のようなディレクトリ構成となっています。

[user@ccfep3 apl]$ ls
ABINIT-MP       autodock       cuda        gsl         nbo         plumed
GRRM            autodock-gpu   cudnn       hpc-x       nciplot     psi4
LigandMPNN      autodock-vina  cudss       i-pi        ninja       pyenv
ProteinMPNN     bindcraft      cusparselt  imolpro     ntchem      qe
RFDiffusionAA   bio            dalton      julia       nvhpc       reactionplus
RFdiffusion     boltz          dftb+       lammps      nwchem      rosetta
RoseTTAFold-AA  boltzgen       dftd4       libtorch    omegafold   scalapack
abcluster       boost          dirac       luscus      oneapi      siesta
aiida           censo          eigen       lustre-dev  openbabel   tcl
alphafold       cmake          elsi        magma       openblas    tmolex
amber           colabfold      ffmpeg      modules     openmm      togl
aocc            conda          gamess      molden      openmolcas  turbomole
aocl            cp2k           gaussian    molpro      openmpi     vmd
apptainer       crest          genesis     mvapich     orca        xcrysden
autoconf        crystal        gromacs     namd        pbs         xtb

[user@ccfep3 apl]$ ls /apl/alphafold
2.0.0-20210720  README.miniforge  mini2_init.csh            run-af-21x.sh
2.0.0-20210819  af300-2_init.csh  mini2_init.sh             run-af-22x.sh
2.1.0           af300-2_init.sh   mini3_init.csh            run-af-232.sh
2.1.1           af300_init.csh    mini3_init.sh             run-af-23x.sh
2.2.0           af300_init.sh     miniforge-3.0.0-20250116  run-af-300-2.sh
2.3.1           databases         miniforge1                run-af-300.sh
2.3.2           databases3        miniforge1-3.0.0          samples
3.0.0           hmmer-3.4         miniforge2
3.0.0-20241126  mini1_init.csh    miniforge3
3.0.0-20250116  mini1_init.sh     run-af-200.sh

[user@ccfep3 apl]$ ls /apl/alphafold/3.0.0-20250116/
CMakeLists.txt                    docs
LICENSE                           fetch_databases.sh
OUTPUT_TERMS_OF_USE.md            pyproject.toml
README.md                         requirements.txt
WEIGHTS_PROHIBITED_USE_POLICY.md  run_alphafold.py
WEIGHTS_TERMS_OF_USE.md           run_alphafold_data_test.py
dev-requirements.txt              run_alphafold_test.py
docker                            src

サンプルスクリプトの場所

基礎生物学向けの各アプリのサンプルスクリプトは原則として以下のディレクトリに置いてあります。

  • /apl/bio/package/(アプリ名)/samples
  • /apl/bio/container/(アプリ名)/samples

例: salmon のサンプルを /apl/bio/package から探す

(base) [ebw@ccfep3 package]$ ls
AGAT                   HpcGridRunner            SMRTAnalysis   bedops      cutadapt        glimmerhmm   meryl           phylip           src
AMRFinderPlus          Infernal                 SMRTLink       bedtools    db2fasta        gmap         metaeuk         phyml            stacks
ARAGORN                LINKS                    SOAP           biotoolbox  dbget           graphlan     metaphlan2      picard-tools     strcalc
Alphafold3             LTR_retriever            SOAPdenovo     blasr       deepconsensus   h_bin        microbiomeutil  plink            stringtie
AmpliconNoise          LongStitch               SPAdes         blast       diamond         hh-suite     minialign       plottree         subread
BRAKER                 MATLAB_Compiler_Runtime  STAR           blast+      discovar        hifiasm      miniconda3      prank            tRNAscan-SE
CAP3                   MMseqs2                  SeqPrep        blat        discovardenovo  hisat2       minimap2        primer3          t_coffee
CAT_pack               MUMmer                   TD2            bowtie      edirect         hmmer        miniprot        psipred          tabix
ConsensusCore          MaSuRCA                  TETools-1.6    bowtie2     eggnog-mapper   htslib       mothur          pyenv            tbb
ConsensusCore2         NECAT                    TEsorter       breseq      elprep          humann2      mrbayes         python3          telomerecat
DROMPA3                NINJA                    TGICL          btllib      exonerate       infernal     muscle          raxmlHPC         tigmint
Dali                   OrthoFinder              TSEBRA         busco       express         iprscan      nextflow        rdp_classifier   tmhmm
DaliLite               PASApipeline             TransAnnot     bwa         falcon          iupred       nf-core         repeatexplorer   tophat
EDirect                PILERCR                  TrimGalore     bwa-mem2    fasta           jdk          nim             rnammer          transdecoder
EIG                    Phrap                    Trinityrnaseq  canu        fastp           jellyfish    njplot          roche            tree-puzzle
EMBOSS                 Phred                    abyss          cd-hit      fasttree        jemalloc     nseg            rsync            trf
EVidenceModeler-1.1.1  Prodigal                 alf            cdbfasta    fastx_toolkit   kSNP         ntLink          rtax             trimal
FALCON-integrate       ProtHint                 allpathslg     cellranger  fc_env          kalign       openmm          ruby             tssfinder
FAMSA                  Qualimap                 amos           clearcut    foldseek        kallisto     parallel        salmon           ublast
FCS                    R                        arcs           clustalo    freebayes       last         paup            samtools         ucsc
FamDB                  RECON                    atria          clustalw    gatk            lastz        pbalign         seqkit           usearch
FastME                 RMBlast                  augustus       clustalw2   genomeGTFtools  libpng       pbcommand       snap             vbz_compression
FastQC                 RSEM                     aws            cmake       genometools     libsequence  pbh5tools       snpEff           vcftools
Flye                   RSeQC                    bakta          codonW      genscan         macs         pblat           snp_sites-1.5.0  velvet
GRIT                   Red                      bam2fastx      consed      gffcompare      macs2        pbmm2           sortmerna        virtuoso
GUSHR                  RepeatAfterMe            bamtools       corset      gffread         mafft        pbzip2          sourcetracker    vsearch
Gblocks                RepeatMasker             bcftools       cpanm       ghostx          maven        pcre2           sprai            wgs
GeneMark               RepeatModeler            bcl2fastq      csblast     git             meme         pdbfixer        sqlite3          wwwblast
GenomicConsensus       RepeatScout              beagle         cufflinks   glimmer         merqury      perl            sratoolkit       xpclr

[user@ccfep3 package]$ ls /apl/bio/package/salmon
1.10.0  1.10.1  1.8.0  samples

[user@ccfep3 package]$ ls /apl/bio/package/salmon/samples
sample_salmon_paired.sh  sample_salmon_single.sh

サンプルディレクトリ内のファイルについて

サンプルディレクトリ内には、テスト計算用のインプットデータと、それを実行するためのジョブスクリプトが含まれています。
ジョブスクリプトは、入力データの形式(シングルエンド・ペアエンドなど)や計算条件に合わせて複数用意されている場合があります。

  • 例1: sample_se.sh => シングルエンド (Single-end) データを使うサンプル
    例2: sample_pe.sh => ペアエンド (Paired-end) データを使うサンプル

例: salmon の場合

実行スクリプトが2つあります (sample_salmon_single.sh, sample_salmon_paired.sh)。
それぞれシングルエンド解析用、ペアエンド解析用となっており、対応するインプットファイル (fastq ファイル等)も異なります。

[user@ccfep3 package]$ ls /apl/bio/package/salmon/samples
sample_salmon_paired.sh  sample_salmon_single.sh

サンプルスクリプトが参照するデータについて

基礎生物学向けの各アプリのサンプルスクリプトは、原則として /apl/bio/data_sample に置いてあるデータをフルパスで直接参照しています。 各データについてはNCBIのデータを data_sample 下に保存してあります。

[user@ccfep3 data_sample]$ ls
ecoli  misc  proteins  yeast

[user@ccfep3 data_sample]$ tree /apl/bio/data_sample
/apl/bio/data_sample
├── ecoli
│   ├── ecoli.gff
│   ├── ecoli.gtf
│   ├── ecoli_genome.fasta
│   ├── ecoli_illumina_R1.fastq
│   ├── ecoli_illumina_R2.fastq
│   ├── ecoli_illumina_single.fastq
│   ├── ecoli_nanopore_longread.fastq
│   ├── ecoli_proteins.faa
│   ├── ecoli_single.sam
│   ├── ecoli_single_sorted.bam
│   ├── ecoli_transcriptome.fasta
│   └── metadata
│       ├── assembly_data_report.jsonl
│       ├── dataset_catalog.json
│       ├── ecoli_illumina_prep.sh
│       ├── ecoli_nanopore_prep.sh
│       ├── ecoli_reference_prep.sh
│       └── md5sum.txt
├── misc
│   ├── ecoli_single.sam
│   ├── genome.fasta
│   ├── illumina_R1.fastq
│   ├── illumina_R2.fastq
│   ├── illumina_single.fastq
│   └── metadata
├── proteins
│   ├── arabidopsis_proteins.faa
│   ├── bs168_proteins.faa
│   ├── metadata
│   │   └── proteins_prep.sh
│   ├── mouse_proteins.faa
│   ├── natto_proteins.faa
│   └── pombe_proteins.faa
└── yeast
   ├── metadata
   │   ├── assembly_data_report.jsonl
   │   ├── dataset_catalog.json
   │   ├── md5sum.txt
   │   ├── yeast_illumina_prep.sh
   │   ├── yeast_nanopore_prep.sh
   │   └── yeast_reference_prep.sh
   ├── yeast.gff
   ├── yeast.gtf
   ├── yeast_cds.fasta
   ├── yeast_genome.fasta
   ├── yeast_illumina_R1.fastq
   ├── yeast_illumina_R2.fastq
   ├── yeast_illumina_single.fastq
   ├── yeast_nanopore_longread.fastq
   ├── yeast_proteins.faa
   ├── yeast_single.sam
   ├── yeast_single_sorted.bam
   └── yeast_transcriptome.fasta

サンプルの実行: 一般的な手順

まず、サンプルのファイルを自分の書き込める領域にコピーします。

サンプルをコピーしたディレクトリで jsub sample.sh のように実行します。

(大抵の場合は、sh ./sample.sh のような形でログインノードで実行可能にもなっています。ただし、CPU 数の指定が jsub 時と変わる場合があります。)

例1: salmon の場合

サンプルスクリプト sample_salmon_paired.sh を ホームディレクトリ上に新たに生成する salmon_test というディレクトリで実行する場合です。

[user@ccfep3 ~]$ mkdir -p ~/salmon_test
[user@ccfep3 ~]$ cd ~/salmon_test
[user@ccfep3 salmon_test]$ cp /apl/bio/package/salmon/samples/* .
[user@ccfep3 salmon_test]$ ls
sample_salmon_paired.sh  sample_salmon_single.sh

[user@ccfep3 salmon_test]$ jsub sample_salmon_single.sh
11166909.ccpbs1

実行中のジョブの状況は jobinfo -c コマンドで確認できます。

[user@ccfep3 salmon_test]$ jobinfo -c
--------------------------------------------------------------------------------
Queue   Job ID Name            Status CPUs User/Grp       Elaps Node/(Reason)
--------------------------------------------------------------------------------
H      11166909 *mple_salmon_* Run       4  ebw/---        0:00 ccc003         
--------------------------------------------------------------------------------

混雑していなければ、しばらく待てばジョブが終了し、出力結果が得られます。

[user@ccfep3 salmon_test]$ ls
sample_salmon_paired.sh          sample_salmon_single.sh.o186015
sample_salmon_single.sh          yeast_salmon_idx
sample_salmon_single.sh.e186015  yeast_single_salmon_out
[user@ccfep3 salmon_test]$

参考: sample_salmon_paired.sh の中身について

#!/bin/sh
#PBS -l select=1:ncpus=4:mpiprocs=1:ompthreads=4
#PBS -l walltime=00:10:00

if [ ! -z "${PBS_O_WORKDIR}" ]; then
 cd ${PBS_O_WORKDIR}
 NCPUS=${OMP_NUM_THREADS}
else
 NCPUS=4
 export OMP_NUM_THREADS=${NCPUS}
fi

source /apl/bio/etc/bio.sh
module -s purge
module -s load salmon

# -----------------------------------------------------------------------------
# 入力・出力変数の定義 (ここを変更して再利用します)
# -----------------------------------------------------------------------------

# === 入力ファイル ===
# 転写産物(Transcriptome)のリファレンス配列 (FASTA形式)
# ※ Salmonのリファレンスには「ゲノム配列」ではなく「転写産物」を指定してください。
IN_REF="/apl/bio/data_sample/yeast/yeast_transcriptome.fasta"

# シングルエンドの入力 (FASTQ形式)
IN_FASTQ_SINGLE="/apl/bio/data_sample/yeast/yeast_illumina_single.fastq"

# === 出力ディレクトリ ===
# インデックスの出力ディレクトリ
OUT_DIR_IDX="./yeast_salmon_idx"

# 定量結果の出力ディレクトリ
OUT_DIR="./yeast_single_salmon_out"

# === 実行パラメータ ===
# CPUスレッド数
PARAM_THREADS=${NCPUS}

# k-mer長 (リード長に応じて調整してください。デフォルトは31)
PARAM_KMER_LEN=31

# -----------------------------------------------------------------------------
# 実行セクション
# -----------------------------------------------------------------------------

echo "--- Job started at $(date) ---"
echo "Running Salmon (Single-end mode) on ${PARAM_THREADS} threads (Allocated ${NCPUS} cores)."
echo ""

# Step 1: インデックスの構築
echo "Step 1: Building Index..."

# -t: 参照配列
# -i: 出力するインデックスのディレクトリ
# -k: k-mer長
# -p: 使用するCPUスレッド数
if [ ! -d "${OUT_DIR_IDX}" ]; then
   salmon index \
       -t "${IN_REF}" \
       -i "${OUT_DIR_IDX}" \
       -k ${PARAM_KMER_LEN} \
       -p ${PARAM_THREADS}
   echo "Indexing finished. Saved to: ${OUT_DIR_IDX}"
else
   echo "Index directory '${OUT_DIR_IDX}' already exists. Skipping indexing step."
fi

echo ""

# Step 2: 発現量の定量
echo "Step 2: Quantifying expression..."

# -i: 作成した(または既存の)インデックスディレクトリ
# -l: ライブラリタイプ (A: 自動検出)
# -r: シングルエンドの入力
# --validateMappings: マッピング精度の向上 (推奨オプション)
# -o: 結果の出力ディレクトリ
# -p: 使用するCPUスレッド数
salmon quant \
   -i "${OUT_DIR_IDX}" \
   -l A \
   -r "${IN_FASTQ_SINGLE}" \
   --validateMappings \
   -o "${OUT_DIR}" \
   -p ${PARAM_THREADS}

echo "Quantification finished. Results saved to: ${OUT_DIR}"
echo ""
echo "--- Job finished at $(date) ---"

ジョブスクリプトの書き方に関する参考情報

こちらのページに select 文のサンプルや簡単な説明があります