ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

jetson-inference 系列:在 Jetson TX1 上从源码构建支持 FP16 的 nvcaffe(完整编译指南)

jetson-inference 系列:在 Jetson TX1 上从源码构建支持 FP16 的 nvcaffe(完整编译指南) 人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载本指南以 docs/building-nvcaffe.md 为核心完整讲解如何在 NVIDIA Jetson TX1 上从源码构建nvcaffe——一个为 Jetson 平台特别维护、支持 FP16 半精度推理的 Caffe 分支。文章不仅覆盖从依赖安装、FP16/cuDNN 编译选项配置到 HDF5 链接修复、环境变量设置的完整流程还结合当前仓库jetson-inference的源码与文档说明编译完成的.caffemodel模型如何被 TensorRT 解析并在imageNet、detectNet等推理网络中落地使用。为什么要专门构建 nvcaffe在 Jetson 深度学习生态中jetson-inference提供了一套基于 TensorRT 的推理库libjetson-inference支持图像识别imageNet、目标检测detectNet、语义分割segNet等能力并支持加载 Caffe、TensorFlow UFF、ONNX 等多种格式的自定义模型。而在训练侧Jetson TX1 使用的是一支经过特殊修改的 Caffe 分支——nvcaffe。这支代码以experimental/fp16分支的形式发布在 NVIDIA 的 Caffe 仓库中。之所以要使用这支特殊分支核心原因在于该分支加入了 FP16半精度浮点支持。Jetson TX1 的 GPUMaxwell 架构sm_53原生支持 FP16 运算启用后可以在保持模型精度的前提下显著降低内存占用与计算开销这对显存与功耗都受限的嵌入式平台意义重大。从仓库源码可以看出 Caffe 模型在整个推理链路中的位置tensorNet::ProfileModel()在解析模型时按类型分发当模型格式为 Caffe 时调用nvcaffeparser1::createCaffeParser()解析.prototxt部署文件与.caffemodel权重文件见 c/tensorNet.cpp模型类型枚举中MODEL_CAFFE正是对应.caffemodel文件见 c/tensorNet.h。因此先在 Jetson 上正确构建 nvcaffe 并训练出模型是后续通过 TensorRT 进行高效推理的前提。1. 安装依赖Installing Dependencies在开始编译之前需要通过apt-get安装一系列编译与运行所需的系统依赖包。以下是原文给出的完整依赖清单逐条说明用途$ sudo apt-get update -y $ sudo apt-get install cmake -y # 通用依赖 $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev \ libhdf5-serial-dev protobuf-compiler -y $ sudo apt-get install --no-install-recommends libboost-all-dev -y # BLAS $ sudo apt-get install libatlas-base-dev -y # 其余依赖 $ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y # Python 依赖 $ sudo apt-get install python-dev python-numpy python-skimage python-protobuf -y各依赖包的作用依赖包作用cmake构建工具Caffe 旧版 Makefile 构建也依赖部分 cmake 产物libprotobuf-dev/protobuf-compilerProtocol Buffers用于解析 Caffe 的.prototxt网络描述文件libleveldb-dev/liblmdb-dev/libsnappy-devLMDB / LevelDB 数据层与压缩库用于读取训练数据集libhdf5-serial-devHDF5 数据格式支持libboost-all-devBoost 通用 C 库libatlas-base-devBLAS 线性代数库Caffe 默认数值后端libgflags-dev/libgoogle-glog-devGoogle 的命令行参数解析与日志库python-devpython-numpypython-skimagepython-protobufPython 接口pycaffe及其科学计算依赖Snappy 符号链接修复Caffe 链接时依赖 Snappy 库但 Ubuntu 默认只提供带版本号的libsnappy.so.1缺少不带版本号的符号链接会导致链接失败。需要手动创建符号链接$ sudo ln -s /usr/lib/libsnappy.so.1 /usr/lib/libsnappy.so $ sudo ldconfig2. 克隆 nvcaffe 的 fp16 分支Clone nvcaffe fp16 branch使用git clone并指定-b experimental/fp16分支参数克隆 NVIDIA 的 Caffe 仓库$ git clone -b experimental/fp16 https://github.com/NVIDIA/caffe执行后会在 Jetson 上生成一个名为caffe的本地目录。该目录就是后续所有编译操作的工作目录后续命令默认已cd进入该目录。请确认你的网络可以正常访问该仓库克隆完成后可用git branch确认当前分支确为experimental/fp16。3. 配置构建选项Setup build options进入caffe目录后先基于示例配置生成Makefile.config并移除 cmake 相关构建文件本指南采用 Caffe 经典的 Makefile 构建方式$ cd caffe $ cp Makefile.config.example Makefile.config $ rm -rf cmake/ CMakeLists.txt注意rm -rf cmake/ CMakeLists.txt会删除仓库内的 cmake 构建系统仅保留 Makefile 构建路径这是 Jetson 上构建该分支的既定流程请勿在共享环境或需要 cmake 构建的场景下误执行。启用 FP16FP16 支持是本分支的核心特性默认在Makefile.config中被注释掉用sed取消注释即可开启$ sed -i s/# NATIVE_FP16/NATIVE_FP16/g Makefile.config开启后编译出的 Caffe 将支持float16数据类型的网络定义与计算配合 TX1 的 GPU 硬件 FP16 单元可获得更好的性能。启用 cuDNNcuDNN 是 NVIDIA 的深度神经网络加速库Jetson 的 JetPack 中已预装。同样用sed取消注释$ sed -i s/# USE_CUDNN/USE_CUDNN/g Makefile.config启用 cuDNN 后卷积、池化、全连接等算子会调用 cuDNN 的高性能实现这是获得接近硬件极限性能的关键选项。启用 compute_53 / sm_53TX1 GPU 架构Jetson TX1 的 Maxwell GPU 计算能力为 5.3而 Caffe 默认的 CUDA 编译参数只针对 compute_50。需要将架构参数替换为 compute_53/sm_53$ sed -i s/-gencode archcompute_50,codecompute_50/-gencode archcompute_53,codesm_53 -gencode archcompute_53,codecompute_53/g Makefile.config该命令同时生成sm_53针对 Maxwell 实机运行的 SASS 代码与compute_53可移植的 PTX 代码两份目标代码前者保证运行性能后者提供一定兼容兜底。若在 Jetson TX2Pascalsm_62或其他设备上构建应替换为对应的架构参数。配置头文件与链接库路径HDF5Ubuntu 的 HDF5 开发包头文件位于/usr/include/hdf5/serial/链接库位于/usr/lib/aarch64-linux-gnu/hdf5/serial/而 Caffe 默认的Makefile.config中没有这些路径。需要编辑Makefile.config将INCLUDE_DIRS : $(PYTHON_INCLUDE) /usr/local/include改为INCLUDE_DIRS : $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/同时将LIBRARY_DIRS : $(PYTHON_LIB) /usr/local/lib /usr/lib改为LIBRARY_DIRS : $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu/hdf5/serial/修复 HDF5 链接问题即使路径配置正确Ubuntu 上 HDF5 串行版serial与普通版默认的库文件名不一致也会导致链接失败。需要创建符号链接让libhdf5.so/libhdf5_hl.so指向实际的 serial 版本$ sudo ln -s /usr/lib/aarch64-linux-gnu/libhdf5_serial.so.10 /usr/lib/aarch64-linux-gnu/libhdf5.so $ sudo ln -s /usr/lib/aarch64-linux-gnu/libhdf5_serial_hl.so.10 /usr/lib/aarch64-linux-gnu/libhdf5_hl.so注意以上路径中的aarch64-linux-gnu为 Jetson TX1 的 64 位 ARM 架构目录如果在其他平台构建请按实际架构目录调整如 x86_64 平台为/usr/lib/x86_64-linux-gnu/hdf5/serial/。4. 编译 nvcaffeCompiling nvcaffe配置完成后开始编译。-j4表示使用 4 个并行编译任务TX1 为 4 核 CPU可据此估算编译时间$ make -j4 $ make pycaffe $ make distribute三条命令的职责命令作用make -j4编译 Caffe 核心库libcaffe.so与命令行工具make pycaffe编译 Python 接口pycaffe生成caffePython 模块用于在 Python 中定义/训练网络make distribute生成独立可分发的目录结构包含头文件、库文件与工具便于后续部署与路径配置编译过程中若遇到错误请重点检查上一步的 Snappy 符号链接与 HDF5 路径配置——这两项是 TX1 上最常见的失败点。5. 设置环境变量Set environment paths编译产物需要通过环境变量暴露给 shell。编辑~/.bashrc追加以下两行注意将/home/ubuntu替换为你的实际用户主目录caffe目录路径也按实际克隆位置调整export PATH/usr/local/cuda-8.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/ubuntu/caffe/build/tools export PYTHONPATH/home/ubuntu/caffe/python:$PYTHONPATHPATH中的/usr/local/cuda-8.0/bin是 CUDA 工具链路径TX1 早期 JetPack 对应 CUDA 8.0请按实际安装版本调整末尾的/home/ubuntu/caffe/build/tools是make distribute生成工具的目录包含caffe命令行工具。PYTHONPATH指向caffe/python使 Python 可以import caffe。修改完成后执行source ~/.bashrc或重新打开终端使配置生效。验证方式运行which caffe确认工具可找到执行python -c import caffe; print(caffe.__version__)确认 pycaffe 可用。6. 安装 iPython可选如果希望在 Jupyter Notebook 中交互式地使用 pycaffe 进行网络调试与可视化训练可以额外安装 iPython 生态$ sudo apt-get install ipython ipython-notebook python-pandas -ypython-pandas用于数据分析配合 Notebook 便于查看训练日志与 loss 曲线。此步骤非必需跳过不影响后续训练与推理。7. 测试 nvcaffeTesting nvcaffe编译与环境配置完成后运行 Caffe 自带的单元测试套件验证核心算子与数据层在 TX1 上的正确性$ make runtestruntest会执行 Caffe 内置的 Google Test 用例覆盖卷积、池化、归一化、数据层等核心组件。全部通过说明 FP16/cuDNN 等编译选项工作正常可以投入模型训练。提示原文将本步骤编号为 6与其前一步 6. Install iPython 重复这是文档编号的小笔误按执行顺序理解即可。模型构建之后从 caffemodel 到 TensorRT 推理nvcaffe 编译并测试通过后产出的是标准 Caffe 格式的.prototxt网络结构与.caffemodel权重。这两类文件正是jetson-inference中 TensorRT 引擎的输入。在仓库中模型解析入口tensorNet::ProfileModel()中当mModelType MODEL_CAFFE时调用nvcaffeparser1::createCaffeParser()通过parser-parse(deployFile, modelFile, *network, modelDataType)将 Caffe 网络解析为 TensorRT 网络定义由于 Caffe 文件本身不声明输出张量代码中还需用network-markOutput()手动标记输出层见 c/tensorNet.cpp。推理对象调用imageNet::Create(prototxt_path, model_path, ...)等接口直接接收 prototxt 与 caffemodel 路径见 c/imageNet.h 与 docs/building-repo.md 中的类定义示例。命令行实例以目标检测为例docs/detectnet-console.md 展示了将 DIGITS 训练产出的 snapshot 交给detectnet-console的完整命令$ NET20170504-190602-879f_epoch_100 $ ./detectnet-console dog_0.jpg output_0.jpg \ --prototxt$NET/deploy.prototxt \ --model$NET/snapshot_iter_38600.caffemodel \ --input_blobdata \ --output_cvgcoverage \ --output_bboxbboxes训练侧衔接若采用宿主机训练 Jetson 推理的经典架构宿主机安装的 NVcaffe 使用的是caffe-0.15分支配合 DIGITS 训练 DNN而 Jetson 侧推理由 TensorRT 完成、并不依赖 Caffe见 docs/digits-native.md。本文的 TX1 本地 nvcaffe 则用于在设备端直接完成训练与微调两者定位不同可按需选择。常见问题与注意事项HDF5 链接错误多为符号链接未创建或路径写错按第 1、3 步核对。Snappy 链接错误libsnappy.so符号链接缺失按第 1 步修复。CUDA 架构不匹配compute_53仅适用于 TX1Maxwell在 TX2/Xavier 等设备上需替换为对应架构参数。CUDA 版本环境变量示例中的/usr/local/cuda-8.0对应 TX1 早期 JetPack请以实际安装的 CUDA 路径为准。路径替换所有命令中的/home/ubuntu、caffe目录位置请按实际环境调整勿直接照抄。推理侧无 Caffe 依赖TensorRT 通过NvCaffeParser直接消费 caffemodelTensorRT 10 及以上版本已移除对传统 Caffe 模型的支持见 c/tensorNet.cpp 中的版本判断逻辑因此 Jetson 上如需长期部署重点是保证训练环境能产出标准格式的 Caffe 模型而非在推理机上维护整套 Caffe。总结本文完整梳理了在 Jetson TX1 上从零构建支持 FP16 的 nvcaffe 的六个步骤安装依赖、克隆 fp16 分支、配置编译选项FP16/cuDNN/sm_53/HDF5、编译、设置环境变量、运行测试并逐一说明了每条命令的作用与常见坑点。构建完成后产出物即可通过jetson-inference的tensorNet解析链路被imageNet、detectNet、segNet等推理网络加载在 Jetson 上实现从训练自定义 Caffe 模型到TensorRT 加速推理的完整闭环。赞分享人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载相关推荐jetson-inference 源码编译实战在 NVIDIA Jetson 上从源码构建 Hello AI World 项目jetson inference 源码编译实战在 NVIDIA Jetson 上从源码构建 Hello AI World 项目 本文是 Hello AI Wo人工智能计算机视觉深度学习微调Brida与Frida完美结合10个实用脚本提升移动安全测试效率Brida与Frida完美结合10个实用脚本提升移动安全测试效率 Brida是一款强大的开源工具它在Burp Suite和Frida之间搭建了高效桥梁为移人工智能计算机视觉深度学习微调攻克Jetson-inference构建难关从依赖地狱到编译成功的完整指南攻克Jetson inference构建难关从依赖地狱到编译成功的完整指南 jetson inference是一个为NVIDIA Jetson设备提供深度学习人工智能计算机视觉深度学习微调上一篇QuantsPlaybook 行业轮动实战量价因子从构建到落地的完整指南下一篇Ray RLlib 环境 API 完全指南gymnasium 单智能体、MultiAgentEnv 多智能体与 EnvRunner 数据采集体系创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表