Skip to content

A new version of SD Connect and SD Desktop will be available from Monday, September 28. The major upgrade will introduce significant improvements, but also includes changes that are not compatible with the current version of the service. Click here to review the available support materials.

Warning!

Puhti and Mahti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti and Mahti login nodes and storage services are planned to remain available until 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

MetaHipMer2 (MHM2)

MetaHipMer2 is a de novo metagenome short-read assembler written in UPC++ and CUDA. It runs efficiently on single servers and on multinode supercomputers, where it can scale up to coassemble terabase-sized metagenomes. On Roihu it is provided as a GPU-accelerated build for the GH200 GPU nodes.

License

MetaHipMer2 is free and open source under a Berkeley Lab modified BSD 3-Clause license.

Available

  • Roihu-GPU: 2.2.2.0-20260904, via the bio-apps module (GPU nodes only).

MHM2 runs on the Roihu GPU (GH200) nodes. Log in to roihu-gpu.csc.fi and load the modules there so you get the GPU build.

Usage

MHM2 is part of the bio-apps collection on Roihu. Load the bio-apps module tree and then the MHM2 module:

module load bio-apps/v202603
module load mhm2/2.2.2.0-20260904

Assemblies are launched with the mhm2.py driver, which starts the parallel (UPC++) processes for you — do not prefix it with srun. A basic run on paired-end reads:

mhm2.py -p reads_1.fastq,reads_2.fastq -o assembly_result

Use -p/--paired-reads for paired reads split into separate R1/R2 files (the two files are comma-separated), or -r/--reads for interleaved paired reads in a single file.

The assembled contigs are written to assembly_result/final_assembly.fasta. For the full list of options use:

mhm2.py -h

Assembling metagenomic data is resource demanding, so run MHM2 as a batch job on a GPU node.

MHM2 requires a GPU node

MHM2 is a GPU build and links directly against the CUDA driver library, so it runs only on Roihu GPU nodes. On a login node it fails at startup with error while loading shared libraries: libcuda.so.1 because login nodes have no GPUs.

Example batch script

MHM2 is process-parallel (UPC++): mhm2.py launches one process per Slurm task and derives that count from --ntasks-per-node. Reserve one task per CPU core you want to use, with --cpus-per-task=1. The example below uses one GPU with 72 processes:

#!/bin/bash
#SBATCH --job-name=mhm2
#SBATCH --account=<project>
#SBATCH --output=mhm2_out_%j.txt
#SBATCH --error=mhm2_err_%j.txt
#SBATCH --partition=gpumedium
#SBATCH --time=12:00:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=72 --cpus-per-task=1
#SBATCH --gres=gpu:gh200:1

module load bio-apps/v202603
module load mhm2/2.2.2.0-20260904

mhm2.py -p reads_1.fastq,reads_2.fastq -o assembly_result

Replace <project> with your CSC project (for example project_2001234). You can use csc-projects to check your CSC projects. Submit the job with sbatch:

sbatch mhm2_job.sh

If you reserve only one task (the default), MHM2 runs on a single core and warns Detected slurm job restricts cores to 1 because of SLURM_TASKS_PER_NODE=1 — set --ntasks-per-node as shown to avoid this. To use a full GPU node, request all four GPUs and 288 tasks (--ntasks-per-node=288 --gres=gpu:gh200:4); MHM2 shares the node's GPUs among its processes. Because it communicates over InfiniBand it can also coassemble across several nodes — increase --nodes accordingly, and also switch to the gpularge partition which accommadates requests for multiple nodes.

Match the number of processes to the data size

MHM2's parallel start-up, communication and GPU-sharing overheads dominate on small inputs, so many processes can be slower than a few. For small or test datasets, request only a handful of cores (for example --ntasks-per-node=4 --cpus-per-task=1 on the short-lived gputest partition). Use the full 72 cores per GPU, or a whole node, only for large metagenomes.

See creating a batch job script for Roihu for more about batch jobs, and the GPU partitions for the available GPU resources.

Support

CSC Service Desk

More information