Windows 下编译 TensorFlow 2.9.1 CC库

     参考 Intel 的 tensorflow 编译指导,不过项目还是可以用 TF原本的,不是一定要选择Intel 的TF版本。

安装 MSVC 2019

安装 Intel OneDNN  OneMKL

似乎也可以不安装  ( @ & @ )

https://www.intel.cn/content/www/cn/zh/developer/articles/tool/oneapi-standalone-components.html#onednn

安装 Python 

    TensorFlow文档一般都是推荐安装Python3.8,但高一点版本也没关系,我用的是 Python 3.10.11 。

    安装 pip 和其他工具。 pip的安装不记得了,应该不难。    

python -m ensurepip --default-pip

    安装 numpy 等模块,numpy肯定需要,其他的也可以在编译错误提示的时候安装。

pip install idna
pip install numpy
pip install psutil

安装 Msys2 及 基本工具

    下载 MSYS2-x86_64-20231026.exe 并安装。

     安装开发有关的包,宁滥毋缺。其实 TF的编译不在 MSYS2环境中,就是利用 MSYS2提供的工具。

pacman -S --noconfirm --needed base-devel vim tar wget unzip protobuf
 
pacman -S --noconfirm --needed \
		${MINGW_PACKAGE_PREFIX}-cmake \
		${MINGW_PACKAGE_PREFIX}-gcc \
		${MINGW_PACKAGE_PREFIX}-toolchain \
		${MINGW_PACKAGE_PREFIX}-boost \
		${MINGW_PACKAGE_PREFIX}-ccache \
		${MINGW_PACKAGE_PREFIX}-eigen3 \
		${MINGW_PACKAGE_PREFIX}-gcc-libgfortran \
        ${MINGW_PACKAGE_PREFIX}-grpc \
		${MINGW_PACKAGE_PREFIX}-gtk3 \
		${MINGW_PACKAGE_PREFIX}-julia \
        ${MINGW_PACKAGE_PREFIX}-dlfcn \
		${MINGW_PACKAGE_PREFIX}-ogre3d \
		${MINGW_PACKAGE_PREFIX}-python \
		${MINGW_PACKAGE_PREFIX}-vtk
pacman -S --noconfirm --needed \
		${MINGW_PACKAGE_PREFIX}-libpng \
		${MINGW_PACKAGE_PREFIX}-libjpeg \
		${MINGW_PACKAGE_PREFIX}-libtiff \
		${MINGW_PACKAGE_PREFIX}-libwebp \
		${MINGW_PACKAGE_PREFIX}-dlib \
		${MINGW_PACKAGE_PREFIX}-ffmpeg \
		${MINGW_PACKAGE_PREFIX}-harfbuzz \
		${MINGW_PACKAGE_PREFIX}-lapack \
		${MINGW_PACKAGE_PREFIX}-openblas \
		${MINGW_PACKAGE_PREFIX}-opencl-clhpp \
		${MINGW_PACKAGE_PREFIX}-opencl-headers \
		${MINGW_PACKAGE_PREFIX}-opencl-icd \
		${MINGW_PACKAGE_PREFIX}-openmp

安装Bazel

    不同tensorflow版本对应的Bazel版本是不同的,提前确定好。

    对于 tensorflow 2.9.1,下载安装 Windows 版本 bazel 5.4.0,复制到 C:\Program Files\Bazel-5.4.0 或 D:\Bazel-5.4.0 目录,改名为 bazel.exe。

## 官方下载
wget https://github.com/bazelbuild/bazel/releases/download/5.4.0/bazel-5.4.0-windows-x86_64.exe
## 国内镜像
wget https://hub.nuaa.cf/bazelbuild/bazel/releases/download/5.4.0/bazel-5.4.0-windows-x86_64.exe

下载 tensorflow 

git 克隆后切换到指定版本

git clone --recursive https://github.com/tensorflow/tensorflow.git
cd tensorflow
# switch to the branch you want to build
git checkout r2.9.1  # r1.9, r1.10, etc. 

或下载源码包并解压

## 官网地址
wget https://github.com/tensorflow/tensorflow/archive/refs/tags/v2.9.1.zip

## 国内镜像
wget https://hub.nuaa.cf/tensorflow/tensorflow/archive/refs/tags/v2.9.1.zip

## 解压
unzip v2.9.1.zip

编译 TF 2.9.1 

     在开始菜单中点击“Developer Command Prompt for VS 2019” 进入 MSVC2019 命令行环境。

     进入tensorflow 目录,将下面脚本写入 build_TF2.9.1.bat 批处理文件 。

BAZEL_DIR:指向你的 bazel执行文件所在目录

OUT_DIR : 通过 bazel 参数 --output_base=指定的编译工作目录,不指定的话会指向 C:\Users\yourname\_bazel_compiler\<hashcode>,对C盘容量是巨大的挑战,特别是你同时编译几个版本的时候。

其他参数就看你实际的安装路径了。

set BAZEL_DIR=D:\Program Files\Bazel-5.4.0
set OUT_DIR=D:\TF2.9.1_OUT

set MSYS64_BASPATH=D:\msys64

set BAZEL_SH=%MSYS64_BASPATH%\usr\bin\bash.exe
set BAZEL_VS=D:\Program Files (x86)\Microsoft Visual Studio
set BAZEL_VC=D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
set TF_VC_VERSION=16.6

set OneMKL_DIR=D:\Program Files (x86)\Intel\oneAPI\mkl\2023.2.0

set PYTHON_3_10=C:\Users\Administrator\AppData\Local\Programs\Python\Python310

set GIT_PATHS=D:\Program Files\Git\cmd;D:\Program Files\Git\usr\bin

set PATH=%PYTHON_3_10%;%PYTHON_3_10%\Scripts;%OneMKL_DIR%\;%BAZEL_DIR%;%MSYS64_PATHS%;%MSYS64_BASPATH%\usr\bin;%GIT_PATHS%;%PATH%

python configure.py

bazel --output_base=%OUT_DIR%  build --announce_rc --config=opt --config=mkl --define=no_tensorflow_py_deps=true --local_cpu_resources=5  //tensorflow:tensorflow_cc.dll

bazel --output_base=%OUT_DIR%  build --announce_rc --config=opt --config=mkl --define=no_tensorflow_py_deps=true --local_cpu_resources=5  //tensorflow:tensorflow_framework.dll

    执行这个批处理文件就好了。生成路径如下图

问题:

github下载超时

 将bazel脚本中 github.com链接换成国内github 镜像,加速下载,这里我使用hub.yzuu.cf,你看到的时候这个镜像大概率不能用了,自己搜一个就好。

sed -i -e 's#https:\/\/github\.com#https://hub.yzuu.cf#g' \
                   */*.bzl */*/*.bzl */*/*/*.bzl */*/*/*/*.bzl \
                   */*.py  */*/*.py  */*/*/*.py  */*/*/*/*.py

但是部分 bazel 脚本会将 github  URL 替换成 镜像站 URL。

  https://github.com/...........

   -->  https://storage.googleapis.com/mirror.tensorflow.org/github.com/..........

这会造成  https://hub.yzuu.cf/.......... 被转换成  https://storage.googleapis.com/mirror.tensorflow.org/hub.yzuu.cf/...........

所以,当发现这种错误引起的下载失败的话,再将 github镜像 url 转换回原url,继续编译。

sed -i -e 's#https\:\/\/hub\.yzuu\.cf#https://github.com#g' \
                   */*.bzl */*/*.bzl */*/*/*.bzl */*/*/*/*.bzl \
                   */*.py  */*/*.py  */*/*/*.py  */*/*/*/*.py

pip下载超时

可以看看 pip有没有设置镜像URL,如果没有,设置到镜像站,我选用清华镜像站

pip config get global.index-url
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

报错:用户没有权限

执行 os.symlink(target, link_name)时,报告用户没有权限。我即使以管理员执行 msys2也无法解决这个问题。

最后 直接用管理员账号登录,重新准备所有环境才解决

报错:Couldn't find undname.exe under。。。

一般是使用的 MSVC版本不合适,我安装 VS2019后这个问题被解决。

BAZEL_VC does not work when vs2019 and vs2022 exist on windows 11. · Issue #14232 · bazelbuild/bazel · GitHub

Auto-Configuration Error: Couldn't find undname.exe under C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\ · Issue #31608 · tensorflow/tensorflow · GitHubb

报错:fatal error C1007: 无法识别的标志“-ReducedOptimizeHugeFunctions”(在“p2”中)

 VS2015,VS2017 还不支持这个选项,一定要安装 VS2019。

(VS2022 我没有成功,保留意见)。

参考 tensorflow源码根目录配置文件.bazelrc 的说明

为了保证进入 Msys2界面后 VS2019 编译环境 正常,在~/.bashrc 中追加初始化指令,你需要修改为你机器的VS2019安装路径。

"D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

报错:ERROR: No matching distribution found for numpy==1.23.5

 默认版本不兼容,安装指定版本的 python-numpy

wget https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-numpy-1.23.5-1-any.pkg.tar.zst
pacman -U mingw-w64-x86_64-python-numpy-1.23.5-1-any.pkg.tar.zst

指定安装包版本

wget https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-psutil-5.9.5-2-any.pkg.tar.zst

wget https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-idna-3.4-2-any.pkg.tar.zst

报错 : fatal error C1060: 编译器的堆空间不足

限制 bazel 占用资源数。实际使用下来效果改善不大,只能反复编译个几十遍。

bazel build --config=opt \
        --local_ram_resources=HOST_RAM*.8 \
        --local_cpu_resources=HOST_CPUS-2  \
        //tensorflow/tools/pip_package:build_pip_package

 报错 :无法打开 legalize_tf_xla_call_module_to_stablehlo_pass.obj.params

 windows下 有MAX_PATH=260 的限制,--output_base 设置编译输出路径尽量短小就好。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法随想录算法训练营第四十七天| 647. 回文子串 516.最长回文子序列

647. 回文子串 题目&#xff1a;给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字…

开发知识点-PHP从小白到拍簧片

从小白到拍簧片 位异或运算&#xff08;^ &#xff09;引用符号(&)strlen() 函数base64_encode预定义 $_POST 变量session_start($array);操作符php 命令set_time_limit(7200)isset()PHP 命名空间(namespace)new 实例化类extends 继承 一个类使用另一个类方法error_reporti…

【C语法学习】16 - fclose()函数

文章目录 1 函数原型2 参数3 返回值4 示例 1 函数原型 fclose()&#xff1a;关闭已打开的文件&#xff0c;并刷新缓冲区&#xff0c;函数原型如下&#xff1a; int fclose(FILE *stream);2 参数 fclose()函数只有一个参数stream&#xff1a; 参数stream是一个指向FILE类型结…

Daily neaty和希亦内衣洗衣机哪款好,高性价比内衣洗衣机测评

现在市面最火的小家电莫过于是内衣洗衣机&#xff0c;那么它是否真的好用还是只是智商税呢&#xff1f;但关于内衣洗衣机&#xff0c;很多小伙伴都会选入手来释放自己的双手的&#xff0c;现在内衣洗衣机品牌众多&#xff0c;而且Daily neaty和希亦CEYEE-ACE这两个大品牌会被许…

【漏洞复现】Apache_HTTPD_换行解析漏洞(CVE-2017-15715)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用GetShell 1.6、修复建议 说明内容漏洞编号CVE-2017-15715漏洞名称Ap…

京东数据平台:2023年9月京东智能家居行业数据分析

鲸参谋监测的京东平台9月份智能家居市场销售数据已出炉&#xff01; 9月份&#xff0c;智能家居市场销售额有小幅上涨。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年9月&#xff0c;京东平台智能家居的销量为37万&#xff0c;销售额将近8300万&#xff0c;同比增…

如何理解所谓的【指令执行速度】

公式&#xff1a; 指令执行速度 主频/平均CPI 先不看主频&#xff0c;如下图&#xff0c;假设一秒钟能有4个正弦波&#xff0c;那就说明频率是4。 而计算机很厉害&#xff0c;一秒能有很多个正弦波 把一个正弦波&#xff0c;看做一个时钟周期 则主频表示&#xff0c;计算机…

g.Grafana之Gauge的图形说明

直接上操作截图 1. 创建一个新的Dashboard 2.为Dashboard创建变量 【General】下的Name与Label的名称自定义 【Query options】 下的Group可以填写Zabbix内的所有组/.*/ , 然后通过Regex正则过滤需要的组名 3.设置Dashboard的图形 我使用文字来描述下这个图 1.我们在dash…

Java数组小练习求出数组中的最大值

加油&#xff0c;新时代打工人&#xff01; Java基础八之数组的定义和获取元素 package demo;/*** author wenhao* date 2023/11/04 10:47* description 数组练习*/ public class ArrDemo {public static void main(String[] args) {//求一个数组中的最大值int [] arr {66,12…

YOLOv7独家原创改进:新颖自研设计的BSAM注意力,基于CBAM升级

💡💡💡本文全网首发独家改进:提出新颖的注意力BSAM(BiLevel Spatial Attention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的 BiLevel Attention+Spartial Attention 1)作为注意力BSAM使用; 推荐指数:…

clusterprolifer go kegg msigdbr 富集分析应该使用哪个数据集,GO?KEGG?Hallmark?

关注微信&#xff1a;生信小博士 5 Overview of enrichment analysis Chapter 5 Overview of enrichment analysis | Biomedical Knowledge Mining using GOSemSim and clusterProfiler 5.1.2 Gene Ontology (GO) Gene Ontology defines concepts/classes used to describ…

氮化镓功率放大器长期记忆效应的补偿

标题&#xff1a;Compensation of Long-Term Memory Effects on GaN HEMT-Based Power Amplifiers 来源&#xff1a;IEEE TRANSACTIONS ON MICROWAVE THEORY AND TECHNIQUES DPD&#xff1a;数字预失真&#xff08;Digital Pre-Distortion&#xff09;RF PA&#xff1a;射频功…

数据结构(超详细讲解!!)第十九节 块链串及串的应用

1.定义 由于串也是一种线性表&#xff0c;因此也可以采用链式存储。由于串的特殊性&#xff08;每个元素只有一个字符&#xff09;&#xff0c;在具体实现时&#xff0c;每个结点既可以存放一个字符&#xff0c;也可以存放多个字符。每个结点称为块&#xff0c;整个链表称为块链…

python使用requests+excel进行接口自动化测试

在当今的互联网时代中&#xff0c;接口自动化测试越来越成为软件测试的重要组成部分。Python是一种简单易学&#xff0c;高效且可扩展的语言&#xff0c;自然而然地成为了开发人员的首选开发语言。而requests和xlwt这两个常用的Python标准库&#xff0c;能够帮助我们轻松地开发…

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)

JavaEE平台技术——预备知识&#xff08;Web、Sevlet、Tomcat&#xff09; 1. Web基础知识2. Servlet3. Tomcat并发原理 1. Web基础知识 &#x1f192;&#x1f192;上个CSDN我们讲的是JavaEE的这个渊源&#xff0c;实际上讲了两个小时的历史课&#xff0c;给大家梳理了一下&a…

C++算法 —— 贪心(2)

文章目录 1、柠檬水找零2、将数组和减半的最少操作次数3、最大数4、摆动序列5、最长递增子序列6、递增的三元子序列7、最长连续递增子序列 1、柠檬水找零 860. 柠檬水找零 如果一开始顾客给了10块&#xff0c;那就直接结束。给了5块那就收下。之后每一个位置&#xff0c;都需要…

Rtthread源码分析<1>启动文件和链接脚本

启动文件和链接脚本 1&#xff09;启动文件 ​ 启动文件里面使用的是汇编语言&#xff0c;汇编语言常常可以分为两个部分语法风格和而不同的toolchain有不同的汇编语法风格&#xff0c;通常分配unified 和 非 unified。常见的工具包有 ARM toolchains 和 GNU toolchains 。比…

一篇博客读懂顺序表 —— Sequence-List

目录 一、顺序表的初始定义 1.1新建头文件和源文件 1.2 SeqList.h 中的准备工作 二、顺序表的初始化与销毁 三、首尾插入元素 四、首尾删除元素 五、中间插入元素 六、中间删除元素 七、查找指定元素下标 八、源代码 一、顺序表的初始定义 1.1新建头文件和源文件 当我…

Swift语言配合HTTP写的一个爬虫程序

下段代码使用Embassy库编写一个Swift爬虫程序来爬取jshk的内容。我会使用proxy_host为duoip&#xff0c;proxy_port为8000的爬虫IP服务器。 使用Embassy库编写一个Swift爬虫程序可以实现从网页上抓取数据的功能。下面是一个简单的步骤&#xff1a; 1、首先&#xff0c;需要在X…

虹科示波器 | 汽车免拆检修 | 2010款江铃陆风X8车发动机怠速抖动、加速无力

一、故障现象 一辆2010款江铃陆风X8车&#xff0c;搭载4G6GS4N发动机&#xff0c;累计行驶里程约为20万km。该车在其他修理厂进行发动机大修&#xff0c;维修后试车&#xff0c;发动机怠速抖动、加速无力。用故障检测仪检测&#xff0c;发动机控制模块&#xff08;ECM&#xff…