为什么从源码编译Tensorflow?

  • 安装过的人们都知道如果

    pip install tensorflow

的话会报错Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

  • 考虑到操作系统的的兼容性,现有的编译好的二进制安装包不适用openeuler,所以考虑这些因素,我们要自己搭建。

  • 我们需要bazel交叉编译软件,有点类似cmake(上游下载的开源.sh文件已上传到仓库)bazel下载地址

  • chmod +x bazel-0.28.0-installer-linux-x86_64.sh

  • ./bazel-0.28.0-installer-linux-x86_64.sh --user

  • bazel version查看版本,configure.py查看tf所支持的版本(2.3版本所支持的bazel)

_TF_MIN_BAZEL_VERSION = '0.27.1'

_TF_MAX_BAZEL_VERSION = '0.29.1'

下载TF

  • git clone https://github.com/tensorflow/tensorflow
  • git barach -a 查看所有发行版本
  • git checkout <version> 将分支同步到本地

开始编译

  • bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so(C文件库)

  • bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package(wheel文件)

  • bazel build --config=opt --config=cuda //tensorflow:libtensorflow.so(生成C库)

  • bazel build --config=opt //tensorflow/lite:libtensorflowlite.so (Lite库)

bazel编译有的时候会出issue现bug,详见issue

openeuler搭建Bulid Not Successfully 的Bug情况汇总

源码编译链接

官网上说安装需要pip19以上

关于openeulerpip源默认指向python2该如何修改:

#!/usr/bin/python2=====>!/usr/bin/python3

# -*- coding: utf-8 -*-
import re
import sys from pip._internal.cli.main import main if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

2、修改默认指向由于版本不同所发生的bug

 from pip import main
ImportError: cannot import name 'main' from 'pip' (/usr/lib/python3.7/site-packages/pip/__init__.py)

source code change to this

from pip import __main__  //这行也要修改
if __name__ == '__main__':
sys.exit(__main__._main())//增加__main__._

PRODUCT

[root@openeuler lzb]# pip -V
pip 20.1.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

安装 TensorFlow pip 软件包依赖项(如果使用虚拟环境,请省略 --user 参数):

pip install -U --user pip six numpy wheel setuptools mock 'future>=0.17.1'
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps

setup.py we can know the vesion and dependence on REQUIRED_PACKAGES

> REQUIRED_PACKAGES = [
> 'absl-py >= 0.7.0',
> 'astunparse == 1.6.3',
> 'flatbuffers >= 1.12',
> 'gast == 0.3.3',
> 'google_pasta >= 0.1.8',
> 'h5py >= 2.10.0, < 2.11.0',
> 'keras_preprocessing >= 1.1.1, < 1.2',
> # TODO(mihaimaruseac): numpy 1.19.0 has ABI breakage
> # https://github.com/numpy/numpy/pull/15355
> 'numpy >= 1.16.0, < 1.19.0',
> 'opt_einsum >= 2.3.2',
> 'protobuf >= 3.9.2',
> 'tensorboard >= 2.3.0, < 3',
> 'tensorflow_estimator >= 2.3.0, < 2.4.0',
> 'termcolor >= 1.1.0',
> 'wrapt >= 1.11.1',
> 'w**h*eel >= 0.26',
> 'six >= 1.12.0',
> ]

基于openeuler aarch_64 下,从源码的角度搭建Tensorflow的更多相关文章

  1. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  2. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  3. Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析

    Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML ...

  4. 基于vitamio的网络电视直播源码

    这个项目是基于vitamio的网络电视直播源码,也是一个使用了vitamio的基于安卓的网络直播项目源码,可能现在网上已经有很多类似这样的视频播放应用了,不过这个还是相对来说比较完整的,希望这个案例能 ...

  5. [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...

  6. 从源码的角度看 React JS 中批量更新 State 的策略(下)

    这篇文章我们继续从源码的角度学习 React JS 中的批量更新 State 的策略,供我们继续深入学习研究 React 之用. 前置文章列表 深入理解 React JS 中的 setState 从源 ...

  7. Linux 系统下用源码包安装软件

    Linux系统下用源码包安装软件 by:授客 QQ:1033553122 下载源码安装包,解压或者直接双击打开(如果有安装zip或rar等压缩/解压缩软件的话),查找相关的安装说明文件,一般是READ ...

  8. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center> <h1>j ...

  9. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...

随机推荐

  1. Java学习的第四天

    1.变量不可以重复命名并且 方法内定义的变量,必须初始化才能使用,方法内定义的变量在Java中又叫做局部变量. 单行注释:// 多行注释/*       */ doc注释   /** *doc注释 * ...

  2. Linux杂谈:进程锁核+实时线程导致的读写锁死循环

    发现问题 公司项目测试的时候,发现运行一段时间后会出现cpu百分之百的情况. 想着可能是哪里出现了死循环,于是打算用gdb跟一下,结果gdb居然无法attach到进程...... 定位问题 查了查去, ...

  3. 《Clojure编程》笔记 第1章 进入Clojure仙境

    目录 背景简述 第1章 进入Clojure仙境 1.1 基础概念 1.2 常用的一些符号 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Cloj ...

  4. Hash 算法与 Manacher 算法

    目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...

  5. 题解 P1541 【乌龟棋】

    题目描述 乌龟棋的棋盘是一行\(N\)个格子,每个格子上一个分数(非负整数).棋盘第\(1\)格是唯一的起点,第\(N\)格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌龟棋中\(M\) ...

  6. 用Matlab对导出的数据进行可视化

    我这里是MapReduce导出的数据,MapReduce导出的数据中,Key和Value之间用制表符分隔的,可以直接作为表格型数据进行操作,复制一下导出的数据 1. 首先在Matlab工作区创建一个元 ...

  7. 微信小程序获取二维码API

    <%@ WebHandler Language="C#" Class="ce" %> using System; using System.Web; ...

  8. c#集合随机数

    List<int> list = new List<int>(10); Random r=new Random(); int num = 0; for (int i = 0; ...

  9. python菜鸟教程学习1:背景性学习

    https://www.runoob.com/python3/python3-intro.html 优点 简单 -- Python 是一种代表简单主义思想的语言.阅读一个良好的 Python 程序就感 ...

  10. ssh连接客户端一段时间没响应就断掉的解决办法-保持长连接

    修改(添加)server端的 /etc/ssh/sshd_config #server每隔60秒发送一次请求给client,然后client响应,从而保持连接 ClientAliveInterval ...