搜索了相关资料,导致该错误可能是没有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
可以看到已经包含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'/>
这样的配置还没测试过,有时间再测下。