software-mentions icon indicating copy to clipboard operation
software-mentions copied to clipboard

Using software-mentions with Apptainer (HPC)

Open mgutierrezc opened this issue 11 months ago • 1 comments

Hi! I'm trying to run software-mentions using its docker image and apptainer in an HPC. The grobid service runs without issues in port 8070, but software-mentions doesn't seem to load in port 8060. I think the real issue is me not knowing which command to use to get it up and running, so any feedback on how to do so would be really helpful!

This is my def file

# content of grobid.def
BootStrap: docker
From: grobid/software-mentions:0.8.1

%runscript
cd /opt/grobid && bash grobid-service/bin/grobid-service

Here is the slurm file I use to launch it

#!/bin/bash

#SBATCH -A sds_ag                  # Allocation name
#SBATCH --time=0-00:15:00                 # Time limit (D-HH:MM:SS)
#SBATCH --partition=gpu                # Partition name (change if needed)
#SBATCH -J grobid_sft_job                      # Job name
#SBATCH -o grobid_sft_job_%A.log            # Standard output file (%A: Job ID, %a: Array ID)
#SBATCH -e grobid_sft_job_%A.log            # Standard error file
#SBATCH -c 2
#SBATCH --mem=16gb
#SBATCH --gres=gpu:1
#SBATCH --array=1                    # Array range and max concurrent jobs (adjust 1-100 based on number of PDFs)

# Load necessary modules
module purge
module load apptainer

# Define variables
export CONTAINER_PATH="/home/sgw3fy/jobs/grobid_jobs/container_files/grobid_apt_software.sif"
export TMP_DIR="/home/sgw3fy/jobs/grobid_jobs/tmp"
export LOG_FILE="grobid_job_${SLURM_JOB_ID}.log"
export IN_PATH="/home/sgw3fy/jobs/grobid_jobs/input"
export OUT_PATH="/home/sgw3fy/jobs/grobid_jobs/output/test_sft_service_outputs"

apptainer run --nv --no-mount home,cwd --cleanenv --bind "${TMP_DIR}:/tmp" --writable-tmpfs "${CONTAINER_PATH}" -p 8070:8070 -p 8060:8060 &

# function to check if port is listening
check_port() {
    local port="$1"
    while ! nc -z localhost "$port"; do
        echo "Waiting for port $port to be available..."
        sleep 5
    done
    echo "Port $port is now listening."
}

# call the function to check the port
check_port 8070
check_port 8060

# test call to `grobid software mentions` service
curl --form input=@${IN_PATH}/alexnet.pdf --form disambiguate=1 localhost:8060/service/annotateSoftwarePDF > ${OUT_PATH}/output.json

And this is my log file

Waiting for port 8070 to be available...
WARN  [2025-03-07 14:53:43,700] org.hibernate.validator.internal.properties.javabean.JavaBeanExecutable: HV000254: Missing parameter metadata for ResponseMeteredLevel(String, int), which declares implicit or synthetic parameters. Automatic resolution of generic type information for method parameters may yield incorrect results if multiple parameters have the same erasure. To solve this, compile your code with the '-parameters' flag.
Waiting for port 8070 to be available...
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/affiliation-address/model.wapiti"
Model path: /opt/grobid/grobid-home/models/affiliation-address/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/name/header/model.wapiti"
Model path: /opt/grobid/grobid-home/models/name/header/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/name/citation/model.wapiti"
Model path: /opt/grobid/grobid-home/models/name/citation/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/header/model.wapiti"
Model path: /opt/grobid/grobid-home/models/header/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/date/model.wapiti"
Model path: /opt/grobid/grobid-home/models/date/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/citation/model.wapiti"
Model path: /opt/grobid/grobid-home/models/citation/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/fulltext/model.wapiti"
Model path: /opt/grobid/grobid-home/models/fulltext/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/segmentation/model.wapiti"
Waiting for port 8070 to be available...
Model path: /opt/grobid/grobid-home/models/segmentation/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/reference-segmenter/model.wapiti"
Model path: /opt/grobid/grobid-home/models/reference-segmenter/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/figure/model.wapiti"
Model path: /opt/grobid/grobid-home/models/figure/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/table/model.wapiti"
Model path: /opt/grobid/grobid-home/models/table/model.wapiti
[Wapiti] Loading model: "/opt/grobid/grobid-home/models/funding-acknowledgement/model.wapiti"
Model path: /opt/grobid/grobid-home/models/funding-acknowledgement/model.wapiti
Port 8070 is now listening.
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...
Waiting for port 8060 to be available...

mgutierrezc avatar Mar 07 '25 15:03 mgutierrezc

@mgutierrezc I have no idea how apptainer work, but I don't see where you run the software-mention, while I see the line where you run grobid.

lfoppiano avatar Sep 15 '25 10:09 lfoppiano