Commit 09c931d
[ROCm] Fix MIOpen CTC loss crash on Windows (pytorch#179264)
<h2>Fix MIOpen CTC loss access violation on Windows discrete GPUs</h2>
<h3>Problem</h3>
<p>A failing unit test on Windows started showing a couple weeks ago and a missing <code>#include</code> was added in [](pytorch#178284), but CI on TheRock kept failing. The fix was tested on gfx1151 (APU), where the test passed, but CI showed failures on gfx1100. </p>
<p><code>test_CTCLoss_no_batch_dim</code> (and any code path hitting <code>miopen_ctc_loss</code>) crashes with a fatal access violation on Windows systems with discrete AMD GPUs:</p>
<pre><code>Windows fatal exception: access violation
Exception Code: 0xC0000005
#0 miopen::CTCLossDescriptor::GetCTCLossWorkspaceSize (MIOpen.dll+0x14fde4)
#1 miopenGetCTCLossWorkspaceSize (MIOpen.dll+0x150912)
#2 at::native::miopen_ctc_loss (torch_hip.dll)
</code></pre>
<h3>Root Cause</h3>
<p><code>miopenGetCTCLossWorkspaceSize</code> and <code>miopenCTCLoss</code> read the <code>labels</code>, <code>label_lengths</code>, and <code>input_lengths</code> arrays <strong>on the host side</strong> to plan the computation and calculate workspace requirements. The existing code copies these arrays to GPU memory and passes device pointers:</p>
<pre><code>Tensor labels_gpu = targets_t.to(Device(at::kCUDA), at::kInt);
// ... hipMemcpy to GPU ...
MIOPEN_CHECK(miopenGetCTCLossWorkspaceSize(...,
labels_gpu.data_ptr<int>(), // device pointer
label_lengths_gpu.data_ptr<int>(), // device pointer
input_lengths_gpu.data_ptr<int>() // device pointer
));
</code></pre>
<p>This works on:</p>
<ul>
<li><strong>Linux</strong> — HSA (Heterogeneous System Architecture) maps GPU allocations into the process virtual address space, making device pointers host-readable</li>
<li><strong>Windows APUs</strong> — CPU and iGPU share system RAM, so device pointers point to host-accessible memory</li>
</ul>
<p>This crashes on:</p>
<ul>
<li><strong>Windows dGPUs</strong> — GPU has dedicated VRAM across PCIe; device pointers are opaque handles that cannot be dereferenced from host code</li>
</ul>
<h3>Verification</h3>
<p>Tested on gfx1201:</p>
<table border="1" cellpadding="6" cellspacing="0">
<tr><th>Check</th><th>Result</th></tr>
<tr><td><code>hipDeviceAttributeIntegrated</code></td><td><code>0</code> (discrete GPU)</td></tr>
<tr><td><code>hipDeviceAttributeCanUseHostPointerForRegisteredMem</code></td><td><code>0</code></td></tr>
<tr><td><code>hipDeviceAttributeManagedMemory</code></td><td><code>0x7FFFFFFF</code> (unsupported)</td></tr>
<tr><td><code>hipDeviceAttributeUnifiedAddressing</code></td><td><code>0x7FFFFFFF</code> (unsupported)</td></tr>
<tr><td>Host read of <code>hipMalloc</code> pointer via <code>ctypes</code></td><td>Access violation</td></tr>
<tr><td>CTC loss with CPU pointers</td><td>Pass (forward + backward)</td></tr>
</table>
<h3>Fix</h3>
<p>Use host pointers since this is what MIOpen expects should be used.</p>
<h3>Testing</h3>
<p>Run all existing CTCLoss unit tests.</p>
Pull Request resolved: pytorch#179264
Approved by: https://github.com/jeffdaily
Co-authored-by: Jeff Daily <jeff.daily@amd.com>1 parent 0320cc5 commit 09c931d
1 file changed
Lines changed: 7 additions & 26 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
206 | 206 | | |
207 | 207 | | |
208 | 208 | | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
| 209 | + | |
229 | 210 | | |
230 | 211 | | |
231 | 212 | | |
232 | 213 | | |
233 | 214 | | |
234 | 215 | | |
235 | | - | |
236 | | - | |
237 | | - | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
238 | 219 | | |
239 | 220 | | |
240 | 221 | | |
| |||
245 | 226 | | |
246 | 227 | | |
247 | 228 | | |
248 | | - | |
249 | | - | |
250 | | - | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
251 | 232 | | |
252 | 233 | | |
253 | 234 | | |
| |||
0 commit comments