AI智能摘要
想在ARM架构设备上成功编译TorchAudio却总是被依赖问题困扰?这份保姆级教程从环境配置到编译验证,手把手带你突破技术瓶颈。只需跟随文中清晰的构建步骤,你不仅能解决libsox、CUDA等关键依赖,还能获得在aarch64架构下完美运行的GPU加速音频处理能力。文末的完整验证脚本将确保你的安装万无一失,彻底告别编译失败。
— AI 生成的文章内容摘要

基础信息

TorchAudio 与 Torch 版本一致

PyTorch 编译教程请参考

构建步骤

拉取项目代码

git clone --recursive --branch v2.7.0 https://github.com/pytorch/audio torchaudio
cd torchaudio
sudo apt-get update && sudo apt-get install -y libsox-dev libimage-exiftool-perl libopus-dev libvpx-dev pkg-config

使用编译 PyTorch 的虚拟环境

source ../pytorch/.venv/bin/activate

构建

export USE_CUDNN=1
export CUDNN_INCLUDE_DIR=/usr/include
export CUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so
export USE_CUDA=1
export TORCH_CUDA_ARCH_LIST="8.7"
export CUDA_HOME=/usr/local/cuda
export CUDNN_HOME=/usr/lib/aarch64-linux-gnu
export PATH=$CUDA_HOME/bin:$PATH
export CPATH="/usr/include/aarch64-linux-gnu:$CPATH"
export LIBRARY_PATH="/usr/lib/aarch64-linux-gnu:$LIBRARY_PATH"

python3 setup.py bdist_wheel

注意:虽然包含了路径,但 CUDNN 总是无法被包含,目前不知道如何解决

-- USE_CUDNN is set to 0. Compiling without cuDNN support

whl 输出路径

./torchaudio/torchaudio-2.7.0a0+654fee8-cp312-cp312-linux_aarch64.whl

安装

uv pip install ./dist/torchaudio-2.7.0a0+654fee8-cp312-cp312-linux_aarch64.whl

验证测试

python -c "
import torch; import torchaudio; import torchaudio.transforms as T;
print(f'PyTorch version: {torch.__version__}'); 
print(f'TorchAudio version: {torchaudio.__version__}');
print(f'Available backends: {torchaudio.list_audio_backends()}');
try:
    from torchaudio.utils import ffmpeg_utils;
    print('FFmpeg build config:', ffmpeg_utils.get_build_config());
except ImportError:
    print('FFmpeg utils not available in this version.');
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu');
print(f'Using device: {device}');
try:
    melspec = T.MelSpectrogram(sample_rate=16000, n_mels=64).to(device);
    waveform = torch.randn(1, 16000).to(device);
    spec = melspec(waveform);
    print('Successfully ran MelSpectrogram on GPU!');
    print(f'Output shape: {spec.shape}');
except Exception as e:
    print(f'GPU operation failed: {e}')
"