Files
wehub-resource-sync e904b667c6
Build/Publish Develop Docs / deploy (push) Failing after 1s
PaddleOCR Code Style Check / check-code-style (push) Failing after 1s
PaddleOCR PR Tests GPU / detect-changes (push) Failing after 1s
PaddleOCR PR Tests / detect-changes (push) Failing after 1s
PaddleOCR PR Tests GPU / test-pr-gpu (push) Has been cancelled
PaddleOCR PR Tests / test-pr (push) Has been cancelled
PaddleOCR PR Tests GPU / test-pr-gpu-impl (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.13) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.8) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.9) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:59:26 +08:00

287 lines
9.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/pip_version_arg.sh"
device_type='nvidia-gpu'
backend='vllm'
build_for_offline='false'
paddleocr_version='3.4.0'
paddlex_version='3.4.0'
platform='linux/amd64'
action='load'
registry='ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle'
builder=''
show_usage() {
cat << EOF
Usage: $(basename "$0") [OPTIONS]
Options:
--device-type <type> Device type (nvidia-gpu|nvidia-gpu-sm120|hygon-dcu|kunlunxin-xpu|metax-gpu|iluvatar-gpu|huawei-npu|intel-gpu|amd-gpu) [default: ${device_type}]
--backend <backend> Backend type (vllm|fastdeploy) [default: ${backend}]
--offline Build offline version
--ppocr-version <spec> PaddleOCR version or URL [default: ${paddleocr_version}]
--pdx-version <spec> PaddleX version or URL [default: ${paddlex_version}]
--platform <platform> Build platform [default: ${platform}]
--action <action> Post-build action: load|push|tar|none [default: ${action}]
load: Load to local Docker
push: Push to image registry
tar: Export as tar file
none: Build only, no output
--registry <registry> Custom image registry [default: ${registry}]
--builder <name> Buildx builder name (override default)
-h, --help Show this help message
Examples:
$0 --device-type nvidia-gpu --backend vllm --action push
$0 --platform linux/amd64,linux/arm64 --action push
$0 --action tar --platform linux/amd64
$0 --ppocr-version https://github.com/PaddlePaddle/PaddleOCR/archive/main.zip
EOF
}
while [[ $# -gt 0 ]]; do
case $1 in
--device-type)
[ -z "$2" ] && {
echo "Error: '--device-type' requires a value" >&2
exit 2
}
device_type="$2"
shift
shift
case "${device_type}" in
nvidia-gpu|nvidia-gpu-sm120|hygon-dcu|kunlunxin-xpu|metax-gpu|iluvatar-gpu|huawei-npu|intel-gpu|amd-gpu)
;;
*)
echo "Error: Unknown device type: ${device_type}" >&2
exit 2
;;
esac
;;
--backend)
[ -z "$2" ] && {
echo "Error: '--backend' requires a value" >&2
exit 2
}
backend="$2"
shift 2
case "${backend}" in
vllm|fastdeploy)
;;
*)
echo "Error: Unknown backend: ${backend}" >&2
exit 2
;;
esac
;;
--offline)
build_for_offline='true'
shift
;;
--ppocr-version)
[ -z "$2" ] && {
echo "Error: '--ppocr-version' requires a value" >&2
exit 2
}
paddleocr_version="$2"
shift
shift
;;
--pdx-version)
[ -z "$2" ] && {
echo "Error: '--pdx-version' requires a value" >&2
exit 2
}
paddlex_version="$2"
shift
shift
;;
--platform)
[ -z "$2" ] && {
echo "Error: '--platform' requires a value" >&2
exit 2
}
platform="$2"
shift
shift
;;
--action)
[ -z "$2" ] && {
echo "Error: '--action' requires a value" >&2
exit 2
}
action="$2"
shift
shift
case "${action}" in
load|push|tar|none)
;;
*)
echo "Error: Unknown action: ${action}. Use load|push|tar|none" >&2
exit 2
;;
esac
;;
--registry)
[ -z "$2" ] && {
echo "Error: '--registry' requires a value" >&2
exit 2
}
registry="$2"
shift
shift
;;
--builder)
[ -z "${2-}" ] && {
echo "Error: '--builder' requires a value" >&2
exit 2
}
builder="$2"
shift 2
;;
-h|--help)
show_usage
exit 0
;;
*)
echo "Error: Unknown option: $1" >&2
echo "Use $0 --help for usage information" >&2
exit 2
;;
esac
done
paddleocr_pip_suffix="$(pip_build_arg_suffix "${paddleocr_version}")"
paddlex_pip_suffix="$(pip_build_arg_suffix "${paddlex_version}")"
# Validate platform compatibility for load action
if [[ "${action}" == 'load' ]] && [[ "${platform}" == *','* ]]; then
echo "Error: Cannot use --action load with multiple platforms" >&2
echo "Platform: ${platform}" >&2
echo "Please specify a single platform or use other actions" >&2
exit 2
fi
# Build tag suffix
tag_suffix="latest-${device_type}"
if [ "${build_for_offline}" = 'true' ]; then
tag_suffix="${tag_suffix}-offline"
fi
dockerfile="accelerators/${device_type}/vlm.Dockerfile"
if [ ! -f "${dockerfile}" ]; then
echo "Error: Dockerfile not found: ${dockerfile}" >&2
exit 1
fi
revision="$(git rev-parse --short HEAD)"
image_version="${revision}-ppocr$(version_tag_label "${paddleocr_version}")-pdx$(version_tag_label "${paddlex_version}")"
# Image name
base_image_name="paddleocr-genai-${backend}-server"
# Main tags
main_tag="${registry}/${base_image_name}:${tag_suffix}"
version_tag="${registry}/${base_image_name}:${tag_suffix/latest/${image_version}}"
paddleocr_version_tag="${registry}/${base_image_name}:${tag_suffix/latest/paddleocr$(version_tag_label "${paddleocr_version}")}"
# Build arguments array
build_args=(
'--platform' "${platform}"
'-f' "${dockerfile}"
'-t' "${main_tag}"
'-t' "${version_tag}"
'-t' "${paddleocr_version_tag}"
'--build-arg' "BUILD_FOR_OFFLINE=${build_for_offline}"
'--build-arg' "PADDLEOCR_VERSION=${paddleocr_pip_suffix}"
'--build-arg' "PADDLEX_VERSION=${paddlex_pip_suffix}"
'--build-arg' "BACKEND=${backend}"
'--build-arg' "http_proxy=${http_proxy:-}"
'--build-arg' "https_proxy=${https_proxy:-}"
'--build-arg' "no_proxy=${no_proxy:-}"
'--label' "org.opencontainers.image.version=${image_version}"
'--label' "org.opencontainers.image.revision=${revision}"
'.'
)
if [[ -n "${builder}" ]]; then
build_args=('--builder' "${builder}" "${build_args[@]}")
fi
echo "========================================="
echo "Build Configuration:"
echo " Device Type: ${device_type}"
echo " Backend: ${backend}"
echo " Offline Mode: ${build_for_offline}"
echo " PaddleOCR: ${paddleocr_version}"
echo " PaddleX: ${paddlex_version}"
echo " Platform: ${platform}"
echo " Action: ${action}"
echo " Registry: ${registry}"
echo " Builder: ${builder:-<default>}"
echo " Dockerfile: ${dockerfile}"
echo " Tags:"
echo " - ${main_tag}"
echo " - ${version_tag}"
echo "========================================="
# Add action-specific build options
case "${action}" in
load)
echo "Building and loading to local Docker..."
build_args+=('--load')
;;
push)
echo "Building and pushing to registry..."
build_args+=('--push')
if ! docker info 2>/dev/null | grep -q "Username"; then
echo "Warning: Docker login not detected. Push may fail."
echo "Tip: Run 'docker login ${registry%%/*}' to login"
fi
;;
tar)
echo "Building and exporting as tar file..."
output_dir=./build-output
mkdir -p "${output_dir}"
tar_file="${output_dir}/${base_image_name}-${tag_suffix}-${platform//\//_}.tar"
build_args+=('--output' "type=docker,dest=${tar_file}")
echo " Output file: ${tar_file}"
;;
none)
echo "Building only (image stays in BuildKit cache)..."
echo "Note: Image will be lost if BuildKit cache is cleared"
;;
esac
# Execute build command
echo "Executing: docker buildx build ${build_args[*]}"
docker buildx build "${build_args[@]}"
# Post-build actions
case "${action}" in
load)
echo "✅ Image loaded to local Docker"
echo " View: docker images | grep ${base_image_name}"
;;
push)
echo "✅ Image pushed to registry"
echo " Pull: docker pull ${main_tag}"
echo " Inspect: docker buildx imagetools inspect ${main_tag}"
;;
tar)
echo "✅ Image exported as tar file"
echo " File size: $(du -h "${tar_file}" | cut -f1)"
echo " Load to Docker: docker load -i ${tar_file}"
;;
none)
echo "️ Image saved in BuildKit cache only"
echo " Use --action load to rebuild and load quickly"
echo " Or use --action push to push directly"
;;
esac