Informações sobre o uso direto do cluster local estão em aqui.
Exemplo para processar todos os .tiff de um diretório usando apenas um core (serial). Verifica se já existe um arquivo processado antes.
ocr.sh:
#!/bin/bash
module load tesseract
for INPUT in *.tiff
do
BASENAME=$(basename $INPUT .tiff)
if [ ! -f "${BASENAME}.pdf" ]
then
echo "Processing $INPUT"
tesseract "$INPUT" "$BASENAME" -l por pdf
fi
done
sbatch ocr.sh
Exemplo para processar todos os .tiff de um diretório usando múltiplos cores (paralelo).
A ideia desse script é permitir que vários processos independentes trabalhem no mesmo diretório sem definir previamente qual processo ficará responsável por cada arquivo. O workflow é:
#!/bin/bash
module load tesseract
for INPUT in *.tiff
do
BASENAME=$(basename $INPUT .tiff)
if [ ! -f "${BASENAME}.pdf" ] && [ ! -f "${BASENAME}.lock" ]
then
# lock and wait 5 seconds (to reduce concurrency)
echo "$SLURM_ARRAY_TASK_ID" > "${BASENAME}.lock"
sleep 5
if [ "$(cat ${BASENAME}.lock)" = "$SLURM_ARRAY_TASK_ID" ]
then
echo "Processing $INPUT -- (task $SLURM_ARRAY_TASK_ID)"
TMPNAME=".$BASENAME-$SLURM_ARRAY_TASK_ID"
tesseract "$INPUT" "$TMPNAME" -l por pdf
mv "$TMPNAME.pdf" "$BASENAME.pdf"
rm "${BASENAME}.lock"
else
echo "Lost lock on $INPUT"
fi
fi
done
Para usar 30 cores:
sbatch --array=0-30 ocr.sh
Exemplo para processar todos os .pdf de um diretório usando múltiplos cores (paralelo).
A ideia desse script é permitir que vários processos independentes trabalhem no mesmo diretório sem definir previamente qual processo ficará responsável por cada arquivo. O workflow é:
#!/bin/bash
for INPUT in *.pdf
do
BASENAME=$(basename $INPUT .pdf)
if [ ! -f "${BASENAME}-001.tiff" ] && [ ! -f "${BASENAME}.lock" ]
then
# lock and wait 5 seconds (to reduce concurrency)
echo "$SLURM_ARRAY_TASK_ID" > "${BASENAME}.lock"
sleep 5
if [ "$(cat ${BASENAME}.lock)" = "$SLURM_ARRAY_TASK_ID" ]
then
echo "Processing $INPUT -- (task $SLURM_ARRAY_TASK_ID)"
gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -r400x400 -sOutputFile=${BASENAME}-%03d.tiff ${INPUT}
rm "${BASENAME}.lock"
else
echo "Lost lock on $INPUT"
fi
fi
done
Para usar 30 cores:
sbatch --array=0-30 gs.sh