Vagrant Ubuntu环境下bazel构建时pip_deps因SigKill终止问题求助
问题产生原因
核心触发原因是Vagrant虚拟机分配的内存不足,结合pip运行参数的差异共同导致:
- 直接执行
pip3 install torch==1.7.1时,pip会默认拉取匹配当前系统、Python版本的预编译wheel包,不需要本地编译,内存占用极低,因此可以正常完成。 - 执行
python3 -m pip --isolated wheel torch==1.7.1或者bazel调用rules_python_external执行构建时,--isolated参数会忽略全局pip配置(包括自定义的PyPI镜像源),如果官方源没有匹配你环境的预编译torch 1.7.1 wheel包,pip会自动拉取源码进行本地编译,而PyTorch源码编译最低需要68G运行内存,Vagrant默认分配的12G内存无法支撑,触发系统OOM(内存溢出)机制,进程被发送SIGKILL信号强制终止。
你观察到的rules_python_external报错行缺少换行符是旧版本rules_python的日志输出bug,并不影响构建逻辑,不是本次构建失败的根本原因。
解决方案
- 调整Vagrant虚拟机内存配置:打开项目根目录的
Vagrantfile,找到虚拟化配置段,将内存分配调整为至少8G,示例配置(VirtualBox provider为例):
修改完成后执行config.vm.provider "virtualbox" do |vb| vb.memory = "8192" # 可同步调整CPU核心数加快编译速度 vb.cpus = "4" endvagrant reload重启虚拟机生效。 - 修正rules_python的pip运行参数:在WORKSPACE文件的pip仓库配置中,去掉不必要的
--isolated参数,同时添加可用的PyPI镜像源配置,让pip可以直接拉取预编译的PyTorch wheel包,跳过本地编译流程。 - 修复日志换行问题:升级rules_python依赖到0.20.0及以上的稳定版本,即可解决rules_python_external的报错输出缺换行符的问题。
- (可选兜底方案)如果不想调整虚拟机内存,可以提前在Vagrant虚拟机内全局安装所有requirements.txt依赖,然后配置bazel使用系统Python环境的依赖,跳过rules_python的在线依赖拉取流程。
内容的提问来源于stack exchange,提问作者de1337ed
相关产品推荐
相关产品推荐

