Running Google Machine Learning Library Tensorflow On ARM 64-bit Platform

在ARM64平台下安装TensorFlow 在ARM64平台下安装TensorFlow 1.安装前环境配置 2.安装TensorFlow 阅读详情

TensorFlow is an open source software library for machine learning which was developed by Google and open source to community. It supports various kinds of fundamental operations for Machine learning. Tensorflow can be deployed on single server or cloud and supports both CPU and GPU devices. It is used for both research and production. It can even be deployed on phones! That makes it unique to other machine learning library, like Theano, Caffe and Torch.

Tensorflow supports x86-64, GPU and ARM 32-bit (Android and Raspberry Pi) platform officially. This article will introduce to install Tensorflow on ARM 64-bit CPU platform. (Of course, Tensorflow also works on ARM 64-bit CPU + GPU platform.) Below work is based on many prior efforts which make Tensorflow running on Raspberry Pi and ODROID-C2. And it fixes some issues I met when I follow these guides.

#Build Bazel

Before build Tensorflow, Bazel binary for ARM64 should be built first. Bazel is used to build the majority of Google’s software. It is the build tool for Tensorflow.

According to the Bazel Installation Guide, we need to install JDK 8 first. For Ubuntu 15.10 or higher, OpenJDK 8 can be installed. For Ubuntu 14.04 or lower, OpenJDK 8 is not available, so please install Oracle JDK 8.

$ sudo apt-get install openjdk-8-jdk

Other tools and libs are also needed for building Bazel.

$ sudo apt-get install pkg-config zip g++ zlib1g-dev unzip

Download Bazel release package 0.4.4. Many online articles point to Bazel 0.4.3. But that version has a bug and will cause Tensorflow configure failed.

Using Bazel release package is much easier to get Bazel ready for use. Otherwise, protobuf and grpc-java are needed for compiling Bazel from source code.

$ wget https://github.com/bazelbuild/bazel/releases/download/0.4.4/bazel-0.4.4-dist.zip
$ mkdir bazel-0.4.4
$ unzip bazel-0.4.4-dist.zip -d bazel-0.4.4
$ cd bazel-0.4.4

Then modify bazel source file to compatible with aarch64.

diff --git a/scripts/bootstrap/buildenv.sh b/scripts/bootstrap/buildenv.sh
index 502f2c1..a2ab4dc 100755
--- a/scripts/bootstrap/buildenv.sh
+++ b/scripts/bootstrap/buildenv.sh
@@ -40,7 +40,7 @@ PLATFORM="$(uname -s | tr 'A-Z' 'a-z')"

 MACHINE_TYPE="$(uname -m)"
 MACHINE_IS_64BIT='no'
-if [ "${MACHINE_TYPE}" = 'amd64' -o "${MACHINE_TYPE}" = 'x86_64' -o "${MACHINE_TYPE}" = 's390x' ]; then
+if [ "${MACHINE_TYPE}" = 'amd64' -o "${MACHINE_TYPE}" = 'x86_64' -o "${MACHINE_TYPE}" = 's390x'  -o "${MACHINE_TYPE}" = 'aarch64' ]; then
   MACHINE_IS_64BIT='yes'
 fi

diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.jav
a
index 553c88c..90c8392 100755
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -406,6 +406,8 @@ public final class BuildConfiguration {
                 return "arm";
               case S390X:
                 return "s390x";
+             case AARCH64:
+               return "aarch64";
               default:
                 return "unknown";
             }
diff --git a/src/main/java/com/google/devtools/build/lib/util/CPU.java b/src/main/java/com/google/devtools/build/lib/util/CPU.java
index 7a85c29..e5f3eae 100755
--- a/src/main/java/com/google/devtools/build/lib/util/CPU.java
+++ b/src/main/java/com/google/devtools/build/lib/util/CPU.java
@@ -26,6 +26,7 @@ public enum CPU {
   X86_64("x86_64", ImmutableSet.of("amd64", "x86_64", "x64")),
   PPC("ppc", ImmutableSet.of("ppc", "ppc64", "ppc64le")),
   ARM("arm", ImmutableSet.of("arm", "armv7l")),
+  AARCH64("aarch64", ImmutableSet.of("aarch64")),
   S390X("s390x", ImmutableSet.of("s390x", "s390")),
   UNKNOWN("unknown", ImmutableSet.<String>of());
 
diff --git a/third_party/BUILD b/third_party/BUILD
index 9cd2fac..f1cd14c 100755
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -583,6 +583,11 @@ config_setting(
 )

 config_setting(
+    name = "aarch64",
+    values = {"host_cpu": "aarch64"},
+)
+
+config_setting(
     name = "freebsd",
     values = {"host_cpu": "freebsd"},
 )
diff --git a/tools/cpp/cc_configure.bzl b/tools/cpp/cc_configure.bzl
index 0ae4483..975908b 100755
--- a/tools/cpp/cc_configure.bzl
+++ b/tools/cpp/cc_configure.bzl
@@ -142,8 +142,10 @@ def _get_cpu_value(repository_ctx):
   result = repository_ctx.execute(["uname", "-m"])
   if result.stdout.strip() in ["power", "ppc64le", "ppc"]:
     return "ppc"
-  if result.stdout.strip() in ["arm", "armv7l", "aarch64"]:
+  if result.stdout.strip() in ["arm", "armv7l"]:
     return "arm"
+  if result.stdout.strip() in ["aarch64"]:
+    return "aarch64"
   return "k8" if result.stdout.strip() in ["amd64", "x86_64", "x64"] else "piii"

Then compile Bazel

$ ./compile.sh
#Copy bazel to $PATH
$ sudo cp output/bazel /usr/local/bin/

Bazel binary is ready for use now.

#Build Tensorflow

$ git clone git@github.com:tensorflow/tensorflow.git
$ ./configure
Please specify the location of python. [Default is /usr/bin/python]:
Please specify optimization flags to use during compilation [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? (Linux only) [Y/n]
jemalloc enabled on Linux
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N]
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N]
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N]
No XLA support will be enabled for TensorFlow
Found possible Python library paths:
  /usr/local/lib/python2.7/dist-packages
  /usr/lib/python2.7/dist-packages
Please input the desired Python library path to use.  Default is [/usr/local/lib/python2.7/dist-packages]

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with OpenCL support? [y/N]
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N]
No CUDA support will be enabled for TensorFlow
Configuration finished
Extracting Bazel installation...
.....................
INFO: Starting clean (this may take a while). Consider using --expunge_async if the clean takes more than several minutes.
.....................
INFO: Downloading http://pkgs.fedoraproject.org/repo/pkgs/gmock/gmock-1.7.0.zip/073b984d8798ea1594f5e44d85b20d66/gmock-1.7.0.zip: 297,424 bytes

Use a few toolchain optimization flags for build.

$ bazel build -c opt --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --verbose_failures tensorflow/tools/pip_package:build_pip_package

#Build pip package
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

#Install tensorflow pip package
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-1.0.0rc2-cp27-cp27mu-linux_aarch64.whl

Done!

#Try convolutional model

Then train machine learning hello world model by using Tensorflow.

$ git clone git@github.com:tensorflow/models.git
$ cd models/tutorials/image/mnist
$ python convolutional.py
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Epoch 0.00
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
Minibatch loss: 3.285, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.0%
...
...

Have fun!

Reference

  1. Building TensorFlow for Raspberry Pi: a Step-By-Step Guide
  2. Installing TensorFlow on ODROID-C2

https://zhiyisun.github.io/2017/02/15/Running-Google-Machine-Learning-Library-Tensorflow-On-ARM-64-bit-Platform.html
ARMv8-AArch64简述 ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集; 阅读详情

相关推荐

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 396

AArch64硬件平台整理

ARM发布ARM v8架构,主要针对高性能企业级市场,由于ARM系列芯片的高度可定制和低功耗特性,众多小伙伴看到了服务器市场的希望,纷纷跟上,积极推进ARM进军传统服务器领域,虽然目前跟Intel相比还是太弱,但我相信肯定会打出一片天地,ARM授权SoC IP核心,企业可以根据具体应用需求来定制芯片,另外可以加入特定的硬件逻辑,例如SSL安全验证等,这些都是Intel所不能比得,就是生态系统目前还未

jefby的专栏 5759

8.(开发工具篇elasticsearch)ElasticSearch启动异常:Failure running machine learning native code

听老人家说:多看美女会长寿 1、异常描述 elasticsearch-7.5.1启动发生如下异常问题 Caused by: org.elasticsearch.ElasticsearchException: Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem wi

地图之家 1万+

Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明

支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。4. 运行环境要求glibc 2.21及以上, 需要安装 libstdc++.so.6.0.21, GLIBCXX_3.4.21, CXXABI_1.3.9。

大牛直播SDK 1129

bazel-6.2_3.1-linux-arm64

Bazel 是一个多语言、开源的构建工具,旨在支持大型软件项目的自动化构建和测试。Bazel 的设计理念着重于提高构建的速度和可靠性,同时支持多平台构建。它支持多种编程语言,包括但不限于 Java、C++、Python 和 Go。Bazel 使用一种名为 BUILD 的高级构建语言来描述项目的构建过程,使得构建配置既灵活又易于理解。 Bazel 的核心特性之一是其强大的依赖分析和管理能力。通过精确地跟踪项目中每个组件的依赖关系,Bazel 能够确保构建的增量性和确定性。这意味着当源代码发生变化时,Bazel 只会重新构建受到影响的部分,从而显著提高构建效率。此外,Bazel 支持远程缓存,允许跨多个构建共享部分构建结果,进一步加速构建过程。 Bazel 还特别注重于构建的可重复性。通过将构建环境封装化,Bazel 确保了构建过程不会受到外部环境的影响,从而使得构建结果在不同环境中是一致的。这一点对于确保软件质量和便于问题追踪尤为重要。

VOWIFI--相关的协议文档

一、3GPP相关协议文档 3GPP 23.402 Architecture enhancements for non-3GPP accesse- //重要 整体框架结构和流程,3GPP和NON-3GPP切换 3GPP 36.304  User Equipment (UE) procedures in idle mode //重要,终端在空闲状态下3GPP与NON-3GPP之间的重选方法   3GP

时九博客 3577

ARM64(aarch64)下安装tensorflow

ARM64/aarch64下安装tensorflow

SimonLiu的博客 9100

Intel SGX Explained

计算机中最主要的资源是CPU和内存,由操作系统和虚拟管理系统等系统软件来管理这些资源。

hanqdi_的博客 3452

ELASTICSEARCH-7.3.2报错:Failure running machine learning native code. This could be due to running

This could be due to running on an unsupported OS or distribution

love398146779的专栏 3627

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

tomcat启动时,启动过程日志中文乱码的处理方法。

寻码启示 1941

新手必看:5分钟搞懂FFT波束形成的底层原理(从阵列信号到频域处理)

本文深入浅出地解析了FFT波束形成的底层原理,从阵列信号采集到频域处理的全过程。通过音乐节场景类比和Python代码示例,帮助新手快速理解多目标波束形成的核心技术,包括频域转换、相位补偿和性能优化策略,适用于雷达、声呐和5G通信等领域。

pytorchlight8的博客 947

linux arm系统安装tensorflow

首先要找跟python版本对应的tensoflow版本,在网上找了很久,没有找到跟2.7相关的aarch64的tf版本whl文件,可以通过编译源码,也可以通过whl进行安装。本篇介绍在python3.7下选用whl文件安装方法。OS为Linux version 4.19.71-arm64-desktop,安装tensorflow,安装通过编译好的whl二进制包进行安装。有些说后面配置环境变量,结果发现并没有生效,因此通过建立软链接的方式,识别。(2)下载配套的tensorflow的版本。

zcc_0015的专栏 1741

告别环境配置焦虑:在Win10的Ubuntu子系统里搞定CSAPP实验环境(附32/64位库编译指南)

本文详细介绍了如何在Win10的Ubuntu子系统中搭建CSAPP实验环境,包括WSL 2的安装与配置、32/64位库的编译指南以及高效开发工具链的设置。通过优化WSL性能和使用实用技巧,开发者可以轻松应对CSAPP实验中的环境配置问题,提升学习效率。

weixin_30443813的博客 296

ElasticSearch启动常见报错及解决措施

操作系统:MacOs ElasticSearch版本:7.16.3 首次安装ElasticSearch后,启动常常会遇到一些启动错误,很是头疼,以下收集了一些启动报错及解决办法。 1、报错1—— [xpack.ml.enabled: false 错误提示如下: Caused by: org.elasticsearch.ElasticsearchException: Failure running machine learning native code. This could be due

m0_66123161的博客 1万+

改进爬山算法之六:随机重启爬山算法(Random-Restart Hill Climbing,RRHC)

随机重启爬山算法(Random-Restart Hill Climbing,RRHC)是爬山算法的一种改进策略,是一种启发式搜索算法,旨在通过随机重启来克服传统爬山算法容易陷入局部最优解的局限性,并增加找到全局最优解的概率。随机重启爬山算法通过在多次运行中不断尝试不同的初始解,并在每次运行中执行标准的爬山算法,最终选择所有运行中找到的最佳解作为最终结果。(1)计算复杂度:由于需要多次运行爬山算法,因此算法的计算复杂度可能较高,特别是在解空间较大或每次迭代需要较长时间的情况下。

搏博的专栏 2204

在WPS/Office中免费使用AI,快速提升办公效率!​

《免费解锁WPS/Office AI办公神器教程》摘要: 本教程详解如何通过第三方插件OfficeAI免费实现WPS/Office智能办公,突破官方付费限制。从安全设置到安装配置,手把手教学,涵盖文档生成、PPT美化、Excel图表等核心功能。关键优势包括零成本、全场景支持及云端/本地双模式切换,并附常见问题解决方案。注意需使用WPS 2024+版本,安装时需临时关闭杀毒软件。教程强调工具来源合法性,建议商用购买正版授权。(149字)

杜哥无敌的博客 2302

ARM64(鲲鹏)上安装bazel工具

在ARM上安装bazel比较麻烦,楼主踩坑过好多次,最终总结出如下几种方法: 直接下载ARM64版本的安装包 下载地址 值得注意的是,只有3.4之后的版本才有ARM64的安装包 针对centos\ubuntu,添加镜像源,直接用yum\apt-get 工具安装 源码编译安装 ...

ocean_1996的博客 2121

SAP和Oracle EBS作为全球顶级的ERP系统,在中国市场深耕数十年,尤其是在大型国企、央企和跨国企业中,已经形成了强大的用户习惯和“舒适区”依赖

国产ERP替代国际系统的关键挑战在于打破用户对SAP/Oracle的操作习惯和心理依赖。需采取多维策略:战略上明确价值主张、分阶段实施;产品上优化用户体验、确保数据迁移;实施上加强情景化培训、流程再造。成功替代70%取决于变革管理,需将"被动替换"转为"主动升级",让用户在新系统中建立更优的舒适区。

金牌架构师 383

arm64/x64/x86/macos安装tensorflow c语言版本

请认真阅读以下内容: 本人应该把能踩过的坑全部都踩了(2days) 我把所有坑和解决方案都记录下来(纯文字) 建议先看完某一个大步骤以及了解踩坑原因再执行对应的命令能够有效避免踩坑 本文包括: (1)官方编译好的动态库(x86,x64)以及我编译好的动态库(arm64) (2)安装树莓派64位系统 (3)安装bazel(编译tensorflow工具):脚本和编译两个方式 (4)安装tensorflow:编译和直接下载使用两个方式 直接下载(推荐方式): x86和x64可以直接下载官方编译好的动态链接库,

qq_44113911的博客 2593

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Ubuntu AARCH64使用bazel编译tensorflow C++

bazel编译环境主要依赖java和protobuf,在X86下面我使用的是protobuf和bazel的.sh配合编译,由于bazel没有.sh文件只能依赖源码.zip进行编译,所以我这里使用的是基于java进行编译。 1.下载安装jdk 下载地址:Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/ 这里需要注册ORACLE,我使用的版本是jdk1.8.0_112,所以下载的是JavaSE.

MclarenSenna的博客 1118

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Tomcat:Can‘t load IA 32-bit .dll on a AMD 64-bit platform问题的解决

Tomcat:Can't load IA 32-bit .dll on a AMD 64-bit platform问题的解决 1.问题现象: 运行Springboot项目出现以下情况:项目源代码没问题。 2.解决方案: 1.下载一个32位的替换 https://downloads.apache.org/tomcat/tomcat-connectors/native/ 2.将下载下来的文件解压,找到x64文件夹下的tcnative-1.dll文件 3.与tomcat安装目录..

dxy 1215

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

m1 芯片mac 安装elasticserach 报错的解决办法【 Failure running machine learning native code】

Failure running machine learning native code

qq_37306041的博客 1079

【亲测免费】 TensorFlow aarch64 项目常见问题解决方案

TensorFlow aarch64 项目常见问题解决方案 项目基础介绍 TensorFlow aarch64 项目是一个为 aarch64(ARMv8 / ARM64)架构提供 TensorFlow 轮子(whl)文件的开源项目。该项目的主要目的是为 ARM 架构的设备(如 Raspberry Pi 4)提供 TensorFlow 的安装支持。TensorFlow 是一个广泛使用的深度学习框架,...

gitblog_00098的博客 986

Macbook M1避坑指南:安装Apple-TensorFlow(arm64)

文章目录1. 你可能遇到的问题2. 解决方案Step 1:安装Xcode Command Line Tools,Apple Developer下载安装即可。Step 2:安装arm版本miniforge。Step 3: 从[Mac-optimized TensorFlow2.4 and TensorFlow Addons](https://github.com/apple/tensorflow_macos)下载ARM64版本的TensorFlow2.4,具体的安装要求是macOS 11.0+, Pytho

u012744245的博客 8326

Elasticsearch:windows server 启动失败

es启动报错 windows server 2012 R12 elasticsearch7.7 org.elasticsearch.ElasticsearchException: Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp di

fh_luchenxi的博客 3351

Ubuntu18 Arm64 编译安装Bazel

在这里插入代码片@TOC x86_64移植到aarch64的困惑 找了好久没有找到合适的aarch64编译安装bazel的方法,之前我是一步步跟着官方走的,在x86_64平台上只要添加源就能很简单安装你要的bazel版本,但是在aarch64的平台上就要自己搭建编译环境了(找了好久没有找到预编译库) 搭建编译环境 bazel编译环境主要依赖java和protobuffer,我安装的java环境是1...

jiexijihe945的博客 3651
上一篇: How to Run Ubuntu 16.04 Aarch64 (64-bit ARM) Cloud Images on Your Intel/AMD Linux Computer with QEMU
下一篇: Get Cache Info in Linux on ARMv8 64-bit Platform
Omni-Space
博客等级 码龄11年 2158粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值