通过client提交job的 十六进制job_id 如何获取?

【问题】
通过job_id = client.submit_job(xxxxx) 返回的job_id 是 ‘raysubmit_c4T3nRpUfmQ2xQDg’ 这样的字符串。 但是从ray.experimental.state.api 中 list_actors 接口中打印出来的job_id 是 ‘01000000’ 这样十六进制的job_id 。 请问如何获取十六进制的job_id, 或者 ‘raysubmit_c4T3nRpUfmQ2xQDg’ 字符串与真正的 十六进制的job_id 是否存在什么对应关系?

【PS】
得到十六进制的job_id的目的是 通过 actors = list_actors(filters=[(“job_id”, “=”, job_id)]) 和 tasks = list_tasks(filters=[(“job_id”, “=”, job_id)])
将某一个job提交的actors 和 tasks 过滤出来,用于统计整个job在计算过程中占用的cpu time

这个是两个完全不同的 ID:

  • 先说 raysubmit_c4T3nRpUfmQ2xQDg : 这个定义上是叫做 submission_id, 它设计的初衷是说在 Job Submission 这个过程中(也就是通过 rest API 提交作业的时候),ray 给用户的唯一凭证(其实看 request 的接口也可以发现,ray 也允许用户自己给 submission id,不过唯一性需要用户自己保证),这个 id 只用在各个 rest API ,ray core 的接口基本上是不认的(python 直接调用的接口中,所谓的 job id 大多和这个无关)。
  • 01000000: 这个才是 ray core 中,真正的 job id,在每个作业的 driver 进程中,调用 ray.init 的时候,GCS进程会为每一个 job 分配一个这样的 ID。

ray 保证二者一一对应,如果不是通过 rest API 提交的作业,这个作业就不会有 submission_id

感谢您对概念的明晰。请问我有办法能获取 “真正的 job id” 吗?因为我需要统计整个job中发出去的task和actor的cpu time

rest API 我理解应该是没有的,这些 API 只关心通过 rest API 提交的作业

如果你要在 ray 的某个 core worker 里面查找的话,你可以试试 ray.state.jobs

:ok_hand:,我去看看