{"record":{"id":"321c83515f03f303","repo":"tracel-ai/burn","slug":"todo-cubecl-backend-does-not-yet-support-adaptiv","errorCode":null,"errorMessage":"todo!(\"CubeCL backend does not yet support adaptive_avg_pool3d.\")","messagePattern":"todo!\\(\"CubeCL backend does not yet support adaptive_avg_pool3d\\.\"\\)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-cubecl/src/ops/module.rs","lineNumber":296,"sourceCode":"            padding,\n            dilation,\n            ceil_mode,\n        ))\n    }\n\n    fn adaptive_avg_pool2d(x: FloatTensor<Self>, output_size: [usize; 2]) -> FloatTensor<Self> {\n        kernel::pool::adaptive_avg_pool2d(x, output_size)\n    }\n\n    fn adaptive_avg_pool2d_backward(\n        x: FloatTensor<Self>,\n        grad: FloatTensor<Self>,\n    ) -> FloatTensor<Self> {\n        kernel::pool::adaptive_avg_pool2d_backward(x, grad)\n    }\n\n    fn adaptive_avg_pool3d(_x: FloatTensor<Self>, _output_size: [usize; 3]) -> FloatTensor<Self> {\n        todo!(\"CubeCL backend does not yet support adaptive_avg_pool3d.\")\n    }\n\n    fn adaptive_avg_pool3d_backward(\n        _x: FloatTensor<Self>,\n        _grad: FloatTensor<Self>,\n    ) -> FloatTensor<Self> {\n        todo!(\"CubeCL backend does not yet support adaptive_avg_pool3d_backward.\")\n    }\n\n    fn interpolate(\n        x: FloatTensor<Self>,\n        output_size: [usize; 2],\n        options: InterpolateOptions,\n    ) -> FloatTensor<Self> {\n        kernel::interpolate::interpolate(x, output_size, options, Default::default()).unwrap()\n    }\n\n    fn interpolate_backward(","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-cubecl/src/ops/module.rs#L278-L314","documentation":"The CubeCL backend's `Backend` trait impl stubs out `adaptive_avg_pool3d` with `todo!` — 3D adaptive average pooling has no GPU/CubeCL kernel yet, so any call panics immediately. Only adaptive_avg_pool2d is implemented.","triggerScenarios":"Calling `Tensor::adaptive_avg_pool3d` (or a module/layer using it, e.g. 3D adaptive pooling heads in vision models) while running on the CubeCL (WGPU/CUDA) backend.","commonSituations":"Running 3D segmentation/video models (e.g. adaptive-pool heads in spatial pyramid pooling 3D) on GPU; porting a 2D model to 3D and hitting the missing op; wgpu/CUDA users converting models containing AdaptiveAvgPool3d from PyTorch.","solutions":["Replace AdaptiveAvgPool3d with a fixed-size avg_pool3d (compute kernel/stride manually per output size).","Dequantize—rather, run the 3D pooling layer on the NdArray (CPU) backend and the rest on GPU, combining results.","Implement the op via average_pool3d composition (multiple pooled crops + interpolation).","Check upstream burn for a recent implementation or open an issue."],"exampleFix":"// before\nlet out = x.adaptive_avg_pool3d([4, 4, 4]); // panics on CubeCL\n// after\nlet out = x.avg_pool3d([2, 2, 2], [2, 2, 2], [0, 0, 0], false); // fixed pooling equivalent","handlingStrategy":"fallback","validationCode":"fn supports_adaptive_pool3d<B: Backend>() -> bool {\n    // CubeCL does not implement adaptive_avg_pool3d; only use on backends that do\n    std::any::type_name::<B>().contains(\"NdArray\")\n}","typeGuard":null,"tryCatchPattern":"// panic-based todo!, cannot be caught; pre-check backend instead\nif !supports_adaptive_pool3d::<B>() {\n    let out = x.avg_pool3d(kernel, stride, pad, false); // equivalent fixed pooling\n}","preventionTips":["Replace AdaptiveAvgPool3d with equivalent fixed avg_pool3d when targeting GPU backends.","Keep 3D pooling layers on CPU backend if architecture allows.","Search burn issues for the op before porting 3D models.","Add a startup feature-check for ops your model needs."],"tags":["burn","cubecl","pooling3d","unimplemented"],"backgroundTag":"unimplemented-op","analyzedSha":"d16f7ba2ed0d41408189384044cc886fb4c8f957","analyzedAt":"2026-09-05T13:19:14.260Z","contentChangedAt":"2026-09-05T13:19:14.260Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}