M1架构使得一些软件包很难使用,但到目前为止,除了TensorFlow之外,所有软件包都已经解决了这个问题。
为了能够在M1(或M2)芯片上使用tensorflow,您需要使用tensorflow-macos而不是tensorflow。
在我的例子中,我有一个使用pipenv进行依赖管理的工作流。这样,无论系统如何,一切都可以正常工作。然而,对于tensorflow来说,这是一个问题,因为它不能安装在M1上,而tensorflow-macOS不能安装在其他架构上。
因此,当我锁定我的Pipfile,并试图运行一个CI作业,它崩溃,因为我使用的mac版本,这是现在锁定,但不工作在CI。
现在,如果一些需要tensorflow的包不是其他包的依赖项,这就不是什么大问题了,这意味着tensorflow不再位于这些包的Pipfile中。
有人知道该怎么处理吗?
理想情况下,如果tensorflow在某个地方被使用,你会希望在m1上做一些别名来使用tensorflow-macos,但是我不认为这是可能的。
Docker在某些情况下是一个解决方案(但在m1和tensorflow上工作得不是很好),但如果repo与其他本地进程(如kubernetes、环境变量等)交互太多,则会再次出现问题。
假设您有以下Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
tensorflow = "==2.7.*"
[requires]
python_version = "3.9"
在M1上锁定/安装这个将不起作用,所以你必须将它更改为tensorflow-macos。但是,这在其他机器上不起作用...
1条答案
按热度按时间ogq8wdun1#
下面的设置对我很有效。我保存了两个不同的Pipfile
Pipfile_x86
具有Pipfile_Mac_ARM
具有以及同样两个
Pipfile_x86.lock
和Pipfile_Mac_ARM.lock
。然后创建指向
x86
版本的符号链接:并将其提交到存储库,因为大多数人(和CI)都使用
x86
。在Mac上,我将符号链接到
ARM
版本,并忽略Git中的更改,这样不同的符号链接就不会被暂存:只需记住向两个Pipfile添加额外的包,并让
.lock
文件在通过pipenv update
对两个版本进行更改时生成。