Ubuntu环境下构建MediaPipe Youtube8m特征提取图时gcc编译conv_ops失败求助
解决MediaPipe Youtube8m特征提取编译时gcc被终止的问题
我之前也碰到过完全一样的问题!这个错误的核心原因是系统内存不足(OOM)导致gcc编译进程被系统强制杀掉——MediaPipe和TensorFlow的编译过程,尤其是处理卷积算子这类核心模块时,会占用大量内存,再加上Bazel默认会启动和CPU核心数匹配的并行编译进程,很容易把内存榨干。结合你的硬件环境,给你几个实用的解决办法:
1. 限制Bazel并行编译的进程数
Bazel默认会根据CPU核心数启动多个编译进程,这在内存有限的机器上很容易触发OOM。你可以通过--jobs N参数手动限制并行数,建议设为CPU核心数的一半(比如你的i5是4核心,就设为2)。修改后的编译命令如下:
bazel build -c opt --linkopt=-s \ --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --define no_aws_support=true \ --jobs 2 \ mediapipe/examples/desktop/youtube8m:extract_yt8m_features
2. 增加系统交换空间(Swap)
如果你的物理内存本身不算充裕(比如8GB及以下),增加交换空间是缓解内存压力的有效办法。执行以下步骤:
- 创建一个4GB的swap文件(可根据需求调整为8GB):
sudo fallocate -l 4G /swapfile - 设置安全权限,避免其他用户访问:
sudo chmod 600 /swapfile - 格式化并启用swap:
sudo mkswap /swapfile sudo swapon /swapfile - 让swap永久生效(重启后依然可用):
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
3. 可选:降低编译优化等级(仅前两种方法无效时使用)
如果上面的方法还是不行,可以尝试把编译优化从-c opt改成-c fastbuild,虽然编译出的程序性能会有所下降,但编译过程的内存占用会大幅降低:
bazel build -c fastbuild --linkopt=-s \ --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --define no_aws_support=true \ --jobs 2 \ mediapipe/examples/desktop/youtube8m:extract_yt8m_features
内容的提问来源于stack exchange,提问作者Aftab Shaikh
相关产品推荐
相关产品推荐

