Prepare your workstation
Install Visual Studio Code, an SSH client, and a file-transfer tool. Windows users can consider installing WSL Ubuntu.
The University of Hong Kong
BLACKBODY is a high performance computing cluster, supporting computing workloads from computational astrophysics and quantum physics research in the physics department.
Cluster overview
Blackbody is the HPC cluster built and operated by the astrobh ( Prof. Lixin Dai ) and quantummb ( Prof. Ziyang Meng ) groups in the Department of Physics, the University of Hong Kong. It provides compute nodes, high-speed networking, BeeGFS parallel storage, and a SLURM scheduler for batch jobs.
This site provides user-facing guide and documentation.
Blackbody is funded through the HKU Small Equipment Grant, NSFC Excellent Young Scientist Fund, RGC Area of Excellence, and start-up funding from the Faculty of Science.
System architecture
A public-safe view of the cluster layout. Individual compute node hostnames and administration networks are intentionally omitted.
Quick start
New users can follow this path after receiving an account and SSH access.
Install Visual Studio Code, an SSH client, and a file-transfer tool. Windows users can consider installing WSL Ubuntu.
Add a host entry for <Hostname> and log in using your assigned username and SSH key. Your admin will provide <Hostname> to you.
Use home/group directories for normal work and hot storage for I/O-intensive active datasets.
Load software modules, write an sbatch script, and run compute workloads on compute nodes—not the login node.
Current hardware inventory
Partition membership and walltimes are based on the current SLURM export. Compute node hostnames are intentionally hidden on this page.
| Partition | Research group | Walltime | Nodes / cores | User-facing notes |
|---|---|---|---|---|
| mercury | astrobh | 7 days | 4 nodes · 128 cores/node | Compute partition for astrobh users. |
| venus | astrobh | 7 days | 4 nodes · 128 cores/node | Compute partition for astrobh users. |
| earth | astrobh | 7 days | 2 nodes · 192 cores/node | High-core-count compute partition for astrobh users. |
| pluto | quantummb | 7 days | 4 nodes · 128 cores/node | Compute partition for quantummb users. |
| charon | quantummb | 7 days | 1 node · 64 cores/node | Smaller compute partition for quantummb users. |
| neptune | quantummb | 7 days | 5 nodes · 128 cores/node | Compute partition for quantummb users. |
sinfosinfo -NelPage note: compute node hostnames, admin-only partitions, internal IPMI, management-network, serial-number, root-account, UPS/PDU, and provisioning details are intentionally excluded.
Access
Use SSH keys for shell access and SFTP/rsync for file transfer. Currently, SSH-key login is the supported login method.
Group members and authorized users can request an account using the account request form, then notify the relevant group admin.
New users should upload their SSH public key on the application form. If the form is already submitted or the public key needs to be changed later, send the public key directly to the corresponding group admin.
If you do not already have an SSH key, create one on your own computer. Upload or send only the public key file, for example, ~/.ssh/id_ed25519.pub. Keep the private key secret.
ssh-keygen -t ed25519 -C "your_email@connect.hku.hk"
cat ~/.ssh/id_ed25519.pub
After your account is approved and your public key has been installed, create or edit ~/.ssh/config on Linux, macOS, or WSL:
Host blackbody
HostName <Hostname>
User <your_username>
IdentityFile <your_private_key> (e.g. ~/.ssh/id_ed25519)
Then connect with:
ssh blackbody
Email physhpc(at)hku.hk for cluster support, or contact the assigned admin for your group.
BeeGFS storage
Blackbody uses BeeGFS parallel storage. A general quota policy applies; there are no separate per-directory quotas. Users are encouraged to move/archive files that are no longer active.
Use for source code, scripts, moderate datasets, logs, and shared group work.
~//data/home/group/astrobh/data/home/group/quantummbUse for active jobs that need higher read/write performance. Move or archive outputs when finished.
/data/hot/astrobh/data/hot/quantummbRegular users should not use /tmp for jobs. Put job inputs and outputs under the appropriate /data location unless your group admin gives different instructions.
Clean up intermediate files and move completed datasets out of hot storage when possible.
beegfs-ctl --getquota --uid $UID
beegfs-ctl --getquota --gid --all
du -h --max-depth=1 /data/home/$USER | sort -h
du -h --max-depth=1 . | sort -h
tar -czf old-run.tar.gz old-run/
rm -r old-run/ # only after checking the archive
Remove duplicate files, compress finished runs, and move inactive data out of hot storage.
The cluster should not be treated as the only copy of important code or irreplaceable outputs. Keep important data backed up outside the cluster.
Check group ownership and permissions before placing data in shared astrobh or quantummb directories.
Software
Modules configure compilers, MPI libraries, scientific packages, and paths without manual environment editing. Use module avail on the cluster for the live list.
module availmodule keyword mpi
module spider openmpimodule load gcc/12.1 openmpi/4.1.8-gcc12.1
module load anaconda/py3module list
module unload openmpi
module purgeGCC 9.5–14.3, Intel 2022/latest, AOCC 4.1/5.2, NVIDIA HPC SDK 25.7.
OpenMPI 3.1/4.1/5.0 builds, Intel MPI 2021/latest, NVHPC HPC-X CUDA builds.
Anaconda py3, Python 3.12, Python 3.13 GPU, Julia 1.6/1.8/1.10, Go, Perl, Lua.
HDF5 parallel builds, NetCDF, FFTW, GSL, OpenBLAS, MKL, AOCL, ARPACK-NG, Eigen.
CUDA and NVIDIA software modules may be present for compatibility or special workflows. GPU access is not part of the current general user workflow; ask your group admin if you need GPU resources.
MATLAB 2022a, HEASoft 6.30.1, FFmpeg, CMake, Autoconf/Automake, VTune.
Create environments from the login node, but run heavy Python work through SLURM jobs.
module load anaconda/py3
conda create -n myenv python=3.11
conda activate myenv
pip install numpy scipy matplotlib
#!/bin/bash
#SBATCH -J python-test
#SBATCH -p <your_group_partition>
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
module load anaconda/py3
conda activate myenv
python script.py
SLURM scheduler
Write a job script, request the resources you need, and submit it with sbatch. Do not run production workloads directly on the login node.
#!/bin/bash
#SBATCH -J hello
#SBATCH -p <your_group_partition>
#SBATCH -N 2
#SBATCH -n 256
#SBATCH -t 3-00:00:00
#SBATCH -o logs/%x-%j.out
#SBATCH -e logs/%x-%j.err
#SBATCH --mail-user=<username>@connect.hku.hk
#SBATCH --mail-type=BEGIN,END,FAIL
mkdir -p logs
module purge
module load openmpi
mpirun -n $SLURM_NTASKS ./hello
sinfo
sinfo -Nelsbatch job.sub
sbatch -p <your_group_partition> -t 01:00:00 job.subsqueue -u $USER
sqscancel <jobid>
scancel -u $USER # cautionscontrol show jobid=<jobid>
sacct -j <jobid> --format=JobID,State,Elapsed,MaxRSSpestatBy default, SLURM writes output in the directory where you submitted the job, often as slurm-<jobid>.out. Use #SBATCH -o and #SBATCH -e to keep output and error files organized.
tail -f slurm-<jobid>.out
less logs/<jobname>-<jobid>.errsacct -j <jobid> --format=JobID,JobName,State,ExitCode,Elapsed,MaxRSSPD pending / waiting
R running
COMPLETED finished successfully
FAILED program or system error
TIMEOUT walltime reached
OUT_OF_MEMORY memory request too smallStart with short, small test jobs and scale only after checking correctness and performance.
Use -N 1, -n 1, and a short walltime for scripts that use one CPU core.
Use one node, request the number of CPU cores your program can actually use, and set OMP_NUM_THREADS to match.
Use -N and -n together. For example, two 128-core nodes usually means -N 2 and -n 256.
For many similar small jobs, prefer a job array such as #SBATCH --array=0-99%10 rather than submitting hundreds of separate scripts.
Submit jobs to the partitions assigned to your research group. astrobh users use mercury, venus, or earth; quantummb users use pluto, charon, or neptune.
Very large node/core or walltime requests may wait longer in the queue. Test small before requesting many nodes or long wall times.
Linux essentials
These commands cover navigation, file management, searching, compression, monitoring, and safe transfer.
pwd
ls
ls -lah
cd ~/projectmkdir runs
cp input.par runs/
cp -r old_run new_run
mv output.dat archive/rm -i file.dat
rm -r old_directory # cautiondu -sh *
du -sh /data/home/$USER
df -hfind . -name "*.out"
grep -R "ERROR" logs/less slurm-123.out
head output.log
tail -f run.logchmod u+x script.sh
chmod -R g+rw project/
chgrp -R astrobh project/tar -czf run.tar.gz run/
tar -xzf run.tar.gztop
ps -u $USER
kill <pid>File transfer
Use rsync for large or resumable transfers and GUI SFTP tools for smaller manual transfers.
rsync -avh --progress ./project/ \
blackbody:~/project/rsync -avh --progress \
blackbody:/data/home/$USER/results/ ./results/scp input.par blackbody:~/
scp blackbody:~/slurm-123.out ./FAQ & troubleshooting
These checks solve many regular user issues. If the problem remains, send the command, job ID, and error message to your group admin.
Permission denied (publickey)Check that your account has been approved, your public key was uploaded on the form or sent to the admin, and your SSH config uses the matching private key. Also check local permissions: chmod 700 ~/.ssh and chmod 644 ~/.ssh/<public_key>.
If SSH warns that the host key changed, do not blindly bypass it. Ask your group admin or cluster support to confirm the expected action.
PDPD means pending. The job may be waiting for enough CPUs, nodes, walltime, or fair-share priority. Use scontrol show jobid=<jobid> for details.
Check personal and group quota, find large directories, archive completed runs, and move inactive files out of hot storage.
Inspect the job output/error files, check sacct, then reduce the test size or request more appropriate time or memory.
Use full paths when in doubt, quote paths with spaces, and remember that a trailing slash changes how rsync copies directories.
Responsible use
Use it for editing, compiling, data inspection, and job submission. Use SLURM compute nodes for heavy CPU, memory, and MPI workloads.
Parallel filesystems slow down with many tiny files, repeated ls -l, or many processes opening the same files.
Regular users should not use /tmp. Use the appropriate /data area and clean up intermediate files after jobs finish.
The cluster is not a substitute for a personal or group backup plan. Keep important code and irreplaceable outputs backed up.
Start with short, small jobs. Confirm correctness and performance before requesting many nodes or long wall times.
Check group ownership and permissions before placing shared data under astrobh or quantummb directories.