在Docker中运行Spleeter时tensorflow==2.3.0版本匹配错误如何解决?
问题根因
- 你使用的M1芯片为ARM64架构,TensorFlow 2.3.0官方未发布适配ARM64架构的预编译安装包,默认拉取的ARM64版Python基础镜像无法找到对应版本的依赖包
- 升级pip后触发TensorFlow源码编译流程,因此构建时间极长
- 你的Dockerfile存在冗余操作:
requirements.txt中已声明spleeter依赖,后续又单独执行RUN pip3 install spleeter,重复安装拉长构建时间
可行解决方案
方案1:强制使用x86_64架构构建(最快,无需修改配置文件)
构建镜像时指定平台参数,Docker会通过Rosetta2转译运行x86_64架构镜像,可直接使用预编译的TensorFlow 2.3.0包,无需编译:
docker build --platform linux/amd64 -t 你的镜像名称 .
方案2:构建原生ARM64架构镜像
适配M1架构的同时避免源码编译:
- 升级spleeter版本到2.4.0及以上,该版本支持适配ARM架构的高版本TensorFlow
- 修改requirements.txt,将spleeter依赖替换为
spleeter==2.4.0 - 删掉Dockerfile中冗余的
RUN pip3 install spleeter行 - 在安装requirements.txt之前添加一行命令安装ARM版TensorFlow:
RUN pip3 install tensorflow-macos==2.9.0 tensorflow-metal==0.5.0
- 正常执行docker build即可,所有依赖均为预编译包,构建速度快
方案3:使用spleeter预构建镜像作为基础镜像
直接使用已经配置好所有spleeter依赖的镜像作为基础,无需自行安装音频、机器学习相关依赖,构建速度最快:
将Dockerfile第一行的基础镜像替换为:
FROM deezer/spleeter:2stems
后续仅需添加你的Flask相关依赖、业务代码即可。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

