机器学习PAI deeprec的docker 在mac M1上面运行报错: qemu: uncaught target signal 4 (Illegal instruction) - core dumped Illegal instruction
这有什么解决办法吗?
这个错误是因为 Docker 镜像使用的是 x86 架构的 CPU,而您的 Mac M1 是 ARM 架构,所以无法运行该镜像。解决方法主要有两种:
替换为适用于 ARM 架构的镜像:可以搜索适用于 ARM 架构的 deeprec docker 镜像,或者使用 Dockerfile 自行构建 ARM 架构镜像。
安装 x86 架构模拟器:在 Mac M1 上安装 x86 架构的模拟器,例如 Rosetta 2,然后在模拟器中运行 x86 架构的 Docker 环境。具体安装方法可以参考苹果官方的文档:https://support.apple.com/zh-cn/HT211861
在使用第二种方法时,性能可能会有所下降。建议仔细评估自己的需求和情况,选择合适的解决方案。
这个错误提示表明,您的 Docker 镜像在 Mac M1 上运行时出现了不兼容的指令。
这通常是由于 Docker 镜像为 x86 架构,而 M1 Mac 采用的是 ARM 架构所导致的。为了解决该问题,您可以尝试以下两种方法:
使用 --platform
参数重新拉取适用于 M1 Mac 的 Docker 镜像。例如:
docker pull --platform linux/arm64v8 tensorflow/serving
这将会拉取适用于 Linux ARM64v8 架构的 TensorFlow Serving Docker 镜像。您可以将 tensorflow/serving
替换为您需要的 PAI deeprec 镜像名称。
运行 Rosetta 2 模拟器,并在其中运行 x86 架构的 Docker 镜像。Rosetta 2 是 Mac M1 上一个用于模拟 x86 架构的工具,它可以让那些没有更新为 ARM 架构的软件在 M1 Mac 上运行。您可以通过以下命令来启动 Rosetta 2 模拟器:
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
安装完毕后,您可以在终端中使用 arch -x86_64
命令来开启一个 x86 架构的终端,并在其中运行 Docker 镜像:
arch -x86_64 /bin/bash
docker run ...
对于在 Mac M1 上运行的 Docker 容器,可能会遇到 QEMU 报错的问题。这是因为 Mac M1 使用的是 ARM 架构,而 QEMU 不支持 ARM 架构的虚拟化,导致无法正常运行。为了解决这个问题,您可以尝试以下两种方法:
使用 Rosetta 2 运行 Docker:Rosetta 2 是 Mac M1 上的一个翻译器,可以将 x86 架构的应用程序翻译为 ARM 架构。您可以在终端中运行以下命令,启动 Rosetta 2: softwareupdate --install-rosetta
在启动 Rosetta 2 后,您可以使用 Docker Desktop for Mac M1 版本来运行 DeepRec 的 Docker 容器。
使用 ARM 架构的 Docker 镜像:如果您想使用原生的 ARM 架构的 Docker 镜像来运行 DeepRec,可以尝试使用 Docker Hub 上提供的 ARM 架构的镜像,例如:
docker pull arm64v8/debian
您可以根据 DeepRec 的需要,构建一个适用于 ARM 架构的 Docker 镜像,并在 Mac M1 上运行。
需要注意的是,以上方法可能会因 DeepRec 版本和环境配置的不同而有所差异。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。