swe-bench环境安装踩坑
最近在使用swe-bench评估代码效果时,安装环境碰到一些问题,现总结一下,避免下次要重新踩坑。
1.安装pyserini踩坑
安装swe-bench的环境,在使用检索功能时,需要依赖pyserini,安装pyserini的坑如下
jdk21安装
centos7 安装JDK21亲测有效
在/usr/local目录下执行或解压后mv到该目录:
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz配置环境变量:vim /etc/profile
export JAVA_HOME=/usr/local/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar立即生效
source /etc/profile验证java配置javajavac java -version 创建一个新的指向新JDK版本的软链接
rm /usr/bin/java # 删除当前的/usr/bin/java软链接(如果存在)
ln -s /usr/local/jdk-21.0.6/bin/java /usr/bin/java # 软链接相当于windows中的快捷方式
1.1使用配套的pyserini版本
在swe-bench环境,建议使用稳定的0.16.0的版本:
pip install pyserini==0.16.0
1.2 GLIBXX问题
按pyserini的官网安装后,运行
python -m swebench.inference.make_datasets.bm25_retrieval \--dataset_name_or_path princeton-nlp/SWE-bench_Lite \--output_dir ./retrieval_results \--splits test
碰到问题时,碰到GLIBXX_3.4.9或GLIBXX_3.4.6的问题,如下:
1.2.1 解决方案:
解决的方案包括多种,这里采用对系统环境影响最小的方案
a) 推荐方案
# 激活虚拟环境
conda activate swe_bench# 强制升级到最新版 libstdcxx-ng(包含 GLIBCXX_3.4.29)
conda install -c conda-forge "libstdcxx-ng>=13" --force-reinstall# 验证 GLIBCXX 版本
strings ${CONDA_PREFIX}/lib/libstdc++.so.6 | grep GLIBCXX_3.4.29
若输出中包含 GLIBCXX_3.4.29,则表示成功。
其他参考方案:
b) 使用 Conda-Forge 安装 Faiss
# 先卸载现有 faiss(如果是通过 pip 安装的)
pip uninstall faiss-cpu faiss-gpu# 通过 Conda-Forge 安装 faiss
conda install -c conda-forge faiss-cpu # CPU 版本
# 或
conda install -c conda-forge faiss-gpu # GPU 版本
c) 从源码编译 Faiss
如果预编译的二进制包不兼容,可手动编译适配当前系统的版本:
conda activate swe_bench
conda install -c conda-forge numpy swig openblas# 下载源码
git clone https://github.com/facebookresearch/faiss.git
cd faiss
git checkout v1.8.0 # 使用稳定版本# 编译安装
cmake -B build -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=ON .
make -C build -j4
pip install .
d) 强制使用 Conda 的 GLIBCXX
通过环境变量指定优先使用 Conda 环境内的 libstdc++.so.6:
# 临时生效
export LD_LIBRARY_PATH=${CONDA_PREFIX}/lib:$LD_LIBRARY_PATH# 永久生效(添加到 ~/.bashrc 或环境激活脚本)
echo 'export LD_LIBRARY_PATH=${CONDA_PREFIX}/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
e) 升级系统 GLIBC++(需 root 权限)
仅建议在可控制的环境(如容器或开发机)中操作:
# CentOS/RHEL 7
sudo yum install centos-release-scl
sudo yum install devtoolset-11
scl enable devtoolset-11 bash# Ubuntu 18.04
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install libstdc++6=12.1.0-2ubuntu1~18.04# 更新动态库缓存
sudo ldconfig
3. numpy版本过高的问题
运行上述脚本时会提示运行的numpy版本过高,可降低numpy的版本
pip install numpy==1.26.4