极智AI | centos7源码编译tensorflow

news2024/11/29 10:53:17

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

大家好,我是极智视界,本文介绍一下 centos7 源码编译 tensorflow 的方法

之前这篇《极智开发 | centos7源码编译bazel》已经为这篇 tensorflow 的源码编译铺平了道路,所以这里的前提是你已经安装好了 bazel。

这里咱们以源码编译 tensorflow v1.15.0 为例,下面开始。

  • (1) 下载源码
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

需要注意的是,这样的方式下载的 tensorflow 源码是默认master分支的,也就是默认是最新的,而在咱们的需求中,往往是需要编译指定版本的 tensorflow,所以你可以这样:

# clone好后进入tensorflow目录,执行如下
git checkout branch_name  # r2.2, r2.3, etc.

当然也可以直接到release里下载对应版本的源码包,地址:release

  • (2) 下载 nsync-1.22.0.tar.gz 源码包

进入 tensorflow tag v1.15.0 源码目录,打开 tensorflow/workspace.bzl 文件,找到其中 name 为 nsynctf_http_archive 定义,如下:

从上面的 urls 中随便选一个链接下载,并将下载好的 nsync-1.22.0.tar.gz 放到任意目录,比如我放到 /workspace/env 下。

  • (3) 修改 nsync-1.22.0.tar.gz 源码包
cd /workspace/env 
tar -zxvf nsync-1.22.0.tar.gz

cd nsync-1.22.0/platform/c++11

然后打开atomic.h,在 NSYNC_CPP_START_替换/添加 如下内容:

#include "nsync_cpp.h"
#include "nsync_atomic.h"

NSYNC_CPP_START_

#define ATM_CB_() __sync_synchronize()

static INLINE int atm_cas_nomb_u32_ (nsync_atomic_uint32_ *p, uint32_t o, uint32_t n) {
    int result = (std::atomic_compare_exchange_strong_explicit (NSYNC_ATOMIC_UINT32_PTR_ (p), &o, n, std::memory_order_relaxed, std::memory_order_relaxed));
    ATM_CB_();
    return result;
}
static INLINE int atm_cas_acq_u32_ (nsync_atomic_uint32_ *p, uint32_t o, uint32_t n) {
    int result = (std::atomic_compare_exchange_strong_explicit (NSYNC_ATOMIC_UINT32_PTR_ (p), &o, n, std::memory_order_acquire, std::memory_order_relaxed));
    ATM_CB_();
    return result;
}
static INLINE int atm_cas_rel_u32_ (nsync_atomic_uint32_ *p, uint32_t o, uint32_t n) {
    int result = (std::atomic_compare_exchange_strong_explicit (NSYNC_ATOMIC_UINT32_PTR_ (p), &o, n, std::memory_order_release, std::memory_order_relaxed));
    ATM_CB_();
    return result;
}
static INLINE int atm_cas_relacq_u32_ (nsync_atomic_uint32_ *p, uint32_t o, uint32_t n) {
    int result = (std::atomic_compare_exchange_strong_explicit (NSYNC_ATOMIC_UINT32_PTR_ (p), &o, n, std::memory_order_acq_rel, std::memory_order_relaxed));
    ATM_CB_();
    return result;
}
  • (4) 重新生成 nsync-1.22.0.tar.gz 源码包

上面对 nsync-1.22.0 源码进行了修改,重新压缩生成 nsync-1.22.0.tar.gz,替换原来的 nsync-1.22.0.tar.gz,因此包的路径依旧还是 /workspace/env/nsync-1.22.0.tar.gz

  • (5) sha256sum 校验 nsync-1.22.0.tar.gz
sha256sum /workspace/env/nsync-1.22.0.tar.gz

# 生成一串sha256sum校验码,记住它
  • (6) 修改tensorflow workspace.bzl

回到第(2)步中的 ~/tensorflow-1.15.0/tensorflow/workspace.bzl,修改 sha256 = 为第(5)步生成的校验码,在 urls = [] 中新增 nsync-1.22.0.tar.gz的绝对路径,如下:

  • (7) 配置系统build
cd tensorflow-1.15.0
# 直接执行
./configure
# 会跳出来很多配置选项,按自己的需要进行选择
# 如果只是编译最基础的CPU版本,一路N到底就可以了

执行完 ./configure 之后,需要修改 .tf_configure.bazelrc 配置文件:

# 添加如下一行 build编译选项
build:opt --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0
# 删除以下两行
build:opt --copt=-march=native 
build:opt --host_copt=-march=native
  • (8) 编译

使用 bazel 开始编译:

bazel build [--config=option] /path/tensorflow/tools/pip_package:build_pip_package

编译成功后会在对应目录中生成 .whl 软件包

  • (9) 安装.whl
pip install path/tensorflow-version-tags.whl

这样就大功告成了。

好了,以上分享了 centos7 源码编译 tensorflow 的方法。希望我的分享能对你的学习有一点帮助。

【极智视界】

《极智开发 | centos7 编码编译 bazel》

 


搜索关注我的微信公众号「极智视界」,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

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

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

相关文章

[附源码]Nodejs计算机毕业设计基于web的小说浏览系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【Docker】Docker安装MySQL,并解决中文乱码和配置数据备份同步到宿主机

专栏精选文章 《Docker是什么?Docker从介绍到Linux安装图文详细教程》《30条Docker常用命令图文举例总结》《Docker如何构建自己的镜像?从镜像构建到推送远程镜像仓库图文教程》《Docker多个容器和宿主机之间如何进行数据同步和数据共享?容器…

银河麒麟操作系统V10SP1创建网页快捷方式至桌面的方法

修改浏览器配置文件添加快捷方式 1.在桌面点击鼠标右键,选择‘’打开终端‘’,终端界面显示‘桌面’ 2.在终端界面输入命令行 sudo vim qaxbrowser-safe.desktop (奇安信浏览 器的快捷方式) 进去后按‘/’然后输入‘Exec’,最后按回车键。…

Android监听UEvent之UEventObserver分析

(1)背景概述 众所周知,在安卓系统中有状态栏,在插入外设的时候,会在顶部状态栏显示小图标。 比如,camera设备,耳机设备,U盘,以及电池等等。这些都需要在状态栏动态显示。…

wy的leetcode刷题记录_Day58

wy的leetcode刷题记录_Day58 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2022-12-2 前言 力扣每日一题简单模拟左右抵消和二叉平衡搜索树 1769. 移动所有球到每个盒子所需的最小操作数和108. 将有序数组转换为二叉搜索树 目录wy的l…

无线路由器首次配置、修改WiFi名称和密码—— Cisco实验/家里实验

一、Csico实验 192.168.0.1、192.168.1.0和192.168.1.1是路由器常用的默认IP 1. 在PC打开浏览器(PC用网线直连无线路由器), 输入无线路由器在局域网内的静态IP:192.168.0.1 2. 输入管理者的账号和密码,默认都是admin…

搜索与图论- Dijkstra 算法

文章目录一、Dijkstra 算法1. 简介2. 基本思想3. 朴素 Dijkstra 算法(重点)3.1 朴素 Dijkstra 算法实现步骤3.2 朴素 Dijkstra 算法伪代码4. 朴素 Dijkstra 算法具体实现详见例题 Dijkstra 求最短路 I 。5. 堆优化朴素 Dijkstra 算法6. 堆优化 Dijkstra …

cookie、sessionStorage和localStorage的区别(二)

cookie、sessionStorage和localStorage的区别(一)详细精炼知识调用前言引入核心干货webstorage本地存储cookiesessionStoragelocalStorage知识调用 文章中可能用到的知识点前端学习:浏览器缓存方式有哪些( cookie localstorage s…

rocketmq源码学习-broker启动

前言 这篇笔记记录broker启动的源码学习 broker主要完成一下几件事情: 1.接收producer的发送请求,并对消息进行持久化、同步其他节点 2.接收consumer读取消息星球 3.定时向nameSrv注册心跳信息,保持连接 在启动的时候,也是分了…

Ant Design 6.0.0 实践集合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用的6.0.0 beta版本 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结前言 Ant Design 简称为 Antd antd 为 Web 应用提供了丰富的基础 U…

操作指南|通过JumpServer实现Kubernetes运维安全审计

本文重点介绍如何通过JumpServer实现Kubernetes的运维安全审计。此前,我们专门介绍过在Kubernetes集群上快速部署JumpServer的方法步骤,可参见《操作指南|在Kubernetes集群上快速部署JumpServer开源堡垒机》一文。 一、Kubernetes运维审计现…

ABP Vnext 学习03-授权中心微信小程序登录

前言 小程序开发的 前置条件 1 需要服务端是https 和域名 Ip 是不可以的 2 需要申请appid 小程序的官方流程图 个人理解 对于上面的流程图 步骤一 客户端 小程序调用wx.login 方法 获取用户的code 这个code 是限时的五分钟就会过期 拿到code 就可以向服务端发起登录请求了 …

vue3中ref的作用及ref和reactive之间的转化

ref的作用&#xff1a; &#xff08;1&#xff09;第一个作用&#xff1a;和vue一样&#xff1a; 绑在dom节点上拿到的是dom节点&#xff1b;绑在组件上拿到的是组件对象&#xff1b; 定义方式&#xff1a; <template><div><input type"text" ref&…

java运行数据区域分布

Java在运行程序过程中&#xff0c;会将自己的内存划分为若干个不同的数据数据区域&#xff0c;这些若干个区域&#xff0c;每个区域都有自己的用途&#xff0c;具体看下图 java是面向对象的语言&#xff0c;那么虚拟机中的数据&#xff08;对象&#xff09;是怎么被创建出来的呢…

加密 笔记

文章目录简单异或加密对称加密DES加密AES加密1.简单的加密解密逻辑2.填充方式**noPadding**3.加密模式1、**ECB模式&#xff08;默认&#xff09;**2、**CBC模式**3、CFB模式4、OFB模式5、CTR模式代码案例ECB加密和CBC加密测试非对称加密RSA加密AES和RSA混合加密哈希散列算法什…

[附源码]Python计算机毕业设计动物保护资讯推荐网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

RabbitMQ[3]-RabbitMQ如何保证消息的可靠性投递与消费?

上篇文章&#xff1a;RabbitMQ的核心概念有哪些&#xff1f;它们的职责是什么&#xff1f;中我们详细介绍了RabbitMQ的工作模式&#xff0c;根据它的工作模式&#xff0c;一条消息从生产者发出&#xff0c;到消费者消费&#xff0c;需要经历以下4个步骤&#xff1a; 生产者将消…

Java笔记——String类各种方法的使用总结(附带实例)

String类的获取方法 String类实现获取功能的方法有 int length() —— 获取字符串长度 char charAt(int index) —— 获取指定索引处的字符值 int indexOf(int ch) —— 获取指定字符第一次出现的索引位置 int indexOf(String str) —— 获取指定字符串第一次出现的索引位…

ArrayDeque源码解析

ArrayDeque源码解析 问题 &#xff08;1&#xff09;什么是双端队列&#xff1f; &#xff08;2&#xff09;ArrayDeque 是怎么实现双端队列的&#xff1f; &#xff08;3&#xff09;ArrayDeque 是线程安全的吗&#xff1f; &#xff08;4&#xff09;ArrayDeque 是有界的…

【正点原子FPGA连载】 第三十五章双目OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十五章双目O…