koichi12's picture
Add files using upload-large-folder tool
80c179b verified
raw
history blame
7.37 kB
# isort: skip_file
from ray._private import log # isort: skip # noqa: F401
import logging
import os
import sys
log.generate_logging_config()
logger = logging.getLogger(__name__)
def _configure_system():
import os
import platform
import sys
"""Wraps system configuration to avoid 'leaking' variables into ray."""
# Sanity check pickle5 if it has been installed.
if "pickle5" in sys.modules:
if sys.version_info >= (3, 8):
logger.warning(
"Package pickle5 becomes unnecessary in Python 3.8 and above. "
"Its presence may confuse libraries including Ray. "
"Please uninstall the package."
)
import importlib.metadata
try:
version_str = importlib.metadata.version("pickle5")
version = tuple(int(n) for n in version_str.split("."))
if version < (0, 0, 10):
logger.warning(
"Although not used by Ray, a version of pickle5 that leaks memory "
"is found in the environment. Please run 'pip install pickle5 -U' "
"to upgrade."
)
except importlib.metadata.PackageNotFoundError:
logger.warning(
"You are using the 'pickle5' module, but "
"the exact version is unknown (possibly carried as "
"an internal component by another module). Please "
"make sure you are using pickle5 >= 0.0.10 because "
"previous versions may leak memory."
)
# Importing psutil & setproctitle. Must be before ray._raylet is
# initialized.
thirdparty_files = os.path.join(
os.path.abspath(os.path.dirname(__file__)), "thirdparty_files"
)
sys.path.insert(0, thirdparty_files)
if (
platform.system() == "Linux"
and "Microsoft".lower() in platform.release().lower()
):
from ray._private import compat # noqa: E402
compat.patch_psutil()
# Expose ray ABI symbols which may be dependent by other shared
# libraries such as _streaming.so. See BUILD.bazel:_raylet
python_shared_lib_suffix = ".so" if sys.platform != "win32" else ".pyd"
so_path = os.path.join(
os.path.dirname(__file__), "_raylet" + python_shared_lib_suffix
)
if os.path.exists(so_path):
import ctypes
from ctypes import CDLL
CDLL(so_path, ctypes.RTLD_GLOBAL)
_configure_system()
# Delete configuration function.
del _configure_system
from ray import _version # noqa: E402
__commit__ = _version.commit
__version__ = _version.version
import ray._raylet # noqa: E402
from ray._raylet import ( # noqa: E402,F401
ActorClassID,
ActorID,
NodeID,
Config as _Config,
JobID,
WorkerID,
FunctionID,
ObjectID,
ObjectRef,
ObjectRefGenerator,
DynamicObjectRefGenerator,
TaskID,
UniqueID,
Language,
PlacementGroupID,
ClusterID,
)
_config = _Config()
from ray._private.state import ( # noqa: E402,F401
nodes,
timeline,
cluster_resources,
available_resources,
)
from ray._private.worker import ( # noqa: E402,F401
LOCAL_MODE,
SCRIPT_MODE,
WORKER_MODE,
RESTORE_WORKER_MODE,
SPILL_WORKER_MODE,
cancel,
get,
get_actor,
get_gpu_ids,
init,
is_initialized,
put,
kill,
remote,
shutdown,
wait,
)
from ray._private.ray_logging.logging_config import LoggingConfig # noqa: E402
# We import ray.actor because some code is run in actor.py which initializes
# some functions in the worker.
import ray.actor # noqa: E402,F401
from ray.actor import method # noqa: E402,F401
# TODO(qwang): We should remove this exporting in Ray2.0.
from ray.cross_language import java_function, java_actor_class # noqa: E402,F401
from ray.runtime_context import get_runtime_context # noqa: E402,F401
from ray import internal # noqa: E402,F401
from ray import util # noqa: E402,F401
from ray import _private # noqa: E402,F401
# We import ClientBuilder so that modules can inherit from `ray.ClientBuilder`.
from ray.client_builder import client, ClientBuilder # noqa: E402,F401
class _DeprecationWrapper:
def __init__(self, name, real_worker):
self._name = name
self._real_worker = real_worker
self._warned = set()
def __getattr__(self, attr):
value = getattr(self._real_worker, attr)
if attr not in self._warned:
self._warned.add(attr)
logger.warning(
f"DeprecationWarning: `ray.{self._name}.{attr}` is a private "
"attribute and access will be removed in a future Ray version."
)
return value
# TODO(ekl) remove this entirely after 3rd party libraries are all migrated.
worker = _DeprecationWrapper("worker", ray._private.worker)
ray_constants = _DeprecationWrapper("ray_constants", ray._private.ray_constants)
serialization = _DeprecationWrapper("serialization", ray._private.serialization)
state = _DeprecationWrapper("state", ray._private.state)
# Pulic Ray APIs
__all__ = [
"__version__",
"_config",
"get_runtime_context",
"autoscaler",
"available_resources",
"cancel",
"client",
"ClientBuilder",
"cluster_resources",
"get",
"get_actor",
"get_gpu_ids",
"init",
"is_initialized",
"java_actor_class",
"java_function",
"cpp_function",
"kill",
"Language",
"method",
"nodes",
"put",
"remote",
"shutdown",
"show_in_dashboard",
"timeline",
"wait",
"LOCAL_MODE",
"SCRIPT_MODE",
"WORKER_MODE",
"LoggingConfig",
]
# Public APIs that should automatically trigger ray.init().
AUTO_INIT_APIS = {
"cancel",
"get",
"get_actor",
"get_gpu_ids",
"kill",
"put",
"wait",
"get_runtime_context",
}
# Public APIs that should not automatically trigger ray.init().
NON_AUTO_INIT_APIS = {
"ClientBuilder",
"LOCAL_MODE",
"Language",
"SCRIPT_MODE",
"WORKER_MODE",
"__version__",
"_config",
"autoscaler",
"available_resources",
"client",
"cluster_resources",
"cpp_function",
"init",
"is_initialized",
"java_actor_class",
"java_function",
"method",
"nodes",
"remote",
"show_in_dashboard",
"shutdown",
"timeline",
"LoggingConfig",
}
assert set(__all__) == AUTO_INIT_APIS | NON_AUTO_INIT_APIS
from ray._private.auto_init_hook import wrap_auto_init_for_all_apis # noqa: E402
wrap_auto_init_for_all_apis(AUTO_INIT_APIS)
del wrap_auto_init_for_all_apis
# Subpackages
__all__ += [
"actor",
"autoscaler",
"data",
"internal",
"util",
"widgets",
"workflow",
]
# ID types
__all__ += [
"ActorClassID",
"ActorID",
"NodeID",
"JobID",
"WorkerID",
"FunctionID",
"ObjectID",
"ObjectRef",
"ObjectRefGenerator",
"DynamicObjectRefGenerator",
"TaskID",
"UniqueID",
"PlacementGroupID",
]
# Delay importing of expensive, isolated subpackages.
def __getattr__(name: str):
import importlib
if name in ["data", "workflow", "autoscaler"]:
return importlib.import_module("." + name, __name__)
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
del os
del logging
del sys