Remove ref counting dependencies on ray.get() (#6412)

* Remove ref counting dependencies on Get()

* comment

* don't send IDs when disabled

* pass through internal config

* fix

* allow reinit

* remove flag
This commit is contained in:
Edward Oakes
2019-12-10 18:11:34 -08:00
parent 942094827a
commit ea4fca9257
11 changed files with 145 additions and 23 deletions
+14
View File
@@ -138,6 +138,20 @@ else:
if PY3:
from ray.async_compat import sync_to_async
def set_internal_config(dict options):
cdef:
unordered_map[c_string, c_string] c_options
if options is None:
return
for key, value in options.items():
c_options[str(key).encode("ascii")] = str(value).encode("ascii")
RayConfig.instance().initialize(c_options)
cdef int check_status(const CRayStatus& status) nogil except -1:
if status.ok():
return 0
+1 -1
View File
@@ -86,4 +86,4 @@ cdef extern from "ray/common/ray_config.h" nogil:
uint32_t maximum_gcs_deletion_batch_size() const
void initialize(const unordered_map[c_string, int] &config_map)
void initialize(const unordered_map[c_string, c_string] &config_map)
+3 -1
View File
@@ -1199,10 +1199,12 @@ def start_raylet(redis_address,
"--object-store-name={} "
"--raylet-name={} "
"--redis-address={} "
"--config-list={} "
"--temp-dir={}".format(
sys.executable, worker_path, node_ip_address,
node_manager_port, plasma_store_name,
raylet_name, redis_address, temp_dir))
raylet_name, redis_address, config_str,
temp_dir))
if redis_password:
start_worker_command += " --redis-password {}".format(redis_password)
+9 -2
View File
@@ -795,7 +795,9 @@ def init(address=None,
log_to_driver=log_to_driver,
worker=global_worker,
driver_object_store_memory=driver_object_store_memory,
job_id=job_id)
job_id=job_id,
internal_config=json.loads(_internal_config)
if _internal_config else {})
for hook in _post_init_hooks:
hook()
@@ -1064,7 +1066,8 @@ def connect(node,
log_to_driver=False,
worker=global_worker,
driver_object_store_memory=None,
job_id=None):
job_id=None,
internal_config=None):
"""Connect this worker to the raylet, to Plasma, and to Redis.
Args:
@@ -1077,6 +1080,8 @@ def connect(node,
driver_object_store_memory: Limit the amount of memory the driver can
use in the object store when creating objects.
job_id: The ID of job. If it's None, then we will generate one.
internal_config: Dictionary of (str,str) containing internal config
options to override the defaults.
"""
# Do some basic checking to make sure we didn't call ray.init twice.
error_message = "Perhaps you called ray.init twice by accident?"
@@ -1087,6 +1092,8 @@ def connect(node,
if not faulthandler.is_enabled():
faulthandler.enable(all_threads=False)
ray._raylet.set_internal_config(internal_config)
if mode is not LOCAL_MODE:
# Create a Redis client to primary.
# The Redis client can safely be shared between threads. However,
+21 -2
View File
@@ -3,6 +3,7 @@ from __future__ import division
from __future__ import print_function
import argparse
import json
import ray
import ray.actor
@@ -55,6 +56,12 @@ parser.add_argument(
type=str,
default=ray_constants.LOGGER_FORMAT,
help=ray_constants.LOGGER_FORMAT_HELP)
parser.add_argument(
"--config-list",
required=False,
type=str,
default=None,
help="Override internal config options for the worker process.")
parser.add_argument(
"--temp-dir",
required=False,
@@ -77,6 +84,15 @@ if __name__ == "__main__":
ray.utils.setup_logger(args.logging_level, args.logging_format)
internal_config = {}
if args.config_list is not None:
config_list = args.config_list.split(",")
if len(config_list) > 1:
i = 0
while i < len(config_list):
internal_config[config_list[i]] = config_list[i + 1]
i += 2
ray_params = RayParams(
node_ip_address=args.node_ip_address,
node_manager_port=args.node_manager_port,
@@ -86,7 +102,9 @@ if __name__ == "__main__":
raylet_socket_name=args.raylet_name,
temp_dir=args.temp_dir,
load_code_from_local=args.load_code_from_local,
use_pickle=args.use_pickle)
use_pickle=args.use_pickle,
_internal_config=json.dumps(internal_config),
)
node = ray.node.Node(
ray_params,
@@ -95,5 +113,6 @@ if __name__ == "__main__":
spawn_reaper=False,
connect_only=True)
ray.worker._global_node = node
ray.worker.connect(node, mode=ray.WORKER_MODE)
ray.worker.connect(
node, mode=ray.WORKER_MODE, internal_config=internal_config)
ray.worker.global_worker.main_loop()