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 protobufpacman -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_OUTset MSYS64_BASPATH=D:\msys64set 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.6set OneMKL_DIR=D:\Program Files (x86)\Intel\oneAPI\mkl\2023.2.0set PYTHON_3_10=C:\Users\Administrator\AppData\Local\Programs\Python\Python310set GIT_PATHS=D:\Program Files\Git\cmd;D:\Program Files\Git\usr\binset PATH=%PYTHON_3_10%;%PYTHON_3_10%\Scripts;%OneMKL_DIR%\;%BAZEL_DIR%;%MSYS64_PATHS%;%MSYS64_BASPATH%\usr\bin;%GIT_PATHS%;%PATH%python configure.pybazel --output_base=%OUT_DIR%  build --announce_rc --config=opt --config=mkl --define=no_tensorflow_py_deps=true --local_cpu_resources=5  //tensorflow:tensorflow_cc.dllbazel --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.zstwget 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 设置编译输出路径尽量短小就好。 

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

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

相关文章

Technology strategy Pattern 学习笔记1-Context: Architecture and Strategy

Context: Architecture and Strategy 1 Architect and Strategist 1.1 three primary concerns of the architect 1.1.1 Contain entropy(熵-混乱程度&#xff0c;不确定性&#xff0c;惊奇程度&#xff0c;不可预测性&#xff0c;信息量等等&#xff09; The architect wh…

Python|Pyppeteer获取威科先行文章链接(21)

前言 本文是该专栏的第21篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文以“威科先行”的信息库为例,笔者将详细介绍使用pyppeteer“自动滑动页面并翻页”获取威科先行的文章链接。如果对pyppeteer的使用以及知识点不太熟悉的同学,可往前查看本专栏前面…

Modelsim 使用教程(5)——Analyzing Waveforms

一、概述 Wave窗口允许我们以HDL波形和数据的形式查看仿真结果。Wave窗口被划分为多个窗格。通过单击并在任意两个窗格之间拖动该条&#xff0c;可以调整路径名窗格、值窗格和波形窗格的大小。 二、加载一个设计&#xff08;Loading a Design&#xff09; 1、打开modelsim 2、…

SQL左连接实战案例

要求&#xff1a;用表df1和表df2的数据&#xff0c;得到df3 一、创建表 CREATE TABLE df1 (姓名 varchar(255) DEFAULT NULL,年龄 int DEFAULT NULL,部门 varchar(255) DEFAULT NULL,id int DEFAULT NULL );CREATE TABLE df2 (部门 varchar(255) DEFAULT NULL,年龄 int DEFAU…

C++ Qt QLineEdit如何响应回车事件

在Qt开发中,回车键的处理很常见,本篇博客介绍在QLineEdit里回车键的处理方法,例如下面的界面: QLineEdit回车键的处理有方式,一是链接returnPressed信号,二是用事件过滤。下面分别介绍这两种方式。 一、returnPressed信号 可以查看QLineEdit的头文件声明,有如下信号:…

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可&#xff0c;进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时&#xff0c;消费者常常感到困惑&#xff0c;不知道如何选择。面对众多选择&#xff0c;选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…

扩容一个新节点

1.删除nodes rm -rf nodes/ 2.挂载本地文件与创建节点 bash build_chain.sh -f ipconf -e /root/tools/fisco-bcos 3.部署节点 bash nodes/127.0.0.1/start_all.sh 4.把共享的gen_node_cert.sh文件下载到本地 cp /root/Desktop/共享文件夹/tools/gen_node_cert.sh ./…

java毕业设计基于springboot+vue的村委会管理系统

项目介绍 采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…

初学Flutter:swiper实现

效果展示&#xff1a; flutter swiper 1、安装 card_swiper 2、引入card_swiper import package:card_swiper/card_swiper.dart;3、使用 这里我主要是对官网例子进行实践&#xff0c;主要是5种常用的swiper 1、普遍的swiper //custom swiper class CustomSwiper extends S…

css 图片好玩的一个属性,添加滤镜

鼠标经过效果对比&#xff1a; 上图是改变了图片的饱和度&#xff0c;代码如下&#xff1a; .img-box .v-image:hover {filter: saturate(1.75); }其他滤镜说明如下图&#xff1a;

R语言爬虫代码模版:技术原理与实践应用

目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展&#xff0c;网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具&#xff0c;结合爬虫技术&#xff0c;可以让我们轻松地获取并分析网络数据。…

office2024下载详细安装教程

简单的说 Office 是一款由Microsoft 开发的一套办公软件&#xff0c;里面包含了常用的办公组件而其中就包含了Word、Excel、PowerPoint、Access等&#xff01; 并且office是目前最常用的一类办公软件&#xff0c;使用它可以解决日常生活和工作中遇到的很多问题。 熟练掌握offi…

Java医院HIS系统源码

Java医院HIS系统源码 项目描述 该项目是用springbootlayuishiro写的医院管理系统&#xff0c;该系统的业务比较复杂&#xff0c;数据库一共有36张表。项目的视频业务参考文档&#xff0c;都在百度云盘中。可以先看看视频和参考文档。 运行环境 jdk8mysqlIntelliJ IDEAmaven…

shell script 的默认变量$0,$1,$2...,参数偏移的shift

简单来说&#xff0c;在scirpt脚本里面&#xff0c;$0表示文件名&#xff0c;$1表示第一个参数&#xff0c;以此类推&#xff0c;还有 $# 后面接参数的个数 $ 代表"$1","$2","$3"&#xff0c;每个都是独立的&#xff0c;用双引号括起来 $* 代…

register_parameter和register_buffer 详解

在参考yolo系列代码或其他开源代码&#xff0c;经常看到register_buffer和 register_parameter的使用&#xff0c;接下来将详细对他们进行介绍。 1. 前沿 在搭建网络时&#xff0c;我们 自定义的参数&#xff0c;往往不会保存到模型权重文件中&#xff0c;或者成为模型可学习…

软件测试之BUG篇(定义,创建,等级,生命周期)

目录 1. BUG 的定义 2. 如何创建 BUG 3. BUG 等级 4. BUG 生命周期 高频面试题&#xff1a; 1. BUG 的定义 当且仅当产品规格书存在且正确时&#xff0c;程序的实现和规格书的要求不匹配时&#xff0c;那就是软件错误。当产品规格说明书没有提到的功能时&#xff0c;以用户…

国家统计局教育部各级各类学历教育学生情况数据爬取

教育部数据爬取 1、数据来源2、爬取目标3、网页分析4、爬取与解析5、如何使用Excel打开CSV1、数据来源 国家统计局:http://www.stats.gov.cn/sj/ 教育部:http://www.moe.gov.cn/jyb_sjzl/ 数据来源:国家统计局教育部文献教育统计数据2021年全国基本情况(各级各类学历教育学…

编写shell脚本,利用mysqldump实现MySQL数据库分库分表备份

查看数据和数据表 mysql -uroot -p123456 -e show databases mysql -uroot -p123456 -e show tables from cb_d 删除头部Database和数据库自带的表 mysql -uroot -p123456 -e show databases -N | egrep -v "information_schema|mysql|performance_schema|sys"编写…

HTML和CSS的基础-前端扫盲

想要写出一个网页&#xff0c;就需要学习前端开发&#xff08;写网页代码&#xff09;和后端开发&#xff08;服务器代码&#xff09;。 对于前端的要求&#xff0c;我们不需要了解很深&#xff0c;仅仅需要做到扫盲的程度就可以了。 写前端&#xff0c;主要用到的有&#xf…

蓝鹏测控测宽仪系列又添一员大将——双目测宽仪

轧钢过程中钢板的宽度是一个重要的参数&#xff0c;它直接决定了成材率。同时&#xff0c;随着高新科技越来越广泛的应用到工程实际中&#xff0c;许多控制系统需要钢板实时宽度值作为模型参数。 当前&#xff0c;相当一部分宽厚板厂还在采用人工检测的方法&#xff0c;检测环境…