| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| BUNDLE_DIR="${BUNDLE_DIR:-$ROOT_DIR/bundles/qwen3_reranker_ane_bundle_8b}" |
| HOST="${HOST:-127.0.0.1}" |
| PORT="${PORT:-8000}" |
| COMPUTE_UNITS="${COMPUTE_UNITS:-cpu_and_ne}" |
| MODEL_ID="${MODEL_ID:-qwen3-reranker-8b-ane}" |
|
|
| if [[ -n "${PYTHON_BIN:-}" ]]; then |
| PY_BIN="$PYTHON_BIN" |
| elif [[ -x "$ROOT_DIR/.venv/bin/python" ]]; then |
| PY_BIN="$ROOT_DIR/.venv/bin/python" |
| else |
| PY_BIN="python3" |
| fi |
|
|
| if ! command -v "$PY_BIN" >/dev/null 2>&1; then |
| echo "[ERROR] Python 不可用: $PY_BIN" |
| echo "请先执行: python3.11 -m venv .venv && source .venv/bin/activate && python -m pip install -r requirements-service.txt" |
| exit 1 |
| fi |
|
|
| PY_MM="$($PY_BIN -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" |
| case "$PY_MM" in |
| 3.10|3.11|3.12) ;; |
| *) |
| echo "[ERROR] 当前 Python 版本为 ${PY_MM},不受支持。" |
| echo "coremltools 在该版本下无法加载本地运行库(典型报错: libcoremlpython / libmilstoragepython)。" |
| echo "请改用 Python 3.11:" |
| echo " python3.11 -m venv .venv" |
| echo " source .venv/bin/activate" |
| echo " python -m pip install -r requirements-service.txt" |
| exit 1 |
| ;; |
| esac |
|
|
| if [[ ! -f "$BUNDLE_DIR/manifest.json" ]]; then |
| echo "[ERROR] 未找到 bundle manifest: $BUNDLE_DIR/manifest.json" |
| exit 1 |
| fi |
|
|
| $PY_BIN - <<'PY' |
| import sys |
|
|
| errors = [] |
| try: |
| import coremltools |
| except Exception as e: |
| errors.append(f"import coremltools 失败: {e}") |
|
|
| for mod in ("coremltools.libcoremlpython", "coremltools.libmilstoragepython"): |
| try: |
| __import__(mod) |
| except Exception as e: |
| errors.append(f"{mod} 加载失败: {e}") |
|
|
| if errors: |
| print("[ERROR] Core ML Python 运行库不可用:") |
| for item in errors: |
| print(" -", item) |
| print("请确认你在 Python 3.11 的虚拟环境中安装依赖。") |
| sys.exit(1) |
| PY |
|
|
| cd "$ROOT_DIR" |
| exec "$PY_BIN" -m qwen3_ane_rerank serve \ |
| --bundle-dir "$BUNDLE_DIR" \ |
| --no-auto-build \ |
| --compute-units "$COMPUTE_UNITS" \ |
| --model-id "$MODEL_ID" \ |
| --host "$HOST" \ |
| --port "$PORT" |
|
|