#!/usr/bin/env bash # kr_lp_pgnet 전용 컨테이너 안에서 실행되는 환경 셋업 스크립트. # # 가정 (컨테이너 외부): # - Ubuntu 24.04 베이스 컨테이너 `kr_lp_pgnet` (--gpus all, --restart unless-stopped) # - 호스트 /home/cuuva/workspace ↔ 컨테이너 /workspace (bind mount) # - 이 repo는 호스트 ~/workspace/kr_lp_pgnet/ 에 clone (= 컨테이너 /workspace/kr_lp_pgnet/) # - paddle sm_120 wheel은 ~/workspace/wheels/ 안에 둠 # # 실행 (호스트에서): # docker exec kr_lp_pgnet bash /workspace/kr_lp_pgnet/scripts/setup_server.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" KR_LP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" WORKSPACE="${WORKSPACE:-$(cd "$KR_LP_DIR/.." && pwd)}" PADDLEOCR_DIR="$WORKSPACE/PaddleOCR" PRETRAIN_DIR="$PADDLEOCR_DIR/pretrain_models" WHEEL_DIR="$WORKSPACE/wheels" PY=python3.10 echo "[1/6] python / paddle 확인" $PY --version if ! $PY -c 'import paddle; assert paddle.is_compiled_with_cuda()' 2>/dev/null; then echo " paddle 미설치 또는 CUDA 비호환. sm_120 wheel 재설치..." WHL=$(ls "$WHEEL_DIR"/paddlepaddle_gpu-*-cp310-*linux_x86_64.whl 2>/dev/null | head -1) if [ -z "$WHL" ]; then echo " wheel 파일을 $WHEEL_DIR/ 에 두고 다시 실행하세요." >&2 exit 1 fi $PY -m pip install --quiet "$WHL" fi $PY -c 'import paddle; print(" paddle:", paddle.__version__, "cuda:", paddle.is_compiled_with_cuda())' echo "[2/6] PaddleOCR clone (release/2.7)" if [ ! -d "$PADDLEOCR_DIR" ]; then git clone --depth 1 -b release/2.7 https://github.com/PaddlePaddle/PaddleOCR.git "$PADDLEOCR_DIR" fi cd "$PADDLEOCR_DIR" echo " PaddleOCR @$(git rev-parse --short HEAD)" echo "[3/6] PaddleOCR requirements 설치 (paddlepaddle 라인은 제외)" if [ -f requirements.txt ]; then grep -viE '^(paddlepaddle|paddleocr)' requirements.txt > /tmp/kr_lp_req.txt || true $PY -m pip install --quiet -r /tmp/kr_lp_req.txt || true fi echo "[4/6] PaddleOCR import smoke test" cd "$PADDLEOCR_DIR" $PY -c " import sys; sys.path.insert(0, '.') import ppocr from ppocr.modeling.architectures import build_model print(' ppocr import OK') " || { echo " PaddleOCR import 실패 (paddle 3.3 호환성 이슈일 수 있음)"; exit 1; } echo "[5/6] PGNet step1 pretrain weight 다운로드" mkdir -p "$PRETRAIN_DIR" cd "$PRETRAIN_DIR" if [ ! -d train_step1 ]; then wget -q https://paddleocr.bj.bcebos.com/dygraph_v2.0/pgnet/train_step1.tar tar xf train_step1.tar && rm train_step1.tar fi ls train_step1/ echo "[6/6] dict / config symlink → PaddleOCR 트리" ln -sf "$KR_LP_DIR/dict/kr_lp_dict.txt" "$PADDLEOCR_DIR/ppocr/utils/kr_lp_dict.txt" mkdir -p "$PADDLEOCR_DIR/configs/e2e" ln -sf "$KR_LP_DIR/configs/kr_lp_pgnet.yml" "$PADDLEOCR_DIR/configs/e2e/kr_lp_pgnet.yml" ls -l "$PADDLEOCR_DIR/ppocr/utils/kr_lp_dict.txt" "$PADDLEOCR_DIR/configs/e2e/kr_lp_pgnet.yml" echo echo "===========================" echo "셋업 완료. 다음 단계:" echo " bash $KR_LP_DIR/data_gen/setup_assets.sh # 합성 자산 다운로드" echo " python data_gen/generate_synthetic.py ... # 합성 데이터 생성 (다음 단계)" echo "==========================="