evalstone/tools/docker/Dockerfile.py312

164 lines
6.4 KiB
Docker
Raw 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.

# EvalScope Benchmark Docker Image (Python 3.12)
# 除 swe_bench 系列外,其他 benchmark 均可直接运行
# 使用国内镜像源解决网络问题
# 基于 python:3.12-slim在容器内重新安装所有依赖
FROM python:3.12-slim-bookworm
LABEL maintainer="evalscope-benchmark"
LABEL description="EvalScope benchmark environment with Python 3.12, all dependencies including swe_bench"
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV PIP_NO_CACHE_DIR=1
ENV PYTHONDONTWRITEBYTECODE=1
# 配置 apt 使用清华镜像源
RUN rm -f /etc/apt/sources.list.d/*.list && \
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free' > /etc/apt/sources.list && \
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free' >> /etc/apt/sources.list && \
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free' >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
git wget curl ca-certificates \
vim \
build-essential libssl-dev libffi-dev zlib1g-dev \
docker.io \
&& rm -rf /var/lib/apt/lists/*
# 配置 pip 使用清华镜像源
RUN mkdir -p /root/.config/pip && \
cat > /root/.config/pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 120
retries = 5
EOF
# 升级 pip
RUN pip install --upgrade pip setuptools wheel
# 先固定 numpy/scipy 版本bfcl-eval 要求 numpy==1.26.4;新版 scipy 要求 numpy>=2.0
RUN pip install numpy==1.26.4 scipy==1.13.1
# 安装 evalscope 依赖(先安装依赖,再用本地源码覆盖)
RUN pip install \
openai pandas pyyaml requests tqdm \
tiktoken transformers \
scikit-learn matplotlib seaborn plotly \
jieba nltk rouge-score sacrebleu \
sympy latex2sympy2_extended pillow \
docker pexpect pytest \
tabulate rich jsonlines jsonschema \
langdetect word2number zhconv \
modelscope pydantic overrides \
more_itertools pylatexenc \
rouge-chinese markdown \
editdistance dotenv docstring_parser \
colorlog
# 安装 torchCPU 版即可,主要用于 tokenizer 加载与部分 benchmark 的 tensor 操作)
# 当前 transformers 要求 torch>=2.4numpy==1.26.4 仍兼容 torch 2.4.x
RUN pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cpu 2>/dev/null || \
pip install torch==2.4.0 2>/dev/null || true
# 安装 sandbox 支持ms-sandbox 等)
RUN pip install evalscope[sandbox] 2>/dev/null || \
pip install ms-sandbox 2>/dev/null || true
# 安装 terminal_bench 依赖 (harbor)
RUN pip install "harbor>=0.8.0,<1.0.0" 2>/dev/null || true
# 安装 tau2-bench 依赖(不安装 torch/vllm避免镜像过大
RUN pip install \
fastapi uvicorn psutil loguru \
litellm tenacity deepdiff addict toml 2>/dev/null || true
# 安装 tau2-bench 依赖
RUN pip install git+https://github.com/sierra-research/tau2-bench@v0.2.0 2>/dev/null || true
# 安装 bigcodebench 核心评估依赖(不安装 torch/vllm/accelerate
RUN pip install \
tempdir termcolor wget \
gradio-client 2>/dev/null || true
# 安装 bfcl_v3 依赖(--no-deps 避免 torch再手动补必要依赖
# tree-sitter 必须固定版本bfcl-eval 要求 tree_sitter==0.21.3
# 否则 Language() API 不兼容会报错
RUN pip install --no-deps bfcl-eval==2025.10.27.1 2>/dev/null || true
RUN pip install \
anthropic cohere==5.18.0 datamodel-code-generator==0.25.7 \
faiss-cpu==1.11.0 google-genai==1.24.0 mistralai==1.7.0 \
networkx==3.3 google-search-results \
rank_bm25 html2text boto3 qwen-agent writer-sdk \
tree-sitter==0.21.3 \
tree-sitter-python==0.21.0 \
tree-sitter-javascript==0.21.4 \
tree-sitter-java==0.21.0 \
pathlib 2>/dev/null || true
# sentence-transformers 会强制拉 torch~2GB+),如运行 bfcl_v3 的 embedding 类任务需手动安装
# 安装 soundfile / openpyxl
RUN pip install soundfile openpyxl 2>/dev/null || true
# 安装 SWE-bench 支持
RUN pip install evalscope[swe_bench] 2>/dev/null || \
pip install swebench==4.1.0 2>/dev/null || true
# 创建 workspace
RUN mkdir -p /opt/evalscope
WORKDIR /opt/evalscope
# 复制本地 evalscope 源码、bash 脚本和 tau2-bench
# 注意tau2-bench 在仓库里位于 tools/tau2-bench/
COPY evalscope/ /opt/evalscope/evalscope/
COPY bash/ /opt/evalscope/bash/
COPY tau2-bench/ /opt/evalscope/tools/tau2-bench/
# 用本地源码安装 evalscopeeditable mode
RUN pip install -e /opt/evalscope/evalscope/
# 安装本地 tau2-bench 到 Python 环境(先装依赖,避免与 bfcl-eval 冲突)
RUN pip install \
rich tabulate fastapi uvicorn pandas psutil loguru \
docstring-parser "litellm>=1.80.15,<1.82.7" "tenacity>=9.0.0" \
deepdiff addict PyYAML toml python-dotenv typer requests httpx \
2>/dev/null || true
RUN pip install -e /opt/evalscope/tools/tau2-bench/ --no-deps 2>/dev/null || true
# 最终固定 numpy/scipy 版本,确保 bfcl-eval 兼容且 scipy 不与 numpy 1.26.4 冲突
RUN pip install --force-reinstall numpy==1.26.4 scipy==1.13.1 2>/dev/null || true
# 设置权限
RUN chmod -R +x /opt/evalscope/bash/*.py 2>/dev/null || true
# 创建输出目录
RUN mkdir -p /opt/evalscope/output \
/opt/evalscope/output_limit100 \
/opt/evalscope/output_swe_bench \
/opt/evalscope/datasets
# 验证安装
RUN python -c "import evalscope; print('evalscope ok')" && \
python -c "import evalscope.api.agent; print('evalscope.api.agent ok')" && \
python -c "import openai; print('openai ok')" && \
python -c "import pandas; print('pandas ok')" && \
python -c "import numpy; print('numpy ok')" && \
python -c "import torch; print('torch ok')" && \
python -c "from transformers import AutoTokenizer; print('transformers tokenizer ok')" && \
python -c "import docker; print('docker ok')" && \
python -c "import harbor; print('harbor ok')" && \
python -c "import tau2; print('tau2 ok')" && \
python -c "from tau2.runner.batch import run_single_task; print('tau2 runner ok')" && \
python -c "import bfcl_eval; print('bfcl_eval ok')" && \
python -c "import soundfile; print('soundfile ok')" && \
python -c "import openpyxl; print('openpyxl ok')" && \
docker --version
# 设置 PYTHONPATH确保 editable install 的 evalscope 能被正确加载
ENV PYTHONPATH=/opt/evalscope/evalscope
# 默认命令
CMD ["/bin/bash"]