为什么从源码编译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. 4G DTU模块的工作原理

    DTU是无线数据传输模块,4G DTU又被称4G模块,是4G网络进行远距离传输的设备,即串口服务器的无线版,其功能与串口服务器类似.         4G DTU是一种物联网无线数据终端,利用公用运营 ...

  2. FROM DELETE LIBRARY TO RUN の Django路由和视图

    一.requests安装 · requests是什么? request是python实现的简单易使用的http库 · 如何安装? pip install requests ·检测是否成功 import ...

  3. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  4. 计算机网络-DHCP协议抓包分析总结

    前置问题:什么是(网络)协议? 网络协议为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 而且: 一个网络协议至少包括三要素: 语法:用来规定信息格式;数据及控制信息的格式.编码及信号电平等 ...

  5. python-sys模块、导入自定义包

    import问题:https://zhuanlan.zhihu.com/p/69099185 一.sys模块 sys模块是python自带模块,包含了与Python解释器和它的环境有关的函数.利用 i ...

  6. Git撤销文件修改

    在旧版本中,git的撤销工作区的文件修改是用git checkout -- <file>命令,由于容易漏了--导致和切换分支混肴,所以新版本中: - 使用git restore (--wo ...

  7. ajax 加载数据前的刷新动画

    $(document).ready(function(){     $.ajax({        type:"get",        cache:false,        u ...

  8. 文科妹子都会用 GitHub,你这个工科生还等什么

    在某乎上刷到一条关于 GitHub 的留言,如下: 点赞人数还不少,这说明还真有不少工科生不会用 GitHub,你看大小写都没有区分(手动狗头).所以我就想写篇文章科普下,"新手如何使用 G ...

  9. 5Flask数据库

    video 43 安装mysql video44 SQLALchemy连接

  10. http代理阅读2

    向上游服务器发送请求处理 static void ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t * ...