tf.raw.ops.ResourceSparseApplyAdadelta aborts after reporting InvalidArgument on malformed sparse gradient input
Issue type
Bug
Have you reproduced the bug with TensorFlow Nightly?
No
Source
source
TensorFlow version
tf 2.21.0
Custom code
Yes
OS platform and distribution
Ubuntu 24.04.3 LTS x86_64
Mobile device
No response
Python version
3.10.20
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
4 x NVIDIA GeForce RTX 2080 Ti, 11264 MiB each
Current behavior?
Current behavior
I verified this issue locally by running the original reproducer in the tf_test conda environment.
tf.raw_ops.ResourceSparseApplyAdadelta does not fail cleanly on malformed sparse gradient input. TensorFlow first reports a normal argument validation failure:
INVALID_ARGUMENT: var and grad must match in dimension 1
but then continues into a fatal internal CHECK failure and aborts the entire process:
F0000 tensor_shape.cc:362] Check failed: d < dims() (1 vs. 1)
The process terminates with Aborted (core dumped) / exit code 134.
This is a strong robustness bug because invalid user input should produce a recoverable exception only. After detecting an InvalidArgument, TensorFlow should not continue into an internal CHECK abort path.
Expected behavior
tf.raw_ops.ResourceSparseApplyAdadelta should stop after reporting the invalid input and return a regular TensorFlow exception such as InvalidArgumentError, instead of aborting the process.
Minimal reproducer
import tensorflow as tf
with tf.device('/GPU:0'):
var = tf.Variable(tf.random.uniform([10, 10], dtype=tf.float32))
accum = tf.Variable(tf.zeros([10, 10], dtype=tf.float32))
accum_update = tf.Variable(tf.zeros([10, 10], dtype=tf.float32))
lr = tf.constant(0.1, dtype=tf.float32)
rho = tf.constant(0.95, dtype=tf.float32)
epsilon = tf.constant(1e-7, dtype=tf.float32)
grad = tf.constant([[0.1], [0.2], [0.3]], dtype=tf.float32) # shape [3, 1]
indices = tf.constant([0, 2, 4], dtype=tf.int32)
tf.raw_ops.ResourceSparseApplyAdadelta(
var=var.handle,
accum=accum.handle,
accum_update=accum_update.handle,
lr=lr,
rho=rho,
epsilon=epsilon,
grad=grad,
indices=indices,
use_locking=False,
)
### Standalone code to reproduce the issue
```shell
Environment
Ubuntu 24.04.3 LTS x86_64
Python 3.10
TensorFlow 2.21.0
GPU-enabled TensorFlow runtime
Reproduced in local conda environment: tf_test
conda run --no-capture-output -n tf_test python repro.py
Relevant log output
(tf_test) user@user-Standard-PC-Q35-ICH9-2009:/home/lhj$ python /home/lhj/callChainBuild/src_tensorflow/output_tensorflow/targeted_mutation/generated_code/tf/tf_raw_ops_ResourceSparseApplyAdadelta/0.py
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1774273340.819282 3738650 port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
I0000 00:00:1774273340.974487 3738650 cpu_feature_guard.cc:227] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1774273342.461486 3738650 port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
I0000 00:00:1774273343.513755 3738650 gpu_device.cc:2043] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 665 MB memory: -> device: 0, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5
I0000 00:00:1774273343.515447 3738650 gpu_device.cc:2043] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 9450 MB memory: -> device: 1, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:02:00.0, compute capability: 7.5
I0000 00:00:1774273343.516891 3738650 gpu_device.cc:2043] Created device /job:localhost/replica:0/task:0/device:GPU:2 with 9450 MB memory: -> device: 2, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:03:00.0, compute capability: 7.5
I0000 00:00:1774273343.518355 3738650 gpu_device.cc:2043] Created device /job:localhost/replica:0/task:0/device:GPU:3 with 9450 MB memory: -> device: 3, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:04:00.0, compute capability: 7.5
W0000 00:00:1774273343.568847 3738650 local_rendezvous.cc:412] Local rendezvous is aborting with status: INVALID_ARGUMENT: var and grad must match in dimension 1
Error with standard inputs: {{function_node __wrapped__ResourceSparseApplyAdadelta_device_/job:localhost/replica:0/task:0/device:GPU:0}} var and grad must match in dimension 1 [Op:ResourceSparseApplyAdadelta] name:
F0000 00:00:1774273343.569195 3738650 tensor_shape.cc:362] Check failed: d < dims() (1 vs. 1)
*** Check failure stack trace: ***
@ 0x7d59a831d314 absl::lts_20250814::log_internal::LogMessage::SendToLog()
@ 0x7d59a831d296 absl::lts_20250814::log_internal::LogMessage::Flush()
@ 0x7d59a7f4915c tensorflow::TensorShapeBase<>::dim_size()
@ 0x7d598c64f459 tensorflow::SparseApplyAdadeltaOp<>::DoCompute()
@ 0x7d598c64f22a tensorflow::SparseApplyAdadeltaOp<>::Compute()
@ 0x7d59a83876bc tensorflow::BaseGPUDevice::Compute()
@ 0x7d59a5e0e778 tensorflow::(anonymous namespace)::SingleThreadedExecutorImpl::Run()
@ 0x7d59a5ddb99d tensorflow::FunctionLibraryRuntimeImpl::RunSync()
@ 0x7d59a5de6c26 tensorflow::ProcessFunctionLibraryRuntime::RunMultiDeviceSync()
@ 0x7d59a5decc60 tensorflow::ProcessFunctionLibraryRuntime::RunSync()
@ 0x7d599e9f119d tensorflow::KernelAndDeviceFunc::Run()
@ 0x7d599e9a00fb tensorflow::EagerKernelExecute()
@ 0x7d599e9a981e tensorflow::ExecuteNode::Run()
@ 0x7d599ef6f7b4 tensorflow::EagerExecutor::SyncExecute()
@ 0x7d599e99faa1 tensorflow::(anonymous namespace)::EagerLocalExecute()
@ 0x7d599e99d1d0 tensorflow::DoEagerExecute()
@ 0x7d599e9a0b2b tensorflow::EagerExecute()
@ 0x7d599e4ce247 tensorflow::EagerOperation::Execute()
@ 0x7d599e9edbb7 tensorflow::CustomDeviceOpHandler::Execute()
@ 0x7d599bb004e5 TFE_Execute
@ 0x7d596b89f910 TFE_Py_FastPathExecute_C()
@ 0x7d596b14bc53 pybind11::detail::argument_loader<>::call<>()
@ 0x7d596b14bb8c pybind11::cpp_function::initialize<>()::{lambda()#1}::__invoke()
@ 0x7d596b122fdd pybind11::cpp_function::dispatcher()
@ 0x5d2c7ae870c6 cfunction_call
Aborted (core dumped)
Source: tensorflow/tensorflow