def fillout_defaults(config): defaults = get_default_config(config["provider"]) defaults.update(config) merge_setup_commands(defaults) dockerize_if_needed(defaults) defaults["auth"] = defaults.get("auth", {}) return defaults
def create_or_update_cluster(config_file, override_min_workers, override_max_workers, no_restart, yes): """Create or updates an autoscaling Ray cluster from a config json.""" config = yaml.load(open(config_file).read()) validate_config(config) dockerize_if_needed(config) if override_min_workers is not None: config["min_workers"] = override_min_workers if override_max_workers is not None: config["max_workers"] = override_max_workers importer = NODE_PROVIDERS.get(config["provider"]["type"]) if not importer: raise NotImplementedError("Unsupported provider {}".format( config["provider"])) bootstrap_config, _ = importer() config = bootstrap_config(config) get_or_create_head_node(config, no_restart, yes)
def teardown_cluster(config_file, yes): """Destroys all nodes of a Ray cluster described by a config json.""" config = yaml.load(open(config_file).read()) validate_config(config) dockerize_if_needed(config) confirm("This will destroy your cluster", yes) provider = get_node_provider(config["provider"], config["cluster_name"]) head_node_tags = { TAG_RAY_NODE_TYPE: "Head", } for node in provider.nodes(head_node_tags): print("Terminating head node {}".format(node)) provider.terminate_node(node) nodes = provider.nodes({}) while nodes: for node in nodes: print("Terminating worker {}".format(node)) provider.terminate_node(node) time.sleep(5) nodes = provider.nodes({})
def fillout_defaults(config): defaults = get_default_config(config["provider"]) defaults.update(config) dockerize_if_needed(defaults) return defaults
def prepare_config(config): with_defaults = fillout_defaults(config) merge_setup_commands(with_defaults) dockerize_if_needed(with_defaults) return with_defaults