You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

同CPU型号不同规格EC2实例编译的PyTorch Wheel跨实例运行触发非法指令(SIGILL)的问题排查与解决请求

同CPU型号不同规格EC2实例编译的PyTorch Wheel跨实例运行触发非法指令(SIGILL)的问题排查与解决请求

问题背景

我最近在基于PyTorch v2.6.0版本的官方CI脚本.ci/manywheel/build_common.sh从源码编译PyTorch Wheel包,本来想靠更高规格的EC2实例加速编译,结果碰到了离谱的跨实例兼容性问题:

  • 先在g5.xlarge实例上编译,用pip安装后本地测试一切正常;
  • 换到g5.12xlarge实例上用完全相同的脚本编译,在该实例本地跑测试也没毛病;
  • 但把g5.12xlarge编译出的Wheel装回g5.xlarge实例时,执行import torch直接触发崩溃:Illegal instruction (core dumped)

错误现象

在g5.xlarge上安装g5.12xlarge编译的Wheel后,Python交互环境的报错如下:

Python 3.11.11 (main, Nov 13 2025, 17:12:08) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Illegal instruction (core dumped)

用gdb附加调试后,得到的错误栈信息:

Program received signal SIGILL, Illegal instruction.
0x00007fffe7b74d69 in ska::detailv3::sherwood_v3_table<std::pair<c10::OperatorName, c10::OperatorHandle>, c10::OperatorName, std::hash<c10::OperatorName>, ska::detailv3::KeyOrValueHasher<c10::OperatorName, std::pair<c10::OperatorName, c10::OperatorHandle>, std::hash<c10::OperatorName> >, std::equal_to<c10::OperatorName>, ska::detailv3::KeyOrValueEquality<c10::OperatorName, std::pair<c10::OperatorName, c10::OperatorHandle>, std::equal_to<c10::OperatorName> >, std::allocator<std::pair<c10::OperatorName, c10::OperatorHandle> >, std::allocator<ska::detailv3::sherwood_v3_entry<std::pair<c10::OperatorName, c10::OperatorHandle> > > >::rehash(unsigned long) ()
 from /home/prod/.local/lib/python3.11/site-packages/torch/lib/libtorch_cpu.so

已完成的排查工作

1. 确认CPU型号一致性

我特意核对了两个实例的CPU硬件信息,确认它们是完全同型号的AMD处理器:

vendor_id : AuthenticAMD
cpu family : 23
model : 49
model name : AMD EPYC 7R32
stepping : 0
microcode : 0x830107f
cpu MHz : 3299.275
cache size : 512 KB

2. 定位崩溃的具体指令

通过gdb查看崩溃瞬间的机器指令,发现是vcvtusi2sdq这条指令触发了非法指令错误:

(gdb) x/i $pc
=> 0x7fffe7b74d69 <_ZN3ska8detail...EEE6rehashEm+25>: vcvtusi2sdq 0x18(%rdi),%xmm1,%xmm0

(gdb) disas/r $pc, $pc+1
Dump of assembler code from 0x7fffe7b74d69 to 0x7fffe7b74d6a:
=> 0x00007fffe7b74d69 <_ZN3ska8detailv317sherwood_v3_tableISt4pairIN3c1012OperatorNameENS3_14OperatorHandleEES4_St4hashIS4_ENS0_16KeyOrValueHasherIS4_S6_S8_EESt8equal_toIS4_ENS0_18KeyOrValueEqualityIS4_S6_SC_EESaIS6_ESaINS0_17sherwood_v3_entryIS6_EEEE6rehashEm+25>:  62 f1 f7 08 7b 47 03  vcvtusi2sdq 0x18(%rdi),%xmm1,%xmm0
End of assembler dump.

求助需求

现在我彻底懵了——明明是同型号的CPU,为什么不同规格的实例上编译出的Wheel会出现指令集不兼容的情况?有没有大佬能帮我分析下背后的原因,以及告诉我该怎么调整g5.12xlarge上的编译配置,让产出的Wheel能在g5.xlarge实例上正常运行?

火山引擎 最新活动