在代码相关地方修改代码:
if 'arch' in flag:return []# Note: keep combined names ("arch1+arch2") above single names, otherwise
# string replacement may not do the right thing
named_arches = collections.OrderedDict([('Kepler+Tesla', '3.7'),('Kepler', '3.5+PTX'),('Maxwell+Tegra', '5.3'),('Maxwell', '5.0;5.2+PTX'),('Pascal', '6.0;6.1+PTX'),('Volta', '7.0+PTX'),('Turing', '7.5+PTX'),('Ampere', '8.0;8.6+PTX'), # Added support for Ampere architectures('Ada', '8.9'),
])supported_arches = ['3.5', '3.7', '5.0', '5.2', '5.3', '6.0', '6.1', '6.2','7.0', '7.2', '7.5', '8.0', '8.6', '8,9']
valid_arch_strings = supported_arches + [s + "+PTX" for s in supported_arches]
- 在代码中定义了一系列被支持的CUDA架构,但“8.9”并不在
valid_arch_strings
中。因此,当代码尝试对“8.9”进行验证时,会引发ValueError
。 - 错误发生时,常常表明用户请求的未被支持的架构。因为在架构识别逻辑中,如果输入的架构不在
valid_arch_strings
列表中,就会抛出错误。 - 如果你的GPU支持CUDA架构,请将
TORCH_CUDA_ARCH_LIST
环境变量设置为受支持的架构(例如:“8.0”或“8.6”)。 - 如果8.9是不必要的,可以通过环境变量或代码中适当修正。
- 如果确实需要支持8.9架构,可以在代码中将其添加到
supported_arches
和valid_arch_strings
相应列表中。
又报错:error: command ':/usr/local/cuda-12.2/bin/nvcc' failed: No such file or directory: ':/usr/local/cuda-12.2/bin/nvcc'
解决步骤:
检查CUDA_HOME
环境变量设置: 确保环境变量 CUDA_HOME
正确设置。你可以在命令行中使用以下命令检查当前环境变量设置:
echo $CUDA_HOME
如果输出内容是 :/usr/local/cuda-12.2
,那表示 CUDA_HOME
设置不正确。
正确的设置应该去掉冒号,类似这样:
export CUDA_HOME=/usr/local/cuda-12.2
更新PATH
环境变量: 为了确保系统能够找到 nvcc
,可以将CUDA的bin目录添加到 PATH
环境变量中:
export PATH=$CUDA_HOME/bin:$PATH
修改构建脚本确保路径正确: 如果你的构建脚本中手动设置了CUDA路径,确保没有多余的字符,具体如下:
nvcc = os.path.join(CUDA_HOME, 'bin', 'nvcc') # 确保这里路径是正确的
重新加载配置: 如果在终端中设置了环境变量,确保在同一终端会话中运行,或者在你的 ~/.bashrc
或 ~/.bash_profile
文件中追加上述 export
命令,然后执行以下命令重新加载配置:
source ~/.bashrc
确认nvcc存在: 运行以下命令确认 nvcc
是否存在:
ls -l /usr/local/cuda-12.2/bin/nvcc
重启终端或系统: 如果以上步骤均未解决问题,可以尝试重启终端或系统,有时会因为环境变量未刷新而导致问题。