麦斯科技 · 2022年08月08日 · 四川

为Windows on Arm设置Tensorflow

https://www.linaro.org/blog/setting-up-tensorflow-for-windows-on-arm/

作者:Everton Constantino 2022年6月28日

屏幕截图 2022-08-08 214004.png

介绍

Tensorflow是当今使用的主流机器学习框架之一。它通常通过使用Bazel构建的Python包分发。在撰写本文时,没有官方软件包可供Tensorflow在Windows on Arm上本机运行。然而,为了帮助开发人员使用这些工具,本文展示了如何使用我们为此开发的一些修补程序构建自己的Tensorflow包。

该过程从安装环境开始,然后构建自己的Bazel,最后构建Tensorflow。我们已经在Windows on Arm上使能了Bazel。官方二进制文件的版本是5.1。

不幸的是,无法使用此版本构建当前的Tensorflow分支,这就是为什么您需要从源代码构建它。所有步骤都在带有Windows 11的Surface Pro上进行了测试。

安装要求

. Microsoft Visual Studio社区版2019。下载地址:https://visualstudio.microsoft.com/vs/community/-请注意,这不是最新版本,请确保安装Windows SDK。

. 适用于Windows x86的Bazel 4.2.1。您将使用它来引导Windows on Arm Bazel版本。从以下位置下载源代码:https://github.com/nsait-linaro/bazel,请查看分支4.2.1-win_arm64,然后按照https://bazel.build/install/compile-source#build-bazel上的步骤操作使用Bazel。

. 下载JDK。我们使用了zulu 17.32.13,您可以在https://www.azul.com/downloads/?package=jdk下载Windows on Arm版本。

. Python 3.10.0。这可以通过nuget工具下载https://dist.nuget.org/win-x86-commandline/latest/nuget.exe,然后运行以下命令:

nuget.exe install pythonarm64 -Version 3.10.0

注意:从3.11.0a5开始,这只需要在Python 3.10.0中完成。可以下载Windows on Arm的官方二进制文件。确保将此Python添加到系统路径(PATH)。

Linaro正在发布Windows on Arm的LLVM和MSYS2.LLVM:https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.0/LLVM-14.0.0-woa64.zip,并且MSYS2可以在以下位置找到:https://www.msys2.org/,也将它们添加到您的路径中。然后使用适当的路径和以下命令行设置Powershell脚本:

cmd.exe /c "call `"__PATH__\VC\Auxiliary\Build\vcvarsx86_arm64.bat`" && set > %temp%\vcvars.txt"
Get-Content "$env:temp\vcvars.txt" | Foreach-Object {
  if ($_ -match "^(.*?)=(.*)$") {
    Set-Content "env:\$($matches[1])" $matches[2]
  }
}
$env:PATH+=";_PATH_KIT__\arm64\ucrt\;__PATH__\VC\Redist\MSVC\14.29.30133\onecore\debug_nonredist\arm64\Microsoft.VC142.DebugCRT"

其中PATH是Visual Studio CE安装路径,PATH_KIT是Windows SDK安装路径。最后,从这里获取打了补丁的Tensorflow:https://github.com/everton1984/tensorflow,并下载win_ arm64v2分支。

构建Tensorflow

首先,您应该确保已经阅读Tensorflow的指南,知道从源代码编译的方法。https://www.tensorflow.org/install/source. 还确保安装了其中提到的所有必需的Python软件包。

您从Bazel下载的代码库增加了对新cpu/OS x64_arm64_windows的支持,Tensorflow的主要变化是增加了对target - win_arm64的支持。该补丁是实验性的,一些功能尚未完全测试,但这项工作不仅添加新的目标,还调整第三方库以实际利用它,并理解现在您可以在Windows上编译,但CPU不一定是x86。

要编译,只需运行:


bazel build –config=win_arm64 //tensorflow/tools/pip_package:build_pip_package

Bazel可能无法正确链接到python.3.10.0.lib。如果发生这种情况,请确保将该文件直接复制到LLVM的库文件夹中。完成此步骤后,执行以下脚本以构建whl包本身:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package.exe WHL_DIR

这将在WHL_DIR所指的路径上构建whl。您会注意到,由于缺少依赖项tensorflow_io_gcs_filesystem,您将无法安装该特定的whl,但您可以使用额外的pip参数–no-dependencies 安装。

然后可以为Python脚本导入tensorflow。

局限

由于Windows on Arm缺少Tensorflow IO,并非所有功能都能正常工作。构建Tensorflow IO需要Tensorflow的pre-working版本,引导过程对于本文来说太复杂了。请注意,如果没有Tensorflow IO,几个重要的Tensorflow功能将无法执行。

为了执行Tensorflow的部分单元测试,必须使用Bazel的测试命令。我们实验了core/kernels下的测试,目前只有lmdb_dataset_op_test失败。Bazel或LLVM中似乎存在一个bug,要求在没有动态库的情况下构建测试,因此有必要添加一个额外的参数–dynamic_mode=off。

要仅执行core/kernels测试,请键入

bazel test –config=win_arm64 –dynamic_mode=off //tensorflow/core/kernels/…

目前,没有计划在Windows on Arm上提供Tensorflow的官方原生支持,但如果社区大力推动,这种情况可能会改变

结论

这里我们展示了如何在Windows on Arm构建Tensorflow的过程。这是Linaro和Microsoft为其Surface设备和Azure云实例提供平滑的本机Arm环境的持续共同努力的一部分。请随时阅读更多关于此的信息:
https://linaro.org/windows-on-arm

.

推荐阅读
关注数
5758
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息