def __init__(self, language, function, function_descriptor, num_cpus, num_gpus, memory, object_store_memory, resources, accelerator_type, num_returns, max_calls, max_retries, retry_exceptions, runtime_env, placement_group): if inspect.iscoroutinefunction(function): raise ValueError("'async def' should not be used for remote " "tasks. You can wrap the async function with " "`asyncio.get_event_loop.run_until(f())`. " "See more at docs.ray.io/async_api.html") self._language = language self._function = _inject_tracing_into_function(function) self._function_name = (function.__module__ + "." + function.__name__) self._function_descriptor = function_descriptor self._is_cross_language = language != Language.PYTHON self._num_cpus = (DEFAULT_REMOTE_FUNCTION_CPUS if num_cpus is None else num_cpus) self._num_gpus = num_gpus self._memory = memory if object_store_memory is not None: raise NotImplementedError( "setting object_store_memory is not implemented for tasks") self._object_store_memory = None self._resources = resources self._accelerator_type = accelerator_type self._num_returns = (DEFAULT_REMOTE_FUNCTION_NUM_RETURN_VALS if num_returns is None else num_returns) self._max_calls = (DEFAULT_REMOTE_FUNCTION_MAX_CALLS if max_calls is None else max_calls) self._max_retries = (DEFAULT_REMOTE_FUNCTION_NUM_TASK_RETRIES if max_retries is None else max_retries) self._retry_exceptions = (DEFAULT_REMOTE_FUNCTION_RETRY_EXCEPTIONS if retry_exceptions is None else retry_exceptions) # Parse local pip/conda config files here. If we instead did it in # .remote(), it would get run in the Ray Client server, which runs on # a remote node where the files aren't available. if runtime_env: if isinstance(runtime_env, str): self._runtime_env = runtime_env else: self._runtime_env = ParsedRuntimeEnv(runtime_env or {}).serialize() else: self._runtime_env = None self._placement_group = placement_group self._decorator = getattr(function, "__ray_invocation_decorator__", None) self._function_signature = ray._private.signature.extract_signature( self._function) self._last_export_session_and_job = None self._uuid = uuid.uuid4() # Override task.remote's signature and docstring @wraps(function) def _remote_proxy(*args, **kwargs): return self._remote(args=args, kwargs=kwargs) self.remote = _remote_proxy
def __init__( self, language, function, function_descriptor, task_options, ): if inspect.iscoroutinefunction(function): raise ValueError( "'async def' should not be used for remote tasks. You can wrap the " "async function with `asyncio.get_event_loop.run_until(f())`. " "See more at https://docs.ray.io/en/latest/ray-core/async_api.html#asyncio-for-remote-tasks" # noqa ) self._default_options = task_options # TODO(suquark): This is a workaround for class attributes of options. # They are being used in some other places, mostly tests. Need cleanup later. # E.g., actors uses "__ray_metadata__" to collect options, we can so something # similar for remote functions. for k, v in ray_option_utils.task_options.items(): setattr(self, "_" + k, task_options.get(k, v.default_value)) self._runtime_env = parse_runtime_env(self._runtime_env) if "runtime_env" in self._default_options: self._default_options["runtime_env"] = self._runtime_env self._language = language self._function = _inject_tracing_into_function(function) self._function_name = function.__module__ + "." + function.__name__ self._function_descriptor = function_descriptor self._is_cross_language = language != Language.PYTHON self._decorator = getattr(function, "__ray_invocation_decorator__", None) self._function_signature = ray._private.signature.extract_signature( self._function) self._last_export_session_and_job = None self._uuid = uuid.uuid4() # Override task.remote's signature and docstring @wraps(function) def _remote_proxy(*args, **kwargs): return self._remote(args=args, kwargs=kwargs, **self._default_options) self.remote = _remote_proxy
def __init__(self, language, function, function_descriptor, num_cpus, num_gpus, memory, object_store_memory, resources, accelerator_type, num_returns, max_calls, max_retries, runtime_env): if inspect.iscoroutinefunction(function): raise ValueError("'async def' should not be used for remote " "tasks. You can wrap the async function with " "`asyncio.get_event_loop.run_until(f())`. " "See more at docs.ray.io/async_api.html") self._language = language self._function = _inject_tracing_into_function(function) self._function_name = (function.__module__ + "." + function.__name__) self._function_descriptor = function_descriptor self._is_cross_language = language != Language.PYTHON self._num_cpus = (DEFAULT_REMOTE_FUNCTION_CPUS if num_cpus is None else num_cpus) self._num_gpus = num_gpus self._memory = memory if object_store_memory is not None: raise NotImplementedError( "setting object_store_memory is not implemented for tasks") self._object_store_memory = None self._resources = resources self._accelerator_type = accelerator_type self._num_returns = (DEFAULT_REMOTE_FUNCTION_NUM_RETURN_VALS if num_returns is None else num_returns) self._max_calls = (DEFAULT_REMOTE_FUNCTION_MAX_CALLS if max_calls is None else max_calls) self._max_retries = (DEFAULT_REMOTE_FUNCTION_NUM_TASK_RETRIES if max_retries is None else max_retries) self._runtime_env = runtime_env self._decorator = getattr(function, "__ray_invocation_decorator__", None) self._function_signature = ray._private.signature.extract_signature( self._function) self._last_export_session_and_job = None # Override task.remote's signature and docstring @wraps(function) def _remote_proxy(*args, **kwargs): return self._remote(args=args, kwargs=kwargs) self.remote = _remote_proxy
def __init__( self, language, function, function_descriptor, num_cpus, num_gpus, memory, object_store_memory, resources, accelerator_type, num_returns, max_calls, max_retries, retry_exceptions, runtime_env, placement_group, scheduling_strategy: SchedulingStrategyT, ): if inspect.iscoroutinefunction(function): raise ValueError( "'async def' should not be used for remote tasks. You can wrap the " "async function with `asyncio.get_event_loop.run_until(f())`. " "See more at https://docs.ray.io/en/latest/ray-core/async_api.html#asyncio-for-remote-tasks" # noqa ) self._language = language self._function = _inject_tracing_into_function(function) self._function_name = function.__module__ + "." + function.__name__ self._function_descriptor = function_descriptor self._is_cross_language = language != Language.PYTHON self._num_cpus = DEFAULT_REMOTE_FUNCTION_CPUS if num_cpus is None else num_cpus self._num_gpus = num_gpus self._memory = memory if object_store_memory is not None: raise NotImplementedError( "setting object_store_memory is not implemented for tasks" ) self._object_store_memory = None self._resources = resources self._accelerator_type = accelerator_type self._num_returns = ( DEFAULT_REMOTE_FUNCTION_NUM_RETURN_VALS if num_returns is None else num_returns ) self._max_calls = ( DEFAULT_REMOTE_FUNCTION_MAX_CALLS if max_calls is None else max_calls ) self._max_retries = ( DEFAULT_REMOTE_FUNCTION_NUM_TASK_RETRIES if max_retries is None else max_retries ) self._retry_exceptions = ( DEFAULT_REMOTE_FUNCTION_RETRY_EXCEPTIONS if retry_exceptions is None else retry_exceptions ) self._runtime_env = parse_runtime_env(runtime_env) self._placement_group = placement_group self._decorator = getattr(function, "__ray_invocation_decorator__", None) self._function_signature = ray._private.signature.extract_signature( self._function ) self._scheduling_strategy = scheduling_strategy self._last_export_session_and_job = None self._uuid = uuid.uuid4() # Override task.remote's signature and docstring @wraps(function) def _remote_proxy(*args, **kwargs): return self._remote(args=args, kwargs=kwargs) self.remote = _remote_proxy