TensorFlow运行报错illegal instruction (core dumped)

搜索了相关资料,导致该错误可能是没有avx指令集,或者是CPU不支持avx指令集

因为我本地是虚拟机上部署的k8s集群,有可能CPU虚拟化没有做指令集的直通,那么我尝试修改KVM虚拟机配置

首先我们关闭虚拟机,然后使用virsh命令对虚拟机配置进行修改

virsh edit k8s-node2

找到

  <cpu mode='custom' match='exact' check='none'>
    <model fallback='forbid'>qemu64</model>
    <topology sockets='8' cores='1' threads='1'/>
  </cpu>

改为

  <cpu mode='custom' match='exact' check='full'>
    <model fallback='forbid'>IvyBridge-IBRS</model>
    <vendor>Intel</vendor>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='pdcm'/>
    <feature policy='require' name='pcid'/>
    <feature policy='require' name='hypervisor'/>
    <feature policy='require' name='arat'/>
    <feature policy='require' name='tsc_adjust'/>
    <feature policy='require' name='umip'/>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='stibp'/>
    <feature policy='require' name='arch-capabilities'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='require' name='xsaveopt'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='ibpb'/>
    <feature policy='require' name='ibrs'/>
    <feature policy='require' name='amd-stibp'/>
    <feature policy='require' name='amd-ssbd'/>
    <feature policy='require' name='skip-l1dfl-vmentry'/>
    <feature policy='require' name='pschange-mc-no'/>
  </cpu>

然后我们再启动虚拟机通过以下命令来查看

cat /proc/cpuinfo #或者lscpu

微信截图_20220830104452.png

可以看到已经包含avx指令集了

再次运行tensorflow,发现已经没有illegal instruction (core dumped)报错,可以正常运行

如果CPU确实不支持avx指令集,那么只能尝试下安装低版本的tensorflow进行测试

大于1.6的Tensorflow binary release是在avx指令环境下编译的。如果你的CPU不支持该类型指令,就不能使用超过这个版本,所以推荐降级Tensorflow版本到1.5或更低,再或者可以自行编译tensorflow源码。

另外kvm CPU那部分还可以尝试修改为

<cpu mode='host-model' check='partial'/>

这样的配置还没测试过,有时间再测下。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/878.html