You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Caffe训练模型时遭遇Protocol Buffer版本不兼容错误求助

解决Caffe训练时Protocol Buffer版本不匹配的崩溃问题

先看看你遇到的错误日志:

I0329 20:38:56.742496 13649 layer_factory.hpp:77] 创建layer data
[libprotobuf FATAL google/protobuf/stubs/common.cc:61] 本程序需要Protocol Buffer运行时库3.5.0版本,但已安装版本为2.6.1。请更新您的库。如果您自行编译程序,请确保头文件与链接时使用的Protocol Buffers版本一致。(版本验证在"google/protobuf/descriptor.pb.cc"中失败。)
terminate called after thro...

这个问题我之前帮不少开发者排查过,核心就是Protocol Buffer(简称protobuf)的编译版本和运行时版本不匹配——Caffe编译时依赖的是3.5.0,但是系统当前加载的是旧的2.6.1版本,导致运行时校验失败直接崩溃。下面给你两种靠谱的解决思路:

思路一:更新系统全局的protobuf到3.5.0版本

如果你的系统没有其他依赖旧版本protobuf的程序,直接替换是最省心的:

  • 先卸载旧版本的protobuf开发包和编译器:
    sudo apt-get remove libprotobuf-dev protobuf-compiler
    
  • 下载并手动编译3.5.0版本(源码编译能保证版本精准):
    wget https://github.com/protocolbuffers/protobuf/releases/download/v3.5.0/protobuf-all-3.5.0.tar.gz
    tar zxf protobuf-all-3.5.0.tar.gz
    cd protobuf-all-3.5.0
    ./configure --prefix=/usr/local
    make -j$(nproc)  # 用所有CPU核心加速编译
    sudo make install
    sudo ldconfig  # 更新系统库缓存
    
  • 验证版本是否生效:
    protoc --version
    
    正常会输出libprotoc 3.5.0

思路二:重新编译Caffe,指定链接正确的protobuf版本

如果系统里还有其他程序依赖旧版protobuf,不想替换全局版本,可以让Caffe单独使用3.5.0:

  • 打开Caffe根目录下的Makefile.config,找到INCLUDE_DIRSLIBRARY_DIRS配置,添加手动编译的3.5.0版本的路径(假设你把protobuf装在了/usr/local):
    INCLUDE_DIRS += /usr/local/include
    LIBRARY_DIRS += /usr/local/lib
    
  • 清理旧的编译产物,重新编译Caffe:
    make clean
    make -j$(nproc)
    make pycaffe  # 如果需要Python接口的话执行这一步
    

额外要注意的坑

  • 如果你用Anaconda虚拟环境,一定要检查环境内的protobuf版本:
    conda list protobuf
    
    如果版本不是3.5.0,用conda install protobuf=3.5.0安装对应版本,避免和系统全局版本冲突
  • 编译完成后,可以用ldd /path/to/your/caffe/build/libcaffe.so查看Caffe链接的protobuf库路径,确认是3.5.0版本的文件,这样能提前规避运行时的问题

内容的提问来源于stack exchange,提问作者Huangxs

火山引擎 最新活动