StatefulRandomBinomial not able to run using GPU
@tsbrett,
Apologies for the delay. I tried to execute the mentioned code on tensorflow v2.15 and it was executed without any issue/error. Kindly find the gist of it [here](https://colab.research.google.com/gist/tilakrayal/d9e4252c72967ab98e6c0f448ec0e236/untitled1535.ipynb) and confirm whether we are missing anything in this. Thank you! @tilakrayal Thanks for your response. The gist you shared contains everything to reproduce the problem, and, as you say, looks to be working correctly. This suggests is issue is with running the code on an Apple M series. I'm using an Apple M3 pro chip with the package tensorflow-metal v1.1.0 installed. 

I've confirmed everything is correctly installed and tensorflow is able to use the GPU device, e.g. for generating normally distributed random numbers (see the above code example).

 @sachinprasadhs,
I tried to execute the code on tensorflow v2.15 with GPU, the code was executed with the user mentioned error. But where as on CPU it was executed without any issue/error. Kindly find the gist of it [here](https://colab.research.google.com/gist/tilakrayal/ebeb4118d235ee45c4faa778f8e9c1a2/untitled1539.ipynb). Hi,

As the error suggests, binomial is not registered on `GPU` kernels for any of the `dtype`. Have changed the issue to feature request. Will hear it from the team if they have any plan to implement this. Thanks!
### Issue type

Bug

### Have you reproduced the bug with TensorFlow Nightly?

No

### Source

source

### TensorFlow version

v2.15.0-rc1-8-g6887368d6d4 2.15.0

### Custom code

No

### OS platform and distribution

MacOS Sonoma 14.1.1

### Mobile device

_No response_

### Python version

3.11.6 

### Bazel version

_No response_

### GCC/compiler version

_No response_

### CUDA/cuDNN version

_No response_

### GPU model and memory

_No response_

### Current behavior?

I'm trying to generate binomial random numbers using the GPU on my macbook with tensorflow-metal installed. Everything works fine using the CPU. In addition, generating i) normally distributed random numbers  and ii) stateless binomially distributed random numbers both work fine using the GPU. I did a search and couldn't find any mention of issues with random number generation using tensorflow-metal.  The fact normal random numbers and the stateless generator work fine suggests this issue could be due to a bug/oversight. If the reason is instead that the device isn't supported for StatefulRandomBinomial, I'm happy for this issue to be changed to a feature request.

The minimal example to reproduce the bug is taken from the documentation, https://www.tensorflow.org/api_docs/python/tf/random/Generator

I'm happy to update this issue with any other information you need to reproduce it. Unfortunately I can't test whether this issue is limited to macOS or is more general. 

Many thanks!

### Standalone code to reproduce the issue

```shell
import tensorflow as tf
# Example from tensorflow documentation.
# Changing the device to '/cpu:0' results in the random numbers being generated correctly
with tf.device('/gpu:0'):
    counts = [10., 20.]
    # Probability of success.
    probs = [0.8]

    rng = tf.random.Generator.from_seed(seed=234)
    binomial_samples = rng.binomial(shape=[2], counts=counts, probs=probs)

# Generation of normally distributed random numbers using the GPU appears to work fine...
with tf.device('/gpu:0'):

    rng = tf.random.Generator.from_seed(seed=234)
    normal_samples = rng.normal(shape=[1], mean=[0.1], stddev=10)

# ... as does using the stateless generator
with tf.device('/gpu:0'):

    counts = [10., 20.]
    # Probability of success.
    probs = [0.8]

    binomial_samples = tf.random.stateless_binomial(shape=[2], seed=[123, 456],
                                                    counts=counts, probs=probs)
```


### Relevant log output

```shell
2023-11-17 13:11:45.268096: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M3 Pro
2023-11-17 13:11:45.268120: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 18.00 GB
2023-11-17 13:11:45.268127: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 6.00 GB
2023-11-17 13:11:45.268154: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:306] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2023-11-17 13:11:45.268169: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:272] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
Traceback (most recent call last):
  File "~/example.py", line 11, in <module>
    binomial_samples = rng.binomial(shape=[2], counts=counts, probs=probs)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "~/filtered_coffee/venv/lib/python3.11/site-packages/tensorflow/python/ops/stateful_random_ops.py", line 870, in binomial
    return gen_stateful_random_ops.stateful_random_binomial(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "~/filtered_coffee/venv/lib/python3.11/site-packages/tensorflow/python/ops/gen_stateful_random_ops.py", line 241, in stateful_random_binomial
    _ops.raise_from_not_ok_status(e, name)
  File "~/filtered_coffee/venv/lib/python3.11/site-packages/tensorflow/python/framework/ops.py", line 5883, in raise_from_not_ok_status
    raise core._status_to_exception(e) from None  # pylint: disable=protected-access
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation StatefulRandomBinomial: Could not satisfy explicit device specification '/job:localhost/replica:0/task:0/device:GPU:0' because no supported kernel for GPU devices is available.
Colocation Debug Info:
Colocation group had the following types and supported devices: 
Root Member(assigned_device_name_index_=1 requested_device_name_='/job:localhost/replica:0/task:0/device:GPU:0' assigned_device_name_='/job:localhost/replica:0/task:0/device:GPU:0' resource_device_name_='/job:localhost/replica:0/task:0/device:GPU:0' supported_device_types_=[CPU] possible_devices_=[]
StatefulRandomBinomial: CPU 
_Arg: GPU CPU 

Colocation members, user-requested devices, and framework assigned devices, if any:
  resource (_Arg)  framework assigned device=/job:localhost/replica:0/task:0/device:GPU:0
  StatefulRandomBinomial (StatefulRandomBinomial) /job:localhost/replica:0/task:0/device:GPU:0

Op: StatefulRandomBinomial
Node attrs: dtype=DT_INT32, S=DT_INT32, T=DT_FLOAT
Registered kernels:
  device='CPU'; dtype in [DT_HALF]; T in [DT_HALF]
  device='CPU'; dtype in [DT_HALF]; T in [DT_FLOAT]
  device='CPU'; dtype in [DT_HALF]; T in [DT_DOUBLE]
  device='CPU'; dtype in [DT_FLOAT]; T in [DT_HALF]
  device='CPU'; dtype in [DT_FLOAT]; T in [DT_FLOAT]
  device='CPU'; dtype in [DT_FLOAT]; T in [DT_DOUBLE]
  device='CPU'; dtype in [DT_DOUBLE]; T in [DT_HALF]
  device='CPU'; dtype in [DT_DOUBLE]; T in [DT_FLOAT]
  device='CPU'; dtype in [DT_DOUBLE]; T in [DT_DOUBLE]
  device='CPU'; dtype in [DT_INT32]; T in [DT_HALF]
  device='CPU'; dtype in [DT_INT32]; T in [DT_FLOAT]
  device='CPU'; dtype in [DT_INT32]; T in [DT_DOUBLE]
  device='CPU'; dtype in [DT_INT64]; T in [DT_HALF]
  device='CPU'; dtype in [DT_INT64]; T in [DT_FLOAT]
  device='CPU'; dtype in [DT_INT64]; T in [DT_DOUBLE]

         [[{{node StatefulRandomBinomial}}]] [Op:StatefulRandomBinomial] name:
```
