这个挺脑溢血的,首先是fairseq官方仓库的Readme中没有明确指定apex库与fairseq库安装的相对位置,其次是fairseq库在引用apex的FusedLayerNorm的时候,相对路径写错了。
举个例子,如果apex库安装在fairseq库下,那么根据报错信息里涉及到的layer_norm.py文件(位置是在./fairseq/modules/layer_norm.py),可以看到图中标黄的这一行,这个路径找不到FusedLayerNorm模块:
实际上是apex.apex.normalization,更改后就能找到了。
ps:如果apex库没有安装在fairseq目录下,那么只需要同样更改layer_norm.py文件里对FusedLayerNorm的导入,让fairseq能够对其成功引用,就好了。
我之前看别的解决方法,还以为是编译torch的cuda版本(我的版本是torch2.3.0+cu118)与服务器配置的cuda版本不一致(cuda11.1)导致的,后来安装了对应的cuda又配置了环境变量,版本什么的都对应好了,结果还是报错,最后一看,是这个包导入问题T^T