92 lines
3.6 KiB
Bash
92 lines
3.6 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# ══════════════════════════════════════════════════
|
|||
|
|
# download_models.sh
|
|||
|
|
# 预下载 AI 模型到 ./models 目录(加速容器启动)
|
|||
|
|
# 支持 HuggingFace 镜像加速(国内网络)
|
|||
|
|
# 用法:bash scripts/download_models.sh
|
|||
|
|
# ══════════════════════════════════════════════════
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|||
|
|
cd "$PROJECT_DIR"
|
|||
|
|
|
|||
|
|
BLUE='\033[0;34m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
|||
|
|
info() { echo -e "${BLUE}[INFO]${NC} $*"; }
|
|||
|
|
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
|||
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
|||
|
|
|
|||
|
|
MODELS_DIR="$PROJECT_DIR/models"
|
|||
|
|
mkdir -p "$MODELS_DIR"
|
|||
|
|
|
|||
|
|
# 设置镜像加速
|
|||
|
|
export HF_ENDPOINT="${HF_ENDPOINT:-https://hf-mirror.com}"
|
|||
|
|
export HF_HOME="$MODELS_DIR"
|
|||
|
|
info "HuggingFace 镜像:$HF_ENDPOINT"
|
|||
|
|
info "模型保存路径:$MODELS_DIR"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# ── 方法1:通过 huggingface_hub 下载 ────────────
|
|||
|
|
download_hf() {
|
|||
|
|
local repo=$1; local local_name=$2
|
|||
|
|
info "下载 $repo..."
|
|||
|
|
if python3 -c "
|
|||
|
|
import os
|
|||
|
|
os.environ['HF_ENDPOINT'] = '${HF_ENDPOINT}'
|
|||
|
|
os.environ['HF_HOME'] = '${MODELS_DIR}'
|
|||
|
|
from huggingface_hub import snapshot_download
|
|||
|
|
snapshot_download(repo_id='$repo', cache_dir='${MODELS_DIR}')
|
|||
|
|
print('下载完成')
|
|||
|
|
" 2>&1; then
|
|||
|
|
ok "$repo 下载成功"
|
|||
|
|
else
|
|||
|
|
warn "$repo HuggingFace 下载失败,尝试 ModelScope..."
|
|||
|
|
download_modelscope "$repo" "$local_name"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# ── 方法2:通过 ModelScope 下载(备用)──────────
|
|||
|
|
download_modelscope() {
|
|||
|
|
local hf_name=$1
|
|||
|
|
local ms_name=${2:-$1}
|
|||
|
|
python3 -c "
|
|||
|
|
try:
|
|||
|
|
from modelscope import snapshot_download
|
|||
|
|
snapshot_download(model_id='$ms_name', cache_dir='${MODELS_DIR}/modelscope')
|
|||
|
|
print('ModelScope 下载完成')
|
|||
|
|
except ImportError:
|
|||
|
|
print('ModelScope 未安装,跳过')
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f'ModelScope 下载失败: {e}')
|
|||
|
|
" 2>&1 || warn "ModelScope 下载也失败,模型将在容器启动时自动下载"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# ── 检查 Python 环境 ────────────────────────────
|
|||
|
|
if ! python3 -c "import huggingface_hub" 2>/dev/null; then
|
|||
|
|
warn "未安装 huggingface_hub,尝试安装..."
|
|||
|
|
pip3 install -q huggingface_hub modelscope 2>/dev/null || \
|
|||
|
|
warn "安装失败,模型将在容器首次启动时下载"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# ── 下载模型列表 ────────────────────────────────
|
|||
|
|
info "=== 下载 BGE-M3 嵌入模型(约 2.5GB)==="
|
|||
|
|
download_hf "BAAI/bge-m3" "BAAI/bge-m3"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
info "=== 下载 BGE-Reranker 精排模型(约 1.1GB)==="
|
|||
|
|
download_hf "BAAI/bge-reranker-v2-m3" "BAAI/bge-reranker-v2-m3"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# MinerU 模型通过容器内脚本下载(依赖 magic-pdf 配置)
|
|||
|
|
info "=== MinerU 模型说明 ==="
|
|||
|
|
warn "MinerU 模型(约 2GB)将在 mcp-server 容器首次启动时自动下载"
|
|||
|
|
warn "如需预下载,请在 mcp-server 容器内运行:mineru-models-download"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
|||
|
|
echo -e "${GREEN} 模型下载完成!${NC}"
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo "已下载到:$MODELS_DIR"
|
|||
|
|
du -sh "$MODELS_DIR" 2>/dev/null || true
|