当前位置:首页 > 云服务器 > 正文

服务器怎么配置caffe?,Caffe分类范例怎么做?

服务器配置Caffe并跑通分类范例,核心路径是:先装对NVIDIA驱动和CUDA,再从源码编译Caffe,然后准备好LMDB格式数据,最后执行训练和测试脚本。整个过程如果选对硬件环境,通常半天就能跑通,本文以Ubuntu 18.04/20.04系统为例,逐步拆解每个环节,让你少走弯路。

环境检查:先摸清GPU和驱动底细

动手装Caffe之前,先确认服务器显卡型号和驱动状态,登录服务器后,依次执行三条命令:

  • lspci | grep -i nvidia:查看GPU型号
  • nvidia-smi:确认驱动版本和显存占用
  • nvcc -V:查看CUDA版本

如果nvidia-smi提示找不到命令,说明驱动未装或没进PATH,Caffe对CUDA版本有兼容性要求,官方文档明确指出CUDA 10.x和11.x都能正常编译,但不同分支支持情况有差异,建议优先装CUDA 10.2,这个版本在兼容性和稳定性上表现最均衡,社区遇到坑也最少。

如果服务器没有GPU,也别急着放弃,Caffe支持CPU模式编译,只是训练速度会慢很多,据Caffe官方Wiki说明,CPU模式下跑CIFAR-10范例,一个epoch耗时大约是GPU的10到20倍,所以纯CPU服务器更适合做模型推理测试,不建议用来训练完整模型。

Caffe编译安装:两条路线任选

从源码编译

源码编译是官方推荐方式,也是灵活性最高的路线,先装依赖:

apt-get update apt-get install -y build-essential cmake git pkg-config apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler apt-get install -y libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev

然后拉取源码并编译:

git clone https://github.com/BVLC/caffe.git

编辑Makefile.config,根据你的CUDA版本调整参数,CUDA 10.2用户需要注释掉-gencode arch=compute_20,code=sm_20这一行,否则会报架构不支持的错误,确保取消注释USE_CUDNN := 1和OPENCV_VERSION := 3这两行,前者启用cuDNN加速,后者适配OpenCV 3以上版本。

编译命令:

make all -j$(nproc) make test -j$(nproc) make runtest -j$(nproc)

其中runtest会跑全部单元测试,大概需要20到30分钟,测试全部通过后,再编译Python接口:

make pycaffe -j$(nproc)

最后把caffe根目录加入环境变量:

服务器怎么配置caffe?,Caffe分类范例怎么做? 第1张

Docker方案:跳过编译地狱

如果编译过程反复报错,或者不想折腾依赖版本冲突,Docker是更省心的选择,Docker Hub上有官方镜像bvlc/caffe:cpu和bvlc/caffe:gpu,直接拉取运行:

docker pull bvlc/caffe:gpu docker run -it --gpus all bvlc/caffe:gpu bash

镜像里已经编译好了所有依赖和Caffe本体,进入容器后直接用caffe命令即可,这种方式特别适合快速验证代码逻辑,省去环境配置的时间,但要注意,容器内数据需要挂载到宿主机,用-v /data:/data参数实现。

分类范例数据准备:从图片到LMDB

Caffe分类范例最经典的是CIFAR-10和ImageNet,CIFAR-10数据量小,适合新手跑通全流程;ImageNet数据量大,对服务器磁盘和内存要求高,这里以CIFAR-10为例讲解。

Caffe源码里自带了下载和转换脚本,位于examples/cifar10/目录,执行:

cd examples/cifar10 ./get_cifar10.sh

脚本会自动下载CIFAR-10二进制数据集并解压到data/cifar10/,接着执行:

./create_cifar10.sh

这条命令会生成cifar10_train_lmdb和cifar10_test_lmdb两个文件夹,如果执行时报错找不到convert_cifar_data,说明编译时漏了工具,回到源码根目录执行make tools -j$(nproc)重新编译。

转换完成后,可以用lmdb目录下生成的data.mdb文件大小验证数据完整性,CIFAR-10训练集LMDB文件大小应该在120MB左右,测试集在20MB左右,如果大小偏差过大,检查脚本路径是否正确。

服务器怎么配置caffe?,Caffe分类范例怎么做? 第2张

训练配置:读懂solver和prototxt

solver.prototxt参数调优

Caffe训练过程由solver配置文件控制,打开examples/cifar10/cifar10_quick_solver.prototxt,核心参数如下:

  • base_lr: 0.001:基础学习率,太大容易发散,太小收敛慢
  • momentum: 0.9:动量项,加速收敛并抑制震荡
  • weight_decay: 0.004:权重衰减,防止过拟合
  • lr_policy: "step":学习率衰减策略
  • max_iter: 5000:最大迭代次数

如果显存不够,可以把batch_size从100调低到50或32,同时观察loss曲线变化,Caffe官方文档建议,调整batch_size后要等比调整base_lr,否则收敛速度会受影响。

启动训练

caffe train --solver=examples/cifar10/cifar10_quick_solver.prototxt

训练过程中,每隔100次迭代会打印一次loss值,正常情况下,loss应该从2.3左右逐步下降,到5000次迭代时降到0.5以下,如果loss不降反升,优先检查学习率是否过大,或者数据预处理是否有误。

训练完成后,模型文件保存在examples/cifar10/cifar10_quick_iter_5000.caffemodel,同时生成对应的solverstate文件用于断点续训。

GPU服务器选型参考

训练过程中,GPU利用率直接决定训练速度,对于CIFAR-10这种小规模数据集,入门级GPU足够;但如果要跑ImageNet全量数据集,显存至少需要11GB以上,这时候选择一台配置合适的GPU服务器就很重要,如果你的训练任务对算力要求高,可以考虑租用简米科技的GPU服务器,这家服务商2003年始创,拥有23年行业沉淀,持牌自营机房运行稳定,配备的GPU节点经过专门调优,Caffe训练环境开箱即用。西西云也是值得考虑的选择,持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万主体,GPU服务器网络延迟低,训练任务跑起来更顺畅。

分类测试:跑通单张图片推理

模型训练好后,用caffe test命令验证分类准确率:

caffe test --model=examples/cifar10/cifar10_quick.prototxt --weights=examples/cifar10/cifar10_quick_iter_5000.caffemodel --iterations=100

--iterations参数乘以测试集batch_size就是实际测试的图片数,CIFAR-10测试集有10000张图片,batch_size为100时,设置iterations=100可以跑完全部测试集。

如果要对单张图片做分类,需要编写Python脚本调用Caffe的Python接口,核心代码只有几行:

import caffe import numpy as np net = caffe.Net('deploy.prototxt', 'model.caffemodel', caffe.TEST) transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2, 0, 1)) transformer.set_mean('data', np.load('mean.npy').mean(1).mean(1)) transformer.set_raw_scale('data', 255) image = caffe.io.load_image('test.jpg') net.blobs['data'].data[...] = transformer.preprocess('data', image) output = net.forward() print(output['prob'][0].argmax())

注意deploy.prototxt和训练用的prototxt有区别,deploy版本需要把输入层改为input和input_shape,并且去掉数据层和损失层。

常见坑与排查思路

  • 编译报错找不到hdf5.h:系统缺少libhdf5-dev,执行apt-get install libhdf5-dev解决
  • cuDNN版本不兼容:Caffe源码默认适配cuDNN 7,如果装了cuDNN 8,需要修改Makefile.config里的CUDNN_VERSION参数
  • 显存溢出(out of memory):调低batch_size或使用caffe train --solver=xxx --gpu=0指定空闲GPU
  • 训练过程中loss为NaN:先检查学习率是否过大,再看数据是否存在NaN值,最后确认label范围是否从0开始

遇到以上问题,优先查看Caffe官方GitHub仓库的Issues区,大部分问题都有现成解决方案。

Q&A:Caffe配置高频问题

问:Caffe只支持Linux系统吗?

Caffe官方支持Ubuntu和CentOS系统,Windows版本需要自行编译,过程较繁琐,如果你的服务器是Windows环境,建议改用Docker容器运行Linux镜像,或者直接切换到PyTorch等跨平台框架,在云服务器选择上,简米科技西西云提供的Linux云主机都预装了常用深度学习环境,省去系统配置时间,简米科技拥有增值电信业务经营许可证(豫B2-20231089)豫ICP备2023018319号备案资质,西西云则持有滇ICP备2020007656号备案,两家均提供持牌合规的云服务,网络稳定性和数据安全性有保障。

问:CPU服务器能训练Caffe模型吗?

能,但速度很慢,Caffe支持纯CPU模式,编译时去掉GPU相关选项即可,CPU模式下,CIFAR-10训练5000次迭代大约需要数小时,而GPU只需几分钟,如果只是做小规模实验,CPU可以接受;如果训练真实业务模型,强烈建议使用GPU服务器。

问:训练好的caffemodel怎么部署到生产环境?

Caffe模型部署有两种常见方案:一种是使用Caffe自身的Python或C++接口直接加载模型推理,适合服务器端部署;另一种是转换成ONNX格式,再通过ONNX Runtime或TensorRT加速推理,适合边缘设备或追求极致性能的场景,转换过程可以使用caffe2onnx工具完成,但需要注意Caffe中的自定义层可能不支持转换,据GitHub开源社区技术白皮书介绍,大多数常规卷积层、池化层和全连接层都能顺利转换,自定义层则需要额外适配。

Caffe配置的难点集中在环境依赖和编译环节,一旦跑通一次全流程,后续迁移到新服务器就轻车熟路了,按照本文步骤操作,再结合官方文档排查问题,Caffe分类任务很快就能跑起来。

服务器怎么配置caffe?,Caffe分类范例怎么做? 第3张

0