File size: 2,595 Bytes
9a069e7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #!/usr/bin/env bash
set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
DOCKER_IMAGE_TAG="segment-algorithm"
DOCKER_NOOP_VOLUME="${DOCKER_IMAGE_TAG}-volume"
INPUT_DIR="${SCRIPT_DIR}/test/input"
OUTPUT_DIR="${SCRIPT_DIR}/test/output"
# Use the GPU when Docker's NVIDIA runtime is available; fall back to CPU
# otherwise (the dummy runs fine on CPU — the platform always provides a GPU).
GPU_FLAGS=()
if docker info --format '{{range $k, $v := .Runtimes}}{{$k}} {{end}}' 2>/dev/null | grep -qw nvidia; then
GPU_FLAGS=(--gpus all)
else
echo "=+= No NVIDIA container runtime detected - running on CPU"
fi
echo "=+= (Re)build the container"
source "${SCRIPT_DIR}/do_build.sh"
cleanup() {
echo "=+= Cleaning permissions ..."
docker run --rm \
--platform=linux/amd64 \
--quiet \
--volume "$OUTPUT_DIR":/output \
--entrypoint /bin/sh \
$DOCKER_IMAGE_TAG \
-c "chmod -R -f o+rwX /output/* || true"
docker volume rm "$DOCKER_NOOP_VOLUME" > /dev/null
}
chmod -R -f o+rX "$INPUT_DIR"
if [ -d "${OUTPUT_DIR}/interface_1" ]; then
chmod -f o+rwX "${OUTPUT_DIR}/interface_1"
echo "=+= Cleaning up any earlier output"
docker run --rm \
--platform=linux/amd64 \
--quiet \
--volume "${OUTPUT_DIR}/interface_1":/output \
--entrypoint /bin/sh \
$DOCKER_IMAGE_TAG \
-c "rm -rf /output/* || true"
else
mkdir -p -m o+rwX "${OUTPUT_DIR}/interface_1"
fi
docker volume create "$DOCKER_NOOP_VOLUME" > /dev/null
trap cleanup EXIT
run_docker_forward_pass() {
local interface_dir="$1"
echo "=+= Doing a forward pass on ${interface_dir}"
## Note the extra arguments that are passed here:
# '--network none'
# entails there is no internet connection
# '--volume <NAME>:/tmp'
# is added because on the ORena FOCUS Challenge platform this directory cannot be used to store permanent files
# '--shm-size' is left at Docker's default (64 MB). A PyTorch DataLoader with
# num_workers > 0 needs more shared memory — if you use one, add e.g.
# '--shm-size=2g' here.
docker run --rm \
--platform=linux/amd64 \
--network none \
"${GPU_FLAGS[@]}" \
--volume "${INPUT_DIR}/${interface_dir}":/input:ro \
--volume "${OUTPUT_DIR}/${interface_dir}":/output \
--volume "$DOCKER_NOOP_VOLUME":/tmp \
"$DOCKER_IMAGE_TAG"
echo "=+= Wrote results to ${OUTPUT_DIR}/${interface_dir}"
}
run_docker_forward_pass "interface_1"
echo "=+= Save this image for uploading via ./do_save.sh"
|