# Ray actor CPU affinity

**URL:** <https://discuss.ray.io/t/ray-actor-cpu-affinity/20462>\
**Category:** Ray Core\
**Created:** [November 6, 2024, 5:24am UTC](https://discuss.ray.io/t/ray-actor-cpu-affinity/20462 "2024-11-06T05:24:37Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![BeingGod](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/beinggod/32/7270_2.png) [@BeingGod](https://discuss.ray.io/u/BeingGod)\
**Post date:** [November 6, 2024, 5:24am UTC](https://discuss.ray.io/t/ray-actor-cpu-affinity/20462/1 "2024-11-06T05:24:37Z")

</div>

**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.

1. I wonder if ray will set cpu affinity to actor ?
2. Is ray core can ensure different actors which own cpu resources are not scheduled on same physical cpu core at same time ?

Here is my experiment code. The result of cpu count is not meet my expectations.

 ![image](https://us1.discourse-cdn.com/flex020/uploads/ray/original/2X/1/12a051b48ee1fc6c178d9967b6fee755854db02d.jpeg)

demo.py

```auto
import ray
import subprocess
from ray.util.placement_group import placement_group

@ray.remote
class Actor:

    def exec(self):
        p = subprocess.Popen("python /gpfs/public/infra/zhangrb/AlignOrch/env.py", shell=True)
        
        return True

ray.init()

bundles = [{"GPU": 4, "CPU": 4*8}]

pg = placement_group(bundles)

actor = Actor.options(num_cpus=4*8,num_gpus=4,placement_group=pg).remote()

ref = actor.exec.remote()

ray.get(ref)

```

env.py

```auto
import os
import psutil

process = psutil.Process()
cpu_affinity_count = len(process.cpu_affinity())

print(f"CUDA_VISIBLE_DEVICES: {os.environ.get('CUDA_VISIBLE_DEVICES')}")
print(f"CPU Count: {cpu_affinity_count}")

```

---

<div class="post-metadata">

**Author:** ![Kai-Hsun\_Chen](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/kai-hsun_chen/32/3760_2.png) [@Kai-Hsun\_Chen](https://discuss.ray.io/u/Kai-Hsun_Chen)\
**Post date:** [November 6, 2024, 5:34am UTC](https://discuss.ray.io/t/ray-actor-cpu-affinity/20462/2 "2024-11-06T05:34:08Z")

</div>

Ray’s resources are logical resources; it doesn’t handle physical resources, as I understand it. cc @Ruiyang_Wang to confirm.

---

<div class="post-metadata">

**Author:** ![BeingGod](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/beinggod/32/7270_2.png) [@BeingGod](https://discuss.ray.io/u/BeingGod)\
**Post date:** [November 6, 2024, 6:10am UTC](https://discuss.ray.io/t/ray-actor-cpu-affinity/20462/3 "2024-11-06T06:10:36Z")

</div>

Assume I have an actor which `num_cpus=4` but I launch 100 threads (more than 4) on this actor. If these threads can be scheduled on all physical cpu cores it may hurts other actors which are running at the same time.

---

<div class="post-metadata">

**Author:** ![dentiny](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/dentiny/32/6575_2.png) [@dentiny](https://discuss.ray.io/u/dentiny)\
**Post date:** [December 17, 2024, 1:36am UTC](https://discuss.ray.io/t/ray-actor-cpu-affinity/20462/4 "2024-12-17T01:36:20Z")

</div>

> [@BeingGod](#):
>
> launch

I think what you want is actually resource isolation, but CPU affinity.  
One possible implementation is place the actors/tasks into cgroup.
