# Ray.cloudpickle error while pickling ray.dataset

**URL:** <https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396>\
**Category:** Ray Core\
**Created:** [March 14, 2022, 8:31am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396 "2022-03-14T08:31:49Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Preeti\_Joshi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/preeti_joshi/32/1399_2.png) [@Preeti\_Joshi](https://discuss.ray.io/u/Preeti_Joshi)\
**Post date:** [March 14, 2022, 8:31am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/1 "2022-03-14T08:31:49Z")

</div>

I am trying to pickle a python dictionary object containing ray dataset. The purpose of doing this is to checkpoint the dataset so that it can be used later for fault tolerance.

Here the code which I am using to do so:

```auto
import ray
import ray.cloudpickle as cloudpickle
# ray.init("ray://localhost:10001")
ray_dataset = ray.data.range(10)
map = {'key1': 'value1', 'ray_dataset' : ray_dataset}
pickled_map = cloudpickle.dumps(map)
print("pickled_map:" , pickled_map)

map1 = ray.cloudpickle.loads(pickled_map)
print("map1:" , map1)

```

The above code works when run in local standalone mode.  
But when I uncomment in line: `ray.init("ray://localhost:10001")` to connect to a ray cluster run using local k8s setup, it fails with the below mentioned error:

```auto
    pickled_map = cloudpickle.dumps(map)
  File "<python site packages dir>/ray/cloudpickle/cloudpickle_fast.py", line 73, in dumps
    cp.dump(obj)
  File "<python site packages dir>/ray/cloudpickle/cloudpickle_fast.py", line 620, in dump
    return Pickler.dump(self, obj)
  File "<python site packages dir>/ray/util/client/common.py", line 340, in __call__
    raise TypeError("Actor methods cannot be called directly. Instead "
TypeError: Actor methods cannot be called directly. Instead of running 'object. __getstate__ ()', try 'object. __getstate__.remote()'.

```

Please let me know how can we get the pickling work here.

**How severe does this issue affect your experience of using Ray?**

- Medium: It contributes to significant difficulty to complete my task, but I can work around it.

---

<div class="post-metadata">

**Author:** ![Stephanie\_Wang](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/stephanie_wang/32/18_2.png) [@Stephanie\_Wang](https://discuss.ray.io/u/Stephanie_Wang)\
**Post date:** [March 15, 2022, 2:11am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/2 "2022-03-15T02:11:56Z")

</div>

@Clark_Zinzow could you answer this question?

---

<div class="post-metadata">

**Author:** ![Clark\_Zinzow](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/clark_zinzow/32/445_2.png) [@Clark\_Zinzow](https://discuss.ray.io/u/Clark_Zinzow)\
**Post date:** [March 15, 2022, 3:34am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/3 "2022-03-15T03:34:16Z")

</div>

Hi @Preeti_Joshi, this works for me on latest master, what version of Ray are you using?

---

<div class="post-metadata">

**Author:** ![Preeti\_Joshi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/preeti_joshi/32/1399_2.png) [@Preeti\_Joshi](https://discuss.ray.io/u/Preeti_Joshi)\
**Post date:** [March 15, 2022, 4:12am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/4 "2022-03-15T04:12:12Z")

</div>

I am using ray 1.11.0. Let me try the latest dev 2.0 build though.

---

<div class="post-metadata">

**Author:** ![Preeti\_Joshi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/preeti_joshi/32/1399_2.png) [@Preeti\_Joshi](https://discuss.ray.io/u/Preeti_Joshi)\
**Post date:** [March 15, 2022, 10:38am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/5 "2022-03-15T10:38:15Z")

</div>

Hello @Clark_Zinzow , I tried with latest 2.0.0.dev0 (Linux Python 3.7 wheel) but still getting the same error. Again not in local standalone mode, but in k8s based cluster mode.

---

<div class="post-metadata">

**Author:** ![Clark\_Zinzow](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/clark_zinzow/32/445_2.png) [@Clark\_Zinzow](https://discuss.ray.io/u/Clark_Zinzow)\
**Post date:** [March 19, 2022, 7:40pm UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/6 "2022-03-19T19:40:21Z")

</div>

Thanks for checking @Preeti_Joshi and apologies for the late response, I momentarily lost track of this thread, but I’ll dig into this on Monday!

---

<div class="post-metadata">

**Author:** ![Preeti\_Joshi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/preeti_joshi/32/1399_2.png) [@Preeti\_Joshi](https://discuss.ray.io/u/Preeti_Joshi)\
**Post date:** [March 22, 2022, 10:32am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/7 "2022-03-22T10:32:59Z")

</div>

Hello @Clark_Zinzow, did you get a chance to look into this issue?

---

<div class="post-metadata">

**Author:** ![Preeti\_Joshi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/preeti_joshi/32/1399_2.png) [@Preeti\_Joshi](https://discuss.ray.io/u/Preeti_Joshi)\
**Post date:** [March 28, 2022, 12:51pm UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/8 "2022-03-28T12:51:17Z")

</div>

Hello @Clark_Zinzow, following up on this again. Did you get a chance to check the pickling error mentioned in this thread?

---

<div class="post-metadata">

**Author:** ![Clark\_Zinzow](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/clark_zinzow/32/445_2.png) [@Clark\_Zinzow](https://discuss.ray.io/u/Clark_Zinzow)\
**Post date:** [March 29, 2022, 4:41pm UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/9 "2022-03-29T16:41:48Z")

</div>

Hi @Preeti_Joshi, I was able to reproduce this on latest master when using Ray Client, doing a quick debugging push to see if I can determine the underlying issue.

---

<div class="post-metadata">

**Author:** ![Clark\_Zinzow](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/clark_zinzow/32/445_2.png) [@Clark\_Zinzow](https://discuss.ray.io/u/Clark_Zinzow)\
**Post date:** [March 29, 2022, 4:52pm UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/10 "2022-03-29T16:52:50Z")

</div>

It looks like this is an underlying issue with Ray Client, where direct serialization of an actor handle created under Ray Client fails due to a direct method call check on the actor handle. The below minimal reproduction also fails:

```python
import ray
import ray.cloudpickle as cloudpickle
ray.init("ray://localhost:10001")

@ray.remote
class Foo:
    def ping(self):
        return "ok"

f = Foo.remote()
s = cloudpickle.dumps(f) # This raises the same error.

```

Interestingly, in-band serialization of the actor handle by passing it to another task does not fail, so Ray task arguments must go through a slightly different serialization path than direct out-of-band serialization with our cloudpickle:

```python
@ray.remote
def bar(h):
    return ray.get(h.ping.remote())

ray.get(bar.remote(f)) # This works just fine.

```

cc @ckw017 for Ray Client-specific things, do we expect direct, out-of-band serialization of actor handles to work under Ray Client?

---

<div class="post-metadata">

**Author:** ![jdz](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/jdz/32/2927_2.png) [@jdz](https://discuss.ray.io/u/jdz)\
**Post date:** [December 30, 2022, 4:45pm UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/11 "2022-12-30T16:45:04Z")

</div>

Hi @Clark_Zinzow and team,  
I have the same problem with Ray 2.2.0. What is the status of this issue?

---

<div class="post-metadata">

**Author:** ![ckw017](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/ckw017/32/1683_2.png) [@ckw017](https://discuss.ray.io/u/ckw017)\
**Post date:** [January 13, 2023, 1:14am UTC](https://discuss.ray.io/t/ray-cloudpickle-error-while-pickling-ray-dataset/5396/12 "2023-01-13T01:14:25Z")

</div>

There was a recent fix to Ray Client that should fix actor handle serialization here: [[Client] Fix \_\_getattr\_\_ behavior for ClientActorHandles by ckw017 · Pull Request #31586 · ray-project/ray · GitHub](https://github.com/ray-project/ray/pull/31586) that should be ready in 2.3.0. Additionally it looks like the actor dependency is planned to be removed from datasets eventually
