Files
pfm-ocr/backend/scripts/serve-pipeline.sh
T

62 lines
2.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
unset VIRTUAL_ENV
if [[ -f .env ]]; then
set -a
# shellcheck disable=SC1091
source .env
set +a
fi
PIPELINE_CONFIG="${PIPELINE_CONFIG:-config/pipeline_config_vllm.yaml}"
PIPELINE_HOST="${PIPELINE_HOST:-0.0.0.0}"
PIPELINE_PORT="${PIPELINE_PORT:-8090}"
PIPELINE_DEVICE="${PIPELINE_DEVICE:-gpu:0}"
VENV=".venv-api"
# Check if VLLM_SERVER_URL is provided to override the url in the config
if [[ -n "${VLLM_SERVER_URL:-}" ]]; then
echo "==> Overriding VLLM server URL with ${VLLM_SERVER_URL}"
TEMP_CONFIG=$(mktemp /tmp/pipeline_config_XXXXXX.yaml)
cp "${PIPELINE_CONFIG}" "${TEMP_CONFIG}"
sed -i "s|server_url:.*|server_url: ${VLLM_SERVER_URL}|g" "${TEMP_CONFIG}"
PIPELINE_CONFIG="${TEMP_CONFIG}"
trap 'rm -f "${TEMP_CONFIG}"' EXIT
fi
if [[ ! -d "${VENV}" ]]; then
echo "Missing ${VENV}. Run ./scripts/install-pipeline.sh first." >&2
exit 1
fi
if [[ ! -f "${PIPELINE_CONFIG}" ]]; then
echo "Missing pipeline config: ${PIPELINE_CONFIG}" >&2
exit 1
fi
echo "==> Starting PaddleOCR-VL pipeline API"
echo " config: ${PIPELINE_CONFIG}"
echo " device: ${PIPELINE_DEVICE}"
echo " url: http://${PIPELINE_HOST}:${PIPELINE_PORT}/layout-parsing"
echo " vllm: ${VLLM_SERVER_URL:-http://127.0.0.1:8118/v1}"
echo "==> Starting secondary PFM classifier & OCR server"
"${ROOT}/${VENV}/bin/python" "${ROOT}/config/classify_ocr_server.py" &
# Patch default max_new_tokens in paddlex to avoid context length overflow in vllm
PIPELINE_PY="${ROOT}/${VENV}/lib/python3.12/site-packages/paddlex/inference/pipelines/paddleocr_vl/pipeline.py"
if [[ -f "${PIPELINE_PY}" ]]; then
echo "==> Patching default max_new_tokens in paddlex to 1024"
sed -i 's/vlm_kwargs\["max_new_tokens"\] = 4096/vlm_kwargs\["max_new_tokens"\] = 1024/g' "${PIPELINE_PY}"
fi
exec "${ROOT}/${VENV}/bin/paddlex" --serve \
--pipeline "${PIPELINE_CONFIG}" \
--host "${PIPELINE_HOST}" \
--port "${PIPELINE_PORT}" \
--device "${PIPELINE_DEVICE}"