首页 > 其他分享 >百度 Apollo 自定义安装第三方库(以 libtorch 为例)_apollo 使用自定义库

百度 Apollo 自定义安装第三方库(以 libtorch 为例)_apollo 使用自定义库

时间:2024-05-19 13:01:41浏览次数:22  
标签:NAME 自定义 为例 libtorch VERSION PKG https apollo cpu

CSDN搬家失败,手动导出markdown后再导入博客园

百度 Apollo 是一个非常优秀的自动驾驶框架,但我们平时在开发中也会遇到各种原 repo 没有处理的问题。笔者近期想用 pytorch 的 C++ 前端推理模型,但是遇到了 libtorch 版本与 pytorch 版本不匹配的问题,因此想自己安装一个新版本的 libtorch。

首先找到 Apollo 的 docker 是怎么安装 libtorch 或其他第三方库的。在 / apollo/docker/build/installers 文件夹下面,可以看到非常多的 install_***.sh,这些就是安装第三方库的脚本。原始的 install_libtorch.sh 如下

set -e
 
CURR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
. ${CURR_DIR}/installer_base.sh
 
# TODO(build): Docs on how to build libtorch on Jetson boards
# References:
#   https://github.com/ApolloAuto/apollo/blob/pre6/docker/build/installers/install_libtorch.sh
#   https://github.com/dusty-nv/jetson-containers/blob/master/Dockerfile.pytorch
#   https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-6-0-now-available
#   https://github.com/pytorch/pytorch/blob/master/docker/caffe2/ubuntu-16.04-cpu-all-options/Dockerfile
bash ${CURR_DIR}/install_mkl.sh
 
TARGET_ARCH="$(uname -m)"
 
##============================================================##
# libtorch_cpu
 
if [[ "${TARGET_ARCH}" == "x86_64" ]]; then
    # https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.5.0%2Bcpu.zip
    VERSION="1.7.0-2"
    CHECKSUM="02fd4f30e97ce8911ef933d0516660892392e95e6768b50f591f4727f6224390"
elif [[ "${TARGET_ARCH}" == "aarch64" ]]; then
    VERSION="1.6.0-1"
    CHECKSUM="6d1fba522e746213c209fbf6275fa6bac68e360bcd11cbd4d3bdbddb657bee82"
else
    error "libtorch for ${TARGET_ARCH} not ready. Exiting..."
    exit 1
fi
 
PKG_NAME="libtorch_cpu-${VERSION}-linux-${TARGET_ARCH}.tar.gz"
DOWNLOAD_LINK="https://apollo-system.cdn.bcebos.com/archive/6.0/${PKG_NAME}"
download_if_not_cached "${PKG_NAME}" "${CHECKSUM}" "${DOWNLOAD_LINK}"
 
tar xzf "${PKG_NAME}"
mv "${PKG_NAME%.tar.gz}" /usr/local/libtorch_cpu
rm -f "${PKG_NAME}"
ok "Successfully installed libtorch_cpu ${VERSION}"
 
##============================================================##
# libtorch_gpu
if [[ "${TARGET_ARCH}" == "x86_64" ]]; then
    VERSION="1.7.0-2"
    CHECKSUM="b64977ca4a13ab41599bac8a846e8782c67ded8d562fdf437f0e606cd5a3b588"
    PKG_NAME="libtorch_gpu-${VERSION}-cu111-linux-x86_64.tar.gz"
else # AArch64
    VERSION="1.6.0-1"
    PKG_NAME="libtorch_gpu-1.6.0-1-linux-aarch64.tar.gz"
    CHECKSUM="eeb5a223d9dbe40fe96f16e6711c49a3777cea2c0a8da2445d63e117fdad0385"
fi
 
DOWNLOAD_LINK="https://apollo-system.cdn.bcebos.com/archive/6.0/${PKG_NAME}"
download_if_not_cached "${PKG_NAME}" "${CHECKSUM}" "${DOWNLOAD_LINK}"
 
tar xzf "${PKG_NAME}"
mv "${PKG_NAME%.tar.gz}" /usr/local/libtorch_gpu
 
# Cleanup
rm -f "${PKG_NAME}"
ok "Successfully installed libtorch_gpu ${VERSION}"

可以看到这一段

PKG_NAME="libtorch_cpu-${VERSION}-linux-${TARGET_ARCH}.tar.gz"

DOWNLOAD_LINK="https://apollo-system.cdn.bcebos.com/archive/6.0/${PKG_NAME}"

download_if_not_cached "${PKG_NAME}" "${CHECKSUM}" "${DOWNLOAD_LINK}"

tar xzf "${PKG_NAME}"
mv "${PKG_NAME%.tar.gz}" /usr/local/libtorch_cpu
rm -f "${PKG_NAME}"
ok "Successfully installed libtorch_cpu ${VERSION}"

实际上就是找到 Apollo 指定版本的 libtorch 然后交给 Apollo 编译,因此想要替换版本的话只需要自己把这几句下载解压之类的东西替换就行。

接下来看笔者自己写的新的 install_libtorch_new.sh:

set -e
 
CURR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
. ${CURR_DIR}/installer_base.sh
 
# TODO(build): Docs on how to build libtorch on Jetson boards
# References:
#   https://github.com/ApolloAuto/apollo/blob/pre6/docker/build/installers/install_libtorch.sh
#   https://github.com/dusty-nv/jetson-containers/blob/master/Dockerfile.pytorch
#   https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-6-0-now-available
#   https://github.com/pytorch/pytorch/blob/master/docker/caffe2/ubuntu-16.04-cpu-all-options/Dockerfile
bash ${CURR_DIR}/install_mkl.sh
 
TARGET_ARCH="$(uname -m)"
 
##============================================================##
# libtorch_cpu
 
if [[ "${TARGET_ARCH}" == "x86_64" ]]; then
    # https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.5.0%2Bcpu.zip
    VERSION="1.7.0-2"
    CHECKSUM="02fd4f30e97ce8911ef933d0516660892392e95e6768b50f591f4727f6224390"
elif [[ "${TARGET_ARCH}" == "aarch64" ]]; then
    VERSION="1.6.0-1"
    CHECKSUM="6d1fba522e746213c209fbf6275fa6bac68e360bcd11cbd4d3bdbddb657bee82"
else
    error "libtorch for ${TARGET_ARCH} not ready. Exiting..."
    exit 1
fi
 
# PKG_NAME="libtorch_cpu-${VERSION}-linux-${TARGET_ARCH}.tar.gz"
# DOWNLOAD_LINK="https://apollo-system.cdn.bcebos.com/archive/6.0/${PKG_NAME}"
# download_if_not_cached "${PKG_NAME}" "${CHECKSUM}" "${DOWNLOAD_LINK}"
PKG_NAME="/apollo/libtorch-cxx11-abi-shared-with-deps-1.10.2+cpu.zip"
unzip "${PKG_NAME}" -d /usr/local/
mv /usr/local/libtorch/ /usr/local/libtorch_cpu
ok "Successfully installed libtorch_cpu ${VERSION}"
 
##============================================================##
# libtorch_gpu
if [[ "${TARGET_ARCH}" == "x86_64" ]]; then
    VERSION="1.7.0-2"
    CHECKSUM="b64977ca4a13ab41599bac8a846e8782c67ded8d562fdf437f0e606cd5a3b588"
    PKG_NAME="libtorch_gpu-${VERSION}-cu111-linux-x86_64.tar.gz"
else # AArch64
    VERSION="1.6.0-1"
    PKG_NAME="libtorch_gpu-1.6.0-1-linux-aarch64.tar.gz"
    CHECKSUM="eeb5a223d9dbe40fe96f16e6711c49a3777cea2c0a8da2445d63e117fdad0385"
fi
 
# DOWNLOAD_LINK="https://apollo-system.cdn.bcebos.com/archive/6.0/${PKG_NAME}"
# download_if_not_cached "${PKG_NAME}" "${CHECKSUM}" "${DOWNLOAD_LINK}"
 
PKG_NAME="/apollo/libtorch-cxx11-abi-shared-with-deps-1.10.2+cu111.zip"
unzip "${PKG_NAME}" -d /usr/local/
mv /usr/local/libtorch/ /usr/local/libtorch_gpu
 
# Cleanup
rm -f "${PKG_NAME}"
ok "Successfully installed libtorch_gpu ${VERSION}"

可以看到首先把下载的命令注释掉了,然后自己写了一个 PKG_NAME,这个地方填的是我自己下载的 libtorch 的 zip 文件,然后解压到 / usr/local 目录下,它自己解压出来的是 libtorch 文件夹,后面我自己分别重命名为了 libtorch_cpu 和 libtorch_gpu 文件夹,然后直接

bash docker/build/installer/install_libtorch_new.sh

就会把原来的 / usr/local / 下面的 libtorch_cpu 和 libtorch_gpu 替换成我自己的版本,这里用的是 libtorch-cxx11-abi-shared-with-deps-1.10.2+cpu.zip 和 libtorch-cxx11-abi-shared-with-deps-1.10.2+cu111.zip。

PS:

再说一下 pytorch 的弱智指引,去他官网上下载的话实际上不能找到所有版本的 libtorch,只有这么个结果

![[output/attachments/75ba9cdfb1e9b112150e8d420d6fae83_MD5.png]]

你如果想要跟自己的 pytorch 版本匹配的话只能自己去下载,我用自己下载的举例。

CPU 版本:

https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.10.2+cpu.zip

这个命名方式很简单,直接把版本号替换就行。

GPU 版本:

https://download.pytorch.org/libtorch/cu111/libtorch-cxx11-abi-shared-with-deps-1.10.2+cu111.zip gpu 版本要先看自己的 cuda 版本,我的是 11.1,所以上面两处都是 cu111,然后在改 pytorch 版本号 1.10.2。这么操作就可以下载自己需要的 libtorch 版本了。

标签:NAME,自定义,为例,libtorch,VERSION,PKG,https,apollo,cpu
From: https://www.cnblogs.com/algorithmSpace/p/18200243

相关文章

  • 百度 Apollo 自定义模块发布——使用 Python 语言(bazel 编译 Python 模块)_bazel-bin b
    CSDN搬家失败,手动导出markdown后再导入博客园BinaryvsComponent首先说明下,Apollo的核心概念是组件,通过组件可以实现资源的自动管理和调度。CyberRT中只能使用C++语言实现Component,Python版的API只能用来写传统的二进制可执行文件,参考官方文档中这两种方式的区别:B......
  • 百度 Apollo 使用 bazel 编译 C++ Boost 依赖出现 undefined reference to `boost::pyth
    CSDN搬家失败,手动导出markdown后再导入博客园因为一些原因,楼主想在Apollo自动驾驶框架里使用Boost.python工具来用C++调用Python,从网上找了个例子想编译下试试。C++代码如下(boost.python/EmbeddingPython-PythonWiki):#include<boost/python.hpp>usingnamesp......
  • delphi cxgrid自定义画焦点框,把自带的虚线框去掉
    参考资料将FocusRect从虚线更改为实线或更改FocusRect的颜色|DevExpress支持如何在TableView网格中的整个选定/聚焦行周围绘制边框?|DevExpress支持 procedureTcxGridTableView.DoCustomDrawCell(ACanvas:TcxCanvas;AViewInfo:TcxGridTableDataCellViewInfo;v......
  • delphi cxgrid 自定义画焦点框
    procedureTMyTable.MyBandedTableViewCustomDrawCell(Sender:TcxCustomGridTableView;ACanvas:TcxCanvas;AViewInfo:TcxGridTableDataCellViewInfo;varADone:Boolean);varbounds:TRect;beginifAViewInfo.Focusedthenbeginbounds:=A......
  • 连接池设计与实现一——以Golang Http1.1为例
    0.前言连接池是一个非常重要的开发思想,如httpclient会构建连接池复用底层TCP连接,使用database/sql的使用也会有连接池的配置。那么代码底层是如何实现连接池的呢?这篇文档将以Golang语言为基础,分析http1.1连接池底层实现★注意:我们仅仅关注连接池设计思想、以及关键源码解读,......
  • 基于uniapp+vue3自定义增强版table表格组件「兼容H5+小程序+App端」
    vue3+uniapp多端自定义table组件|uniapp加强版综合表格组件uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5+小程序端+App端。如下图:H5+小程序+App端,多端......
  • Django自定义模板标签与过滤器
    title:Django自定义模板标签与过滤器date:2024/5/1718:00:02updated:2024/5/1718:00:02categories:后端开发tags:Django模版自定义标签过滤器开发模板语法Python后端前端集成Web组件Django模板系统基础1.Django模板语言概述Django模板语言(DTL)是一种用......
  • spring security 使用过滤器认证登录时,抛出自定义异常
    前情提要最近在做项目的改造,涉及到新增用户的离职冻结状态,当被离职/冻结后,尝试登录系统,则抛出不同的异常代码给前端,前端依据不同的异常代码提示不同的文本。所以需要对项目的认证逻辑简单调整,增加按照不同的登录用户的状态(离职/冻结)判断,如果满足指定状态,则抛出对应的异常代码。......
  • KubeKey v3.1 发布:快速自定义离线安装包
    日前,KubeKeyv3.1正式发布。该版本主要对离线场景部署、离线包制作以及向Kubernetesv1.24+升级进行了优化。KubeKey简介KubeKey是KubeSphere社区开源的一款高效集群部署工具,运行时默认使用Docker,也可对接Containerd、CRI-O、iSula等CRI运行时,且ETCD集群独立运行......
  • 自定义数据类型、标量值、内嵌表值、多语句表值函数的操作
    自定义数据类型、标量值、内嵌表值、多语句表值函数的操作自定义数据类型、标量值、内嵌表值、多语句表值函数的操作  合集-数据库知识(7) 1.SQLServer实战一:创建、分离、附加、删除、备份数据库04-242.SQLServer实战二:创建、修改、复制、删除数据库表并加以数据......