Tensorflow: illegal instruction (core dumped) 的解决方法记录

第二次碰到这个问题了,之前解决之后忘记记录了。凭借零星的记忆加上强大的Google终于“又”搞定了。避免下次又忘了,果断记下来。

环境

Items Version
Operation system Ubuntu 16.04
Python 3.6.1
Tensorflow 1.12.0
Hardware virtualization KVM

问题描述

import tensorflow时抛出如下错误:

Illegal instruction (core dumped)

解决方法讨论

关于问题的讨论在Github上有开issue #17441stackoverflow也有相关问题回答。

总结相关回答:新版本(version >= 1.6.0)的Tensorflow binary release是在avx指令环境下编译的。如果你的CPU不支持该类型指令,就不能使用新版本。

这样核心问题就是avx了。如果硬件不支持,解决办法很显然有以下几种:

  1. 降级Tensorflow版本,降到1.5或更低。不过会丢掉一些新版本的功能。
  2. 源码编译。老老实实从头开始。
  3. 换个CPU😂。

而我的问题稍不同,我是KVM虚拟机不支持avx,但是宿主机是支持的,那么事情就有转机了😀,无非是想办法改虚拟机配置啦。

支持avx

  1. 首先确定宿主机是否支持avx的,查看宿主机CPU架构
$ virsh capabilities 

可以看到宿主机的CPU架构为SandyBridge,并且该架构的<feature>是支持<feature name='avx2'/>

<capabilities>
  ...
    <cpu>
      <arch>x86_64</arch>
      <model>SandyBridge</model>
      <vendor>Intel</vendor>
      <topology sockets='1' cores='8' threads='2'/>
      <feature name='invpcid'/>
      <feature name='erms'/>
      <feature name='bmi2'/>
      <feature name='smep'/>
      <feature name='avx2'/>
      ...
    </cpu>
  ...
</capabilities>
  1. 指定虚拟机CPU架构
$ virsh edit $YOUR_VM_NAME

<domain>内增加<cpu>配置如下:

<domain type='kvm'>
  ...
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>SandyBridge</model>
  </cpu>
  ...
</domain>

其中,<model>填写步骤1中查到的CPU架构名称,如这里是SandyBridge

  1. 重启虚拟机&检查是否生效。

进入虚拟机,查看虚拟机CPU支持的指令。

$ cat /proc/cpuinfo | grep avx

出现如下结果,说明CPU已经支持avx指令。

cpuinfo.jpg

现在可以开始愉快的使用Tensorflow了。🤗


2021-6-5 日补充:
升级2.4.0之后,又双叒core dumped了,检查CPU的avx指令集是支持的。再次扒拉了一下issues #45744,2.4.0需要avx2指令集的支持,TF真是好棒棒嗷,这次环境的CPU不支持了,剩我留下了贫穷的泪水。

降级!降级!降级!tensorflow 2.3.1是OK的。

2021-7-13 补充
2.4.0的问题,可以升级2.4.1,因为官方发布是这么说的
Release 2.4.1 This release removes the AVX2 requirement from TF 2.4.0.
版本差别不大,赶紧升他鸭🦆。

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在 Ubuntu 上安装 TensorFlow 本指南将介绍如何在 Ubuntu 上安装 TensorFlow。虽...
    高山居士阅读 4,645评论 0 6
  • 与 TensorFlow 的初次相遇 https://jorditorres.org/wp-content/upl...
    布客飞龙阅读 3,962评论 2 89
  • 1. 介绍 首先让我们来看看TensorFlow! 但是在我们开始之前,我们先来看看Python API中的Ten...
    JasonJe阅读 11,796评论 1 32
  • 做了18年老师(啊!大家不会把我想像成两鬓斑白的大妈吧?),有时会思考教师这个职业。如果没有一些形而上的精神追求,...
    原卫华阅读 631评论 0 2
  • 她裹着大大的披肩窝在沙发里,喝着玫瑰花茶,看着书。书桌旁是一个架子,架子上是一排一排的藤筐。筐里装着干了的红衣主教...
    花闻铃阅读 347评论 6 5