Build libtorchaudio GPU extensions on ROCm via HIPIFY (torchvision-style)#17
Build libtorchaudio GPU extensions on ROCm via HIPIFY (torchvision-style)#17ethanwee1 wants to merge 3 commits into
Conversation
…yle) Mirror torchvision's setup.py approach: run hipify_python.hipify() over the libtorchaudio sources when building for ROCm and compile the generated .hip outputs, instead of relying solely on the torch CUDAExtension HIPIFY (which only processes listed source files and left torchaudio headers/symbols like cuda_runtime_api.h, cudaSetDevice and cub un-converted). HIPIFY cannot rewrite preprocessor guards, so the #ifdef USE_CUDA gates around the rnnt/forced_align GPU headers, macros.h, and Options::stream_ are widened to `#if defined(USE_CUDA) || defined(USE_ROCM)`. Reference: https://github.com/ROCm/vision/blob/release/0.27/setup.py
|
TheRock test build (Windows gfx110X-all) via ROCm/pytorch#3382: |
…io#16) Revert the temporary HIPIFY-based pin (ROCm/audio#17) back to the compat-shim port commit that passed TheRock Windows validation (28529085509). The HIPIFY setup.py approach still leaves CUDA headers unconverted; the cuda_compat.h port in ROCm/audio#16 is the validated path. The Windows cross-drive HIPIFY fix remains in torch/utils/cpp_extension.py (this PR); it is unrelated to the audio-side port strategy.
…yle) Mirror torchvision's setup.py approach: run hipify_python.hipify() over libtorchaudio CUDA sources and headers, then compile the generated .hip outputs. Fixes vs the first HIPIFY attempt (TheRock 28538325024): 1. Do not widen `#ifdef USE_CUDA` to `USE_ROCM` in headers — that pulled `cuda_fp16.h` into CPU `.cpp` compiles because PyTorch defines USE_ROCM globally on ROCm extension builds. Keep upstream USE_CUDA guards; pass `-DUSE_CUDA` on hipcc/nvcc only for GPU translation units. 2. Hipify with `os.path.realpath()` paths and depth-aware include globs so headers like `cuda_utils.h` are rewritten on the same inode Windows runners use when B: is a subst alias of the C: checkout (otherwise the compiler reads un-hipified headers from the underlying path). 3. Include `cuctc/` in the hipify scope. Reference: https://github.com/ROCm/vision/blob/release/0.27/setup.py Paired with ROCm/pytorch#3382 (torchaudio pin + Windows cross-drive HIPIFY fix in torch/utils/cpp_extension.py — that fix is in PyTorch, not here).
Update ethanwee1/audio ew/rocm-24803-hipify-gpu-ext to 0c7509ef with: - realpath-based hipify (Windows B:/C: alias) - reverted USE_ROCM header guard widening - -DUSE_CUDA on hipcc for GPU units only
|
HIPIFY v2 pushed (
ROCm/pytorch#3382 pin updated to this commit. |
…e rewritten hipify resolves angle-bracket includes against header_include_dirs. The sources include headers as <libtorchaudio/...> via the extension -I root (src/), but v2 passed src/libtorchaudio, so hipify looked for src/libtorchaudio/libtorchaudio/... , failed to resolve, and left #include <libtorchaudio/cuda_utils.h> un-rewritten -> compiled the original cuda_utils.h with cuda_runtime_api.h. Point header_include_dirs at src/ (csrc.parent) so the includes resolve and get rewritten to the hipified header paths.
|
HIPIFY v3 ( Test build (Windows gfx110X-all) via ROCm/pytorch#3382: https://github.com/ROCm/TheRock/actions/runs/28953516514 |
|
✅ SUCCESS — HIPIFY v3 build passed (Windows gfx110X-all): Produced |
Build libtorchaudio GPU extensions on ROCm via HIPIFY (torchvision-style)
Mirror torchvision's setup.py approach: run
hipify_python.hipify()over libtorchaudio CUDA sources and headers, then compile the generated.hipoutputs. No manualcuda_compat.hshim.Reference: https://github.com/ROCm/vision/blob/release/0.27/setup.py
Key fix (v3)
hipify resolves angle-bracket includes against
header_include_dirs. The sources include headers as<libtorchaudio/...>via the extension-Iroot (src/), soheader_include_dirsmust besrc/(notsrc/libtorchaudio). Earlier versions passedsrc/libtorchaudio, so hipify looked forsrc/libtorchaudio/libtorchaudio/cuda_utils.h, failed to resolve, and left#include <libtorchaudio/cuda_utils.h>un-rewritten — the compile then pulled in the originalcuda_utils.h(cuda_runtime_api.h not found). Pointingheader_include_dirsatsrc/makes hipify rewrite those includes to the hipified header paths.Also: keep upstream
#ifdef USE_CUDAguards (pass-DUSE_CUDAon hipcc for GPU TUs only), userealpathpaths for WindowssubstB:/C: runners, and includecuctc/in the hipify scope.Validation
Windows gfx110X-all build passed: https://github.com/ROCm/TheRock/actions/runs/28953516514 — produced
torchaudio-2.11.0.1+devrocm...-cp312-cp312-win_amd64.whl.Paired with ROCm/pytorch#3382 (torchaudio pin + Windows cross-drive HIPIFY fix in
torch/utils/cpp_extension.py— that fix is in PyTorch, not here).