如何使用 Ubuntu 20.04 64 位在 VirtualBox 6.1.16 中启用 AVX / AVX2?

Posted

技术标签:

【中文标题】如何使用 Ubuntu 20.04 64 位在 VirtualBox 6.1.16 中启用 AVX / AVX2?【英文标题】:How to enable AVX / AVX2 in VirtualBox 6.1.16 with Ubuntu 20.04 64bit? 【发布时间】:2021-01-18 18:56:39 【问题描述】:

TL;DR:

通过 Python 导入时,Tensorflow 1.15 在我的虚拟机上崩溃(错误消息为 Illegal instruction (core dumped)),这很可能是由于禁用了 AVX 和 AVX2。 我的主机(Windows 10 64 位)具有 AVX 和 AVX2(使用 Cygwin 验证,请参阅下面的详细信息)[CPU 是 Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz ] 在客户机上(使用 VirtualBox 6.1.16 的 Ubuntu 20.04 64 位,18.04 也是如此),缺少 AVX 和 AVX2。 根据现有线程的建议,我在主机上运行了 VBoxManage setextradata "Ubuntu20" VBoxInternal/CPUM/IsaExts/AVX 1VBoxManage setextradata "Ubuntu20" VBoxInternal/CPUM/IsaExts/AVX2 1 并重新启动了客户机 - 没有任何变化(客户机的名称是 Ubuntu20)。

有什么建议吗?

更多详情:

使用 Cygwin 在主机上输出 cat /proc/cpuinfo - 它在 avx2 中有 avx:

.....
processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
stepping        : 9
cpu MHz         : 3600.000
cache size      : 256 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts
 acpi mmx fxsr sse sse2 ss ht tm pbe pni dtes64 est tm2 ssse3 fma cx16 xtpr pdcm sse4_1 sse4_2 movbe 
popcnt aes xsave osxsave avx f16c rdrand hypervisor lahf_lm ida xsaveopt pln pts dtherm fsgsbase 
tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt
TLB size        : 0 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

客户机上cat /proc/cpuinfo 的输出 - 缺少 avx 和 avx2:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 158
model name  : Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
stepping    : 9
microcode   : 0xffffffff
cpu MHz     : 3599.996
cache size  : 8192 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 22
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx 
fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid 
tsc_known_freq pni ssse3 pcid sse4_1 sse4_2 hypervisor lahf_lm invpcid_single pti fsgsbase invpcid 
md_clear flush_l1d arch_capabilities
bugs        : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips    : 7199.99
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

【问题讨论】:

检查您的 virtualbox 配置设置,了解 AVX 等 CPU 功能的传递。不幸的是,一些虚拟机默认不这样做,可能是为了在没有 AVX 的主机上启用挂起 -> 恢复。 我认为问题是,这些设置到底是什么? OP 似乎已尝试使用 setextradata 命令来执行此操作。 哦,我明白了。也许命令行已经改变,IDK。尝试使用管理 GUI:如果您可以在其中找到 AVX 的 guest-CPU 选项,它应该可以工作。 我在整个 GUI 中寻找这样的设置,但没有找到任何东西。我使用了setextradata(写在 tl;dr 部分),但没有帮助,AVX 和 AVX2 仍然不受支持。这在执行cat /proc/cpuinfo 和查看日志时都可见,这表明读取了我设置为 1 的两个“额外数据”值,而稍后仍显示 AVX 和 AVX2 的值 0 (1),这意味着它在来宾上被禁用,同时受到主机的支持。 如果你使用的是windows,尤其是wsl2,注意hyper-v和axv是互斥的。forums.virtualbox.org/viewtopic.php?f=25&t=99390 【参考方案1】:

我遇到了类似的问题。我的 windows CPU 启用了正确的标志,但导入 tensorflow 失败,在我的 ubuntu20.04 VM 上出现非法指令。如上所述,我确认 hypervisorlaunchtype 设置为关闭。问题是在 VirtualBox Manager 安装过程中出现了问题。所以,我卸载了它,然后重新安装了它。我第一次这样做时显示了一些错误,所以我再次重复,这次我得到了一个干净的安装,没有任何错误。我确认我的 ubuntu20.04 虚拟机现在按预期显示正确的 CPU 标志。我仍然需要卸载/重新安装 tensorflow 和 numpy 才能使其正常工作。如果其他人觉得有用,请在此处添加。

【讨论】:

【参考方案2】:

正如@George-Zheng 所提到的,如果您看到 Turtle 图标,则说明您已启用 Hyper-V。遵循link he provided 上的建议可以解决此问题,您会注意到这一点,因为 Turtle 现在变成了带有 V 的芯片。

总结说明:

    以管理员身份在 Windows 主机中打开命令提示符。

    找到命令提示符图标并右键单击。选择以管理员身份运行。

    禁用 Hypervisor 午餐

    bcdedit /set hypervisorlaunchtype off

    禁用 Microsoft Hyper-V

    DISM /Online /Disable-Feature:Microsoft-Hyper-V

    快速关机 shutdwn -s -t 2

    等待几秒钟再打开。

如果问题仍然存在,请再坚持一两次。第二次为我工作。

【讨论】:

以上是关于如何使用 Ubuntu 20.04 64 位在 VirtualBox 6.1.16 中启用 AVX / AVX2?的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 20.04 编译openjdk8

ubuntu 20.04 编译openjdk8

ubuntu 20.04 编译openjdk8

Ubuntu20.04 如何开启root账户登陆

如何在线将Ubuntu 18.04升级到Ubuntu 20.04

Ubuntu20.04 如何更新国内源