为什么从源码编译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. Kubernetes Pod驱逐策略

    Kubelet 能够主动监测和防止计算资源的全面短缺. 在资源短缺的情况下,kubelet 可以主动地结束一个或多个 Pod 以回收短缺的资源. 当 kubelet 结束一个 Pod 时,它将终止 P ...

  2. NB-IoT窄带物联网技术的四大优势

      NB-IoT是指窄带物联网(Narrow Band -Internet of Things)技术,是IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网(LPWA) ...

  3. 浅谈 Tarjan 算法

    目录 简述 作用 Tarjan 算法 原理 出场人物 图示 代码实现 例题 例题一 例题二 例题三 例题四 例题五 总结 简述 对于初学 Tarjan 的你来说,肯定和我一开始学 Tarjan 一样无 ...

  4. js某时间与当前时间差

    function minuteFormat(min){ if(!min){ return '-'; } var result=''; if(min%(60*24*30*12)!=min){ resul ...

  5. 3.4 MyArrayList 类的实现

    3.4 MyArrayList 类的实现 这节提供一个便于使用的 MyArrayList 泛型类的实现,这里不检测可能使得迭代器无效的结构上的修改,也不检测非法的迭代器 remove 方法. MyAr ...

  6. 基于 .NET 的 FluentValidation 数据验证

    学习地址:官方文档,更多更详细的内容可以看官方文档. FluentValidation 是一个基于 .NET 开发的验证框架,开源免费,而且优雅,支持链式操作,易于理解,功能完善,还是可与 MVC5. ...

  7. 安装node.js和vue

    1.在官网上下载Node.js安装包  https://nodejs.org/zh-cn/ 2.点击安装,一直下一步下一步就行,这里就不在赘述了. 3.安装完之后,如果没有选安装路径的话,一般都是在[ ...

  8. 《Machine Learning in Action》—— 剖析支持向量机,优化SMO

    <Machine Learning in Action>-- 剖析支持向量机,优化SMO 薄雾浓云愁永昼,瑞脑销金兽. 愁的很,上次不是更新了一篇关于支持向量机的文章嘛,<Machi ...

  9. 性能工具-mem

    1.目前valgrind . memleak .free .top  .ps 中vsz Rss . buddy. slab 这些用的比较多,一般用于处理内存紧张问题

  10. git , repo out off memory

    解决方法,建立swap # dd if=/dev/zero of=/root/myswapfile bs=1M count=1024 1024+0 records in 1024+0 records ...