Add checkpoint skip for loaded images and --download-swe flag

This commit is contained in:
sora 2026-07-27 06:22:39 +00:00
parent 8d6c5d8c1f
commit 5532c9403e
2 changed files with 98 additions and 8 deletions

View File

@ -78,7 +78,19 @@ python bash/run.py \
## 3. Docker 镜像下载与部署
根据是否跑 SWE-bench选择下面两种方式之一。
最简方式:直接运行一键部署脚本。
```bash
# 默认不下载 SWE-Bench 镜像(体积大)
bash scripts/deploy_evalscope.sh /data1/sora
# 如果需要跑 SWE-Bench加 --download-swe
bash scripts/deploy_evalscope.sh --download-swe /data1/sora
```
脚本会自动完成:安装 modelscope、登录、下载数据集、下载/加载 Docker 镜像、配置 Docker/containerd、加载 sandbox 镜像。重复执行时会通过 checkpoint 自动跳过已加载的镜像。
如果需要手动分步操作,参考下面两种方式。
### 3.1 方式 A不测 SWE-bench 的 Docker 配置

View File

@ -1,8 +1,13 @@
#!/bin/bash
# ============================================================
# EvalScope 完整部署脚本
# 用法: bash deploy_evalscope.sh <BASE_DIR> [TOKEN]
# 示例: bash deploy_evalscope.sh /data1/sora ms-3d554a39-6e07-496d-8022-0b0ee64a6389
# 用法: bash deploy_evalscope.sh [OPTIONS] <BASE_DIR> [TOKEN]
# 示例:
# bash deploy_evalscope.sh /data1/sora
# bash deploy_evalscope.sh --download-swe /data1/sora
#
# 断点续传:已加载的镜像/tar 包会记录在 <BASE_DIR>/evalscope/docker/.deploy_checkpoint
# 重复执行时会自动跳过,避免二次加载。
# ============================================================
set -euo pipefail
@ -10,6 +15,36 @@ set -euo pipefail
# --------------------------------------------------
# 1. 参数解析
# --------------------------------------------------
DOWNLOAD_SWE=0
POSITIONAL_ARGS=()
while [[ $# -gt 0 ]]; do
case "$1" in
--download-swe)
DOWNLOAD_SWE=1
shift
;;
--help|-h)
echo "用法: bash deploy_evalscope.sh [OPTIONS] <BASE_DIR> [TOKEN]"
echo "选项:"
echo " --download-swe 同时下载 SWE-Bench 镜像包(默认不下载,体积很大)"
echo " -h, --help 显示帮助"
exit 0
;;
-*)
echo "未知选项: $1"
echo "使用 --help 查看用法"
exit 1
;;
*)
POSITIONAL_ARGS+=("$1")
shift
;;
esac
done
set -- "${POSITIONAL_ARGS[@]}"
BASE_DIR="${1:-/data1/sora}" # 基础目录,默认 /data1/sora
DEFAULT_TOKEN="ms-3d554a39-6e07-496d-8022-0b0ee64a6389"
MODELSCOPE_TOKEN="${2:-$DEFAULT_TOKEN}"
@ -21,6 +56,25 @@ IMAGES_DIR="$DOCKER_DIR/images"
CONTAINERD_DIR="$DOCKER_DIR/containerd"
SWE_IMAGES_DIR="$DOCKER_DIR/swe_images"
DATASETS_DIR="$EVALSCOPE_DIR/datasets"
CHECKPOINT_FILE="$DOCKER_DIR/.deploy_checkpoint"
# 断点:记录/检查已加载的镜像或 tar 包
mark_loaded() {
local key="$1"
mkdir -p "$DOCKER_DIR"
touch "$CHECKPOINT_FILE"
if ! grep -qx "$key" "$CHECKPOINT_FILE" 2>/dev/null; then
echo "$key" >> "$CHECKPOINT_FILE"
fi
}
is_loaded() {
local key="$1"
if [ -f "$CHECKPOINT_FILE" ] && grep -qx "$key" "$CHECKPOINT_FILE" 2>/dev/null; then
return 0
fi
return 1
}
# --------------------------------------------------
# 2. 安装依赖
@ -119,7 +173,14 @@ sudo systemctl start docker
# 7. 加载 evalscope 环境镜像
# --------------------------------------------------
echo "==> 加载 evalscope Docker 镜像..."
if docker images --format '{{.Repository}}:{{.Tag}}' | grep -qx "evalscope-complete-py312:latest"; then
echo "evalscope-complete-py312:latest 已存在,跳过加载"
elif is_loaded "evalscope-complete-py312.tar.gz"; then
echo "evalscope-complete-py312.tar.gz 已加载过checkpoint跳过加载"
else
docker load -i "$DOCKER_DIR/evalscope-complete-py312.tar.gz"
mark_loaded "evalscope-complete-py312.tar.gz"
fi
# --------------------------------------------------
# 8. 克隆代码仓库
@ -167,9 +228,14 @@ load_sandbox_image() {
echo "镜像 $expected_image 已存在,跳过加载"
return 0
fi
if is_loaded "$file"; then
echo "镜像包 $file 已加载过checkpoint跳过加载"
return 0
fi
if [ -f "$SANDBOX_IMAGES_DIR/$file" ]; then
echo "==> 加载 $file ..."
docker load -i "$SANDBOX_IMAGES_DIR/$file"
mark_loaded "$file"
return 0
fi
return 1
@ -196,15 +262,17 @@ else
fi
# --------------------------------------------------
# 10. 下载 SWE-Bench 镜像包(可选
# 10. 下载 SWE-Bench 镜像包(默认不下载,需加 --download-swe
# --------------------------------------------------
if [ -n "$MODELSCOPE_TOKEN" ]; then
if [ "$DOWNLOAD_SWE" -eq 1 ]; then
echo "==> 下载 SWE-Bench 镜像包..."
mkdir -p "$SWE_IMAGES_DIR"
modelscope download \
--repo-type dataset \
--local_dir "$SWE_IMAGES_DIR" \
SoraAmami/swe-bench-verified-images || echo "警告SWE-Bench 镜像下载失败"
else
echo "==> 跳过 SWE-Bench 镜像包下载(如需下载请加 --download-swe"
fi
# --------------------------------------------------
@ -217,13 +285,23 @@ if [ -d "$SWE_IMAGES_DIR" ] && ls "$SWE_IMAGES_DIR"/swebench_batch_*.tar.gz 1>/d
echo "共找到 $TOTAL 个镜像包"
IDX=0
LOADED_COUNT=0
SKIPPED_COUNT=0
for TAR in "${TARS[@]}"; do
IDX=$((IDX + 1))
echo "[$IDX/$TOTAL] 加载 $(basename "$TAR")..."
BASENAME=$(basename "$TAR")
if is_loaded "$BASENAME"; then
echo "[$IDX/$TOTAL] 跳过(已加载过): $BASENAME"
SKIPPED_COUNT=$((SKIPPED_COUNT + 1))
continue
fi
echo "[$IDX/$TOTAL] 加载 $BASENAME ..."
docker load -i "$TAR"
mark_loaded "$BASENAME"
LOADED_COUNT=$((LOADED_COUNT + 1))
done
echo "SWE-Bench 镜像加载完成,已加载 $(docker images | grep '^swebench/' | wc -l)"
echo "SWE-Bench 镜像加载完成:本次加载 $LOADED_COUNT 个,跳过 $SKIPPED_COUNT,已加载 $(docker images | grep -c '^swebench/' || true)"
else
echo "跳过 SWE-Bench 镜像加载(未找到镜像包)"
fi