def actor_table(self, actor_id): """Fetch and parse the actor table information for a single actor ID. Args: actor_id: A hex string of the actor ID to fetch information about. If this is None, then the actor table is fetched. Returns: Information from the actor table. """ self._check_connected() if actor_id is not None: actor_id = ray.ActorID(hex_to_binary(actor_id)) actor_info = self.global_state_accessor.get_actor_info(actor_id) if actor_info is None: return {} else: actor_table_data = gcs_utils.ActorTableData.FromString( actor_info) return self._gen_actor_info(actor_table_data) else: actor_table = self.global_state_accessor.get_actor_table() results = {} for i in range(len(actor_table)): actor_table_data = gcs_utils.ActorTableData.FromString( actor_table[i]) results[binary_to_hex(actor_table_data.actor_id)] = \ self._gen_actor_info(actor_table_data) return results
def object_table(self, object_ref=None): """Fetch and parse the object table info for one or more object refs. Args: object_ref: An object ref to fetch information about. If this is None, then the entire object table is fetched. Returns: Information from the object table. """ self._check_connected() if object_ref is not None: object_ref = ray.ObjectRef(hex_to_binary(object_ref)) object_info = self.global_state_accessor.get_object_info( object_ref) if object_info is None: return {} else: object_location_info = gcs_utils.ObjectLocationInfo.FromString( object_info) return self._gen_object_info(object_location_info) else: object_table = self.global_state_accessor.get_object_table() results = {} for i in range(len(object_table)): object_location_info = gcs_utils.ObjectLocationInfo.FromString( object_table[i]) results[binary_to_hex(object_location_info.object_id)] = \ self._gen_object_info(object_location_info) return results
def placement_group_table(self, placement_group_id=None): self._check_connected() if placement_group_id is not None: placement_group_id = ray.PlacementGroupID( hex_to_binary(placement_group_id.hex())) placement_group_info = ( self.global_state_accessor.get_placement_group_info( placement_group_id)) if placement_group_info is None: return {} else: placement_group_info = (gcs_utils.PlacementGroupTableData. FromString(placement_group_info)) return self._gen_placement_group_info(placement_group_info) else: placement_group_table = self.global_state_accessor.\ get_placement_group_table() results = {} for placement_group_info in placement_group_table: placement_group_table_data = gcs_utils.\ PlacementGroupTableData.FromString(placement_group_info) placement_group_id = binary_to_hex( placement_group_table_data.placement_group_id) results[placement_group_id] = \ self._gen_placement_group_info(placement_group_table_data) return results
def _check(): resp = requests.get(f"{webui_url}/jobs?view=summary") resp.raise_for_status() result = resp.json() assert result["result"] is True, resp.text job_summary = result["data"]["summary"] assert len(job_summary) == 1, resp.text one_job = job_summary[0] assert "jobId" in one_job job_id = one_job["jobId"] assert ray._raylet.JobID(hex_to_binary(one_job["jobId"])) assert "driverIpAddress" in one_job assert one_job["driverIpAddress"] == ip assert "driverPid" in one_job assert one_job["driverPid"] == str(os.getpid()) assert "config" in one_job assert type(one_job["config"]) is dict assert "isDead" in one_job assert one_job["isDead"] is False assert "timestamp" in one_job one_job_summary_keys = one_job.keys() resp = requests.get(f"{webui_url}/jobs/{job_id}") resp.raise_for_status() result = resp.json() assert result["result"] is True, resp.text job_detail = result["data"]["detail"] assert "jobInfo" in job_detail assert len(one_job_summary_keys - job_detail["jobInfo"].keys()) == 0 assert "jobActors" in job_detail job_actors = job_detail["jobActors"] assert len(job_actors) == 1, resp.text one_job_actor = job_actors[actor_id] assert "taskSpec" in one_job_actor assert type(one_job_actor["taskSpec"]) is dict assert "functionDescriptor" in one_job_actor["taskSpec"] assert type(one_job_actor["taskSpec"]["functionDescriptor"]) is dict assert "pid" in one_job_actor assert one_job_actor["pid"] == actor_pid check_actor_keys = [ "name", "timestamp", "address", "actorId", "jobId", "state" ] for k in check_actor_keys: assert k in one_job_actor assert "jobWorkers" in job_detail job_workers = job_detail["jobWorkers"] assert len(job_workers) == 1, resp.text one_job_worker = job_workers[0] check_worker_keys = [ "cmdline", "pid", "cpuTimes", "memoryInfo", "cpuPercent", "coreWorkerStats", "language", "jobId" ] for k in check_worker_keys: assert k in one_job_worker
def __setstate__(self, state): state["resources"] = json_to_resources(state["resources"]) if state["status"] == Trial.RUNNING: state["status"] = Trial.PENDING for key in self._nonjson_fields: state[key] = cloudpickle.loads(hex_to_binary(state[key])) self.__dict__.update(state) validate_trainable(self.trainable_name) # Avoid creating logdir in client mode for returned trial results, # since the dir might not be creatable locally. TODO(ekl) thsi is kind # of a hack. if not ray.util.client.ray.is_connected(): self.init_logdir() # Create logdir if it does not exist
def __setstate__(self, state): if state["status"] == Trial.RUNNING: state["status"] = Trial.PENDING for key in self._nonjson_fields: state[key] = cloudpickle.loads(hex_to_binary(state[key])) # Ensure that stub doesn't get overriden stub = state.pop("stub", True) self.__dict__.update(state) self.stub = stub or getattr(self, "stub", False) if not self.stub: validate_trainable(self.trainable_name) # Avoid creating logdir in client mode for returned trial results, # since the dir might not be creatable locally. TODO(ekl) thsi is kind # of a hack. if not ray.util.client.ray.is_connected(): self.init_logdir() # Create logdir if it does not exist
def get_placement_group(placement_group_name: str) -> PlacementGroup: """Get a placement group object with a global name. Returns: None if can't find a placement group with the given name. The placement group object otherwise. """ if not placement_group_name: raise ValueError("Please supply a non-empty value to get_placement_group") worker = ray._private.worker.global_worker worker.check_connected() placement_group_info = ray._private.state.state.get_placement_group_by_name( placement_group_name, worker.namespace ) if placement_group_info is None: raise ValueError(f"Failed to look up actor with name: {placement_group_name}") else: return PlacementGroup( PlacementGroupID(hex_to_binary(placement_group_info["placement_group_id"])) )
def node_resource_table(self, node_id=None): """Fetch and parse the node resource table info for one. Args: node_id: An node ID to fetch information about. Returns: Information from the node resource table. """ self._check_connected() node_id = ray.NodeID(hex_to_binary(node_id)) node_resource_bytes = \ self.global_state_accessor.get_node_resource_info(node_id) if node_resource_bytes is None: return {} else: node_resource_info = gcs_utils.ResourceMap.FromString( node_resource_bytes) return { key: value.resource_capacity for key, value in node_resource_info.items.items() }
def _load_trial_info(self, trial_info): trial_info["config"] = cloudpickle.loads( hex_to_binary(trial_info["config"])) trial_info["result"] = cloudpickle.loads( hex_to_binary(trial_info["result"]))
def _from_cloudpickle(self, obj): return cloudpickle.loads(hex_to_binary(obj["value"]))