• Windows + Msys 下编译 TensorFlow 2.14


    之前编译 TensorFlow 2.9.1 CC库成功,具体步骤请转 Windows 下编译 TensorFlow 2.9.1 CC库

    但编译 TF 2.14.0 遇到了很大困难,具体过程类似前文,这里仅列出遇到的问题,有解决则给出我自己的解决方法。

    安装基本工具

    宁滥毋缺

    1. pacman -S --noconfirm --needed base-devel vim tar wget unzip protobuf
    2. pacman -S --noconfirm --needed \
    3. ${MINGW_PACKAGE_PREFIX}-cmake \
    4. ${MINGW_PACKAGE_PREFIX}-gcc \
    5. ${MINGW_PACKAGE_PREFIX}-toolchain \
    6. ${MINGW_PACKAGE_PREFIX}-boost \
    7. ${MINGW_PACKAGE_PREFIX}-ccache \
    8. ${MINGW_PACKAGE_PREFIX}-eigen3 \
    9. ${MINGW_PACKAGE_PREFIX}-gcc-libgfortran \
    10. ${MINGW_PACKAGE_PREFIX}-grpc \
    11. ${MINGW_PACKAGE_PREFIX}-gtk3 \
    12. ${MINGW_PACKAGE_PREFIX}-julia \
    13. ${MINGW_PACKAGE_PREFIX}-dlfcn \
    14. ${MINGW_PACKAGE_PREFIX}-ogre3d \
    15. ${MINGW_PACKAGE_PREFIX}-python \
    16. ${MINGW_PACKAGE_PREFIX}-python2 \
    17. ${MINGW_PACKAGE_PREFIX}-python-pip \
    18. ${MINGW_PACKAGE_PREFIX}-python-psutil \
    19. ${MINGW_PACKAGE_PREFIX}-python-idna \
    20. ${MINGW_PACKAGE_PREFIX}-vtk
    21. pacman -S --noconfirm --needed \
    22. ${MINGW_PACKAGE_PREFIX}-libpng \
    23. ${MINGW_PACKAGE_PREFIX}-libjpeg \
    24. ${MINGW_PACKAGE_PREFIX}-libtiff \
    25. ${MINGW_PACKAGE_PREFIX}-libwebp \
    26. ${MINGW_PACKAGE_PREFIX}-dlib \
    27. ${MINGW_PACKAGE_PREFIX}-ffmpeg \
    28. ${MINGW_PACKAGE_PREFIX}-harfbuzz \
    29. ${MINGW_PACKAGE_PREFIX}-lapack \
    30. ${MINGW_PACKAGE_PREFIX}-openblas \
    31. ${MINGW_PACKAGE_PREFIX}-opencl-clhpp \
    32. ${MINGW_PACKAGE_PREFIX}-opencl-headers \
    33. ${MINGW_PACKAGE_PREFIX}-opencl-icd \
    34. ${MINGW_PACKAGE_PREFIX}-openmp
    35. pacman -U https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-numpy-1.23.5-1-any.pkg.tar.zst
    36. pacman -U http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-setuptools-67.6.1-1-any.pkg.tar.zst \
    37. http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/mingw-w64-x86_64-python-werkzeug-2.3.7-1-any.pkg.tar.zst

    安装Bazel

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

    对于 tensorflow 2.14.0,下载安装 Windows 版本 bazel 6.1.2,复制到 C:/Windows/system32 目录或 D:/msys64/mingw64/bin 目录下,改名为 bazel.exe

    1. wget https://github.com/bazelbuild/bazel/releases/download/6.1.2/bazel-6.1.2-windows-x86_64.exe
    2. ## 国内镜像
    3. wget https://hub.nuaa.cf/bazelbuild/bazel/releases/download/6.1.2/bazel-6.1.2-windows-x86_64.exe
    4. cp bazel-6.1.2-windows-x86_64.exe /mingw64/bin/bazel.exe

    下载 tensorflow 

    git 克隆后切换到指定版本

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

    或下载源码包并解压

    1. wget https://github.com/tensorflow/tensorflow/archive/refs/tags/v2.14.0.zip
    2. ## 国内镜像
    3. wget https://hub.nuaa.cf/tensorflow/tensorflow/archive/refs/tags/v2.14.0.zip
    4. ## 解压
    5. unzip v2.14.0.zip

     进入tensorflow 目录,编译 & 安装

    1. cd tensorflow-2.14.0
    2. ./configure ## 和执行 python configure.py 效果一样
    3. ## tensorflow:libtensorflow_cc.so
    4. bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
    5. ## build install python-package
    6. bazel-bin/tensorflow/tools/pip_package/build_pip_package package/20230912
    7. ## remove old version and install new package
    8. pip uninstall tensorflow
    9. pip install package/20230912/tensorflow-*.whl

    问题:

    github下载超时

     将bazel脚本中 github.com链接换成国内github 镜像,加速下载,这里我使用hub.yzuu.cf。

    1. sed -i -e 's#https:\/\/github\.com#https://hub.yzuu.cf#g' \
    2. */*.bzl */*/*.bzl */*/*/*.bzl */*/*/*/*.bzl \
    3. */*.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,继续编译。

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

    pip下载超时

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

    1. pip config get global.index-url
    2. 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

    1. 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
    2. pacman -U mingw-w64-x86_64-python-numpy-1.23.5-1-any.pkg.tar.zst

    指定安装包版本

    1. 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
    2. 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 占用资源数。实际使用下来效果改善不大,只能反复编译个几十遍。

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

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

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

    试试这个 ,不行就新建个短名用户重新编译吧。

    修改 mingw安装路径的 /etc/profile 文件,在前面添加强制初始化环境变量,重启mingw 环境。我实际使用的是 x,只一个字符,尽量缩短最后生成的路径长度。

    1. USER=roe
    2. USERNAME=roe
    3. HOME=/home/roe

    报错: 无法打开包括文件: “dirent.h”

    参考: Visual studio 2019 报错没有“dirent.h”文件, 补一个 dirnet.h 文件到 VS2019 include目录

    报错: 无法打开包括文件: “dlfcn.h”

     pacman -S --noconfirm --needed ${MINGW_PACKAGE_PREFIX}-dlfcn


     

  • 相关阅读:
    【解决问题】跨域 图片跨域问题 has been blocked by CORS policy No-Access-Control-Allow-Origin
    【刷题记录⑨】Java工程师丨字节面试真题(三)
    Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
    11GR2 rac 2节点一键安装演示
    ClickPaaS马俊:模型驱动的低代码平台实践
    餐厅订座预约小程序的效果如何
    商城项目 pc----商品详情页
    关于对ServletContext对象的应用详解
    C#实现图片转Base64字符串.并支持markdown文件打开展示
    双十一游戏党必备的数码好物有哪些?2022双11游戏党必备外设清单
  • 原文地址:https://blog.csdn.net/Tonyfield/article/details/133849484