树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

最终可行方案

试了一堆方案(源码编译、Fast.ai的安装文件等)之后,终于找到一个可行的方案。是在 PyTorch 官方讨论社区的一个帖子中找到的,在回复中一个大佬给出了自己在2021年1月为树莓派制作的一个 PyTorch 1.8 版本的安装方案。如果是想在树莓派上安装 PyTorch 的话,只需下载其中的一个 whl 文件,然后 pip install torch-1.8.0a0-cp37-cp37m-linux_aarch64.whl 即可。笔者目前测试的各功能正常,包括

  • Python 接口 import torch 测试正常
  • C++ 接口 Libtorch 构建自己的文件,并运行模型测试正常,关于 C++ Libtorch 的具体构建过程,可参考 PyTorch导出JIT模型并用C++ API libtorch调用。

踩坑过程碎碎念

笔者这一天试了许多种方案,踩了许多坑,最后才发现大佬提供的 whl 文件是最快、问题最少的方案。当然这是在笔者自己的设备的情况,以下提供几种尝试过,但是或多过少遇到了一些问题,有的最终行不通,有的则是功能不全的方案,记录一下,可能之后会用得到,也为看到本文的读者提供一点思路。有清楚下面这些问题的产生原因及解决方法的大佬也欢迎留言,感激不尽。

源码编译安装

以下源码树莓派编译安装 PyTorch 的步骤是翻译自 StackOverflow 的一个问答。

预先准备

扩展交换

首先,如果设备是树莓派3或者更低版本(也就是说,树莓派4及以上,内存3GB及以上可跳过此步),我们需要先扩展交换(sawp),因为编译安装的过程非常吃内存。

修改文件 /etc/dphys-swapfile

CONF_SWAPFILE=2048M

然后执行下面的命令来更新修改:

sudo dphys-swapfile setup
安装基本包

安装以下包:

sudo apt install build-essential make cmake git python3-pip libatlas-base-dev

Libtorch 的编译需要 CMake 版本 3.15 及以上,可以通过 cmake --version 来查看。如果低于 3.15 版本可以通过以下命令来安装新版本:

wget https://github.com/Kitware/CMake/releases/download/v3.18.0-rc1/cmake-3.18.0-rc1.tar.gz
tar -xzf cmake-3.18.0-rc1.tar.gz
cd cmake<version>
mkdir build
cd build
cmake ..
make
sudo make installsudo apt remove cmake
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake
sudo ldconfig

源码构建 PyTorch 并得到 ARM 后端的 Libtorch

再次提醒一下,如果内存小于3GB,则需要将交换增加到 2048MB。

安装所需的包:

sudo apt-get update
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

下载 PyTorch 源码:

git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch

初始化所有子模块:

git submodule update --init --recursive
git submodule update --remote third_party/protobuf # 不然这里会有个bug

设置环境变量,将以下内容添加到 ~/.bashrc 文件:

export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1 
export NO_NNPACK=1
export NO_QNNPACK=1

更新刚才的修改:

source ~/.bashrc

安装所需的 Python 依赖:

pip3 install setuptools pyyaml numpy

开始构建安装 PyTorch ,别忘了 -E 参数来确定环境变量都被用到,(可以歇会儿了,时间巨长):

sudo -E python setup.py install

检查安装是否成功:

python
import torch
torch.__version__

源码编译安装首先是被被github的网络状况恶心了大半天),因为要下一堆子模块,经常下着下着网络突然不行了,在下载完之后 sudo -E python setup.py install ,还是会遇到报错。

Fast.ai 安装文件

pip install torch -f https://torch.kmtea.eu/whl/stable.html

整个安装过程是顺利的,然后 import torch 测试也是没有问题的,成功后用 Libtorch CMake 构建自己的源文件也成功,但是运行时却报错 Illegal instruction (core dumped)

CMake Warning at /home/pisong/miniconda3/lib/python3.7/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:22 (message):static library kineto_LIBRARY-NOTFOUND not found.
Call Stack (most recent call first):/home/pisong/miniconda3/lib/python3.7/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:127 (append_torchlib_if_found)CMakeLists.txt:4 (find_package)

看 CMake 的警告信息(虽然有这个警告,但是整个编译过程顺利完成了)应该是少库,笔者又源码编译了 kineto_LIBRARY 库之后还是不行,还是报 Illegal instruction (core dumped)

注意,此方法安装是正常的,在 Python 接口使用时也没遇到什么问题,但是用 Libtorch 构建出的自己的文件却不能正常运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqli-lab———writeup(11~17)

less11 用户名提交单引号显示sql语法错误&#xff0c;故存在sql注入 根据单引号报错&#xff0c;在用户名和密码任意行输入 万能密码&#xff1a;‘ or 11# 输入后username语句为&#xff1a;SELECT username, password FROM users WHERE username or 11; 双引号 password语…

深入理解Python中的全局解释锁GIL

深入理解Python中的全局解释锁GIL 转自&#xff1a;https://zhuanlan.zhihu.com/p/75780308 注&#xff1a;本文为蜗牛学院资深讲师卿淳俊老师原创&#xff0c;首发自公众号https://mp.weixin.qq.com/s/TBiqbSCsjIbNIk8ATky-tg&#xff0c;如需转载请私聊我处获得授权并注明出处…

sqli-lab————Writeup(18~20)各种头部注入

less18 基于错误的用户代理&#xff0c;头部POST注入 admin admin 登入成功&#xff08;进不去重置数据库&#xff09; 显示如下 有user agent参数&#xff0c;可能存在注入点 显示版本号&#xff1a; 爆库&#xff1a;User-Agent:and extractvalue(1,concat(0x7e,(select …

Python GIL

转自&#xff1a;https://blog.csdn.net/weixin_41594007/article/details/79485847 Python GIL 在进行GIL讲解之前&#xff0c;我们可以先回顾一下并行和并发的区别&#xff1a; 并行&#xff1a;多个CPU同时执行多个任务&#xff0c;就好像有两个程序&#xff0c;这两个程序…

sqli-lab——Writeup21~38(各种过滤绕过WAF和)

Less-21 Cookie Injection- Error Based- complex - string ( 基于错误的复杂的字符型Cookie注入) base64编码&#xff0c;单引号&#xff0c;报错型&#xff0c;cookie型注入。 本关和less-20相似&#xff0c;只是cookie的uname值经过base64编码了。 登录后页面&#xff1a;…

Libtorch报错:terminate called after throwing an instance of ‘c10::Error‘ what():isTensor()INTERNAL ASS

Libtorch报错&#xff1a;terminate called after throwing an instance of ‘c10::Error’ what(): isTensor() INTERNAL ASSERT FAILED 报错 问题出现在笔者想要将 yolov5 通过 PyTorch 的 C 接口 Libtorch 部署到树莓派上。 完整报错信息&#xff1a; terminate called …

sqli-lab——Writeup(38~over)堆叠等......

知识点&#xff1a; 1.堆叠注入原理&#xff08;stacked injection&#xff09; 在SQL中&#xff0c;分号&#xff08;;&#xff09;是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句&#xff0c;会不会一起执行&#xff1f;因此这个想法…

mysql常规使用(建立,增删改查,视图索引)

目录 1.数据库建立 2.增删改查 3.视图建立&#xff1a; 1.数据库建立 mysql> mysql> show databases; ----------------------------------- | Database | ----------------------------------- | information_schema | | ch…

php操作mysql数据库

phpmyadmin phpadmin是一个mysql图形化管理工具&#xff0c;是一款实用php开发的mysql苦户端软件&#xff0c;基于web跨平台的管理系统&#xff0c;支持简体中文&#xff0c;官网&#xff1a;www.phpmyadmin.net可以下载免费最新版。提供图形化操作界面&#xff0c;完成对mysq…

C:C++ 函数返回多个参数

C/C 函数返回多个参数 转自&#xff1a;https://blog.csdn.net/onlyou2030/article/details/48174461 笔者是 Python 入门的&#xff0c;一直很困惑 C/C 中函数如何返回多个参数。 如果一个函数需要返回多个参数&#xff0c;可以采用以下两种方法&#xff1a; 传引用或指针…

sql预编译

一.数据库预编译起源: 数据库接受sql语句,需要解析和制定执行,中间需要花费一段时间. 有时候同一语句可能会多次执行, 那么就会造成资源的浪费 如何减少编译执行的时间 ? 就有了预编译,预编译是将这类语句提前用占位符替代,一次编译,多次执行. 预编译后的执行代码会被缓存下来…

C++中智能指针的原理、使用、实现

C中智能指针的原理、使用、实现 转自&#xff1a;https://www.cnblogs.com/wxquare/p/4759020.html 1 智能指针的作用 C程序设计中使用堆内存是非常频繁的操作&#xff0c;堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率&#xff0c;但是…

Xctf练习sql注入--supersqli

三种方法 方法一 1 回显正常 1’回显不正常,报sql语法错误 1’ -- 回显正常,说明有sql注入点,应该是字符型注入(# 不能用) 1’ order by 3 -- 回显失败,说明有2个注入点 1’ union select 1,2 -- 回显显示过滤语句: 1’; show databases -- 爆数据库名 -1’; show tables …

深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例

深拷贝与浅拷贝、值语义与引用语义/对象语义 ——以C和Python为例 值语义与引用语义&#xff08;对象语义&#xff09; 本小节参考自&#xff1a;https://www.cnblogs.com/Solstice/archive/2011/08/16/2141515.html 概念 在任何编程语言中&#xff0c;区分深浅拷贝的关键都…

一次打卡软件的实战渗透测试

直接打卡抓包, 发现有疑似企业网站,查ip直接显示以下页面 直接显示了后台安装界面…就很有意思 探针和phpinfo存在 尝试连接mysql失败 fofa扫描为阿里云服务器 找到公司官网使用nmap扫描,存在端口使用onethink 查询onethink OneThink是一个开源的内容管理框架&#xff0c;…

C++中类的拷贝控制

C中类的拷贝控制 转自&#xff1a;https://www.cnblogs.com/ronny/p/3734110.html 1&#xff0c;什么是类的拷贝控制 当我们定义一个类的时候&#xff0c;为了让我们定义的类类型像内置类型&#xff08;char,int,double等&#xff09;一样好用&#xff0c;我们通常需要考下面…

centos7ubuntu搭建Vulhub靶场(推荐Ubuntu)

这里写目录标题一.前言总结二.成功操作&#xff1a;三.出现报错&#xff1a;四.vulhub使用正文&#xff1a;一.前言总结二.成功操作&#xff1a;三.出现报错&#xff1a;四.vulhub使用看完点赞关注不迷路!!!! 后续继续更新优质安全内容!!!!!一.前言总结 二.成功操作&#xff1…

使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络

使用 PyTorch 数据读取&#xff0c;JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档。 JAX简介 JAX 的前身是 Autograd &#xff0c;也就是说 JAX 是 Autograd 升级版本&#xff0c;JAX 可以对 Python 和 NumPy 程序进行自动微分。可以通过 Python的大量特征…

Yapi Mock 远程代码执行漏洞

跟风一波复现Yapi 漏洞描述&#xff1a; YApi接口管理平台远程代码执行0day漏洞&#xff0c;攻击者可通过平台注册用户添加接口&#xff0c;设置mock脚本从而执行任意代码。鉴于该漏洞目前处于0day漏洞利用状态&#xff0c;强烈建议客户尽快采取缓解措施以避免受此漏洞影响 …

C++ ACM模式输入输出

C ACM模式输入输出 以下我们都以求和作为题目要求&#xff0c;来看一下各种输入输出应该怎么写。 1 只有一个或几个输入 输入样例&#xff1a; 3 5 7输入输出模板&#xff1a; int main() {int a, b, c;// 接收有限个输入cin >> a >> b >> c;// 输出结果…