Ragged String Input not working with GPU  - > non-DMA-copy attempted of tensor type: string
@citizenkeynes,
Basically, RaggedTensorVariant objects should never be copied to GPU, because we can't do anything useful with them there. But Placer isn't currently smart enough to figure that out (it just sees a Variant tensor, and doesn't know what kind of value it contains). 
https://github.com/keras-team/tf-keras/issues/128
https://github.com/keras-team/tf-keras/issues/638
Thank you! This issue is stale because it has been open for 7 days with no activity. It will be closed if no further activity occurs. Thank you. This issue was closed because it has been inactive for 7 days since being marked as stale. Please reopen if you'd like to work on this further. Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60812">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60812">No</a>

<details><summary>Click to expand!</summary> 
 
 ### Issue Type

Bug

### Have you reproduced the bug with TF nightly?

Yes

### Source

source

### Tensorflow Version

2.12

### Custom Code

No

### OS Platform and Distribution

linux

### Mobile device

_No response_

### Python version

3.9

### Bazel version

_No response_

### GCC/Compiler version

_No response_

### CUDA/cuDNN version

_No response_

### GPU model and memory

_No response_

### Current Behaviour?

consider this trivial tf.keras Model:

```
def some_model():
     x = tf.keras.layers.Input(shape=(None, 1), name="string_input",dtype="string",ragged=True)
     some_function = tf.keras.layers.Lambda(lambda x: x)
     model = tf.keras.models.Model([x],some_function(x))
     return model
```
 
```
with tf.distribute.OneDeviceStrategy("gpu:0").scope():
  m  = some_model()
```
passing a ragged tensor will fail :

```
x = tf.ragged.constant([[["somestring"],["somestring"]],[["somestring"],["somestring"],["somestring"]]])
m.predict(x)
```
with "non-DMA-copy attempted of tensor type: string"

whereas this works just fine

```
x = tf.constant([[["somestring"],["somestring"]],[["somestring"],["somestring"]]])
m.predict(x)
```

I am aware that there are many related issue open / i hope the small self-contained example above is useful


### Standalone code to reproduce the issue

```shell
https://colab.research.google.com/drive/1cf669jKVUlIjC0JGU42VNyZTWEywAgT0?usp=sharing
```


### Relevant log output

_No response_</details>