Skip to content

Build libtorchaudio GPU extensions on ROCm via HIPIFY (torchvision-style)#17

Draft
ethanwee1 wants to merge 2 commits into
ROCm:release/2.11.0.1from
ethanwee1:ew/rocm-24803-hipify-gpu-ext
Draft

Build libtorchaudio GPU extensions on ROCm via HIPIFY (torchvision-style)#17
ethanwee1 wants to merge 2 commits into
ROCm:release/2.11.0.1from
ethanwee1:ew/rocm-24803-hipify-gpu-ext

Conversation

@ethanwee1

@ethanwee1 ethanwee1 commented Jul 1, 2026

Copy link
Copy Markdown

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 .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).

…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
ethanwee1 added a commit to ROCm/pytorch that referenced this pull request Jul 1, 2026
@ethanwee1

Copy link
Copy Markdown
Author

TheRock test build (Windows gfx110X-all) via ROCm/pytorch#3382:
https://github.com/ROCm/TheRock/actions/runs/28538325024

ethanwee1 added a commit to ROCm/pytorch that referenced this pull request Jul 6, 2026
…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.
@ethanwee1

Copy link
Copy Markdown
Author

Closing in favor of #16 (cuda_compat.h compat shim). The torchvision-style HIPIFY in extension.py still leaves headers like cuda_utils.h and macros.h with CUDA-only includes; TheRock run 28538325024 failed on those. Validated Windows build: 28529085509 with #16.

…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).
ethanwee1 added a commit to ROCm/pytorch that referenced this pull request Jul 6, 2026
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
@ethanwee1 ethanwee1 reopened this Jul 6, 2026
@ethanwee1

Copy link
Copy Markdown
Author

HIPIFY v2 pushed (0c7509ef):

  • Reverted USE_CUDA || USE_ROCM header guard widening (was pulling cuda_fp16.h into CPU compiles).
  • Hipify via realpath() paths + nested globs + header_include_dirs (fixes cuda_utils.h still showing cuda_runtime_api.h on Windows B:/C: subst).
  • Pass -DUSE_CUDA on hipcc only (GPU TUs); upstream #ifndef USE_ROCM shuffle branches unchanged.

ROCm/pytorch#3382 pin updated to this commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant