client_connect.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import logging
  2. from typing import Any, Dict, List, Optional, Tuple
  3. from ray._private.client_mode_hook import (
  4. _explicitly_enable_client_mode,
  5. _set_client_hook_status,
  6. )
  7. from ray._private.utils import get_ray_doc_version
  8. from ray.job_config import JobConfig
  9. from ray.util.annotations import Deprecated
  10. from ray.util.client import ray
  11. logger = logging.getLogger(__name__)
  12. @Deprecated(
  13. message="Use ray.init(ray://<head_node_ip_address>:<ray_client_server_port>) "
  14. "instead. See detailed usage at {}.".format(
  15. f"https://docs.ray.io/en/{get_ray_doc_version()}/ray-core/package-ref.html#ray-init" # noqa: E501
  16. )
  17. )
  18. def connect(
  19. conn_str: str,
  20. secure: bool = False,
  21. metadata: List[Tuple[str, str]] = None,
  22. connection_retries: int = 3,
  23. job_config: JobConfig = None,
  24. namespace: str = None,
  25. *,
  26. ignore_version: bool = False,
  27. _credentials: Optional["grpc.ChannelCredentials"] = None, # noqa: F821
  28. ray_init_kwargs: Optional[Dict[str, Any]] = None,
  29. ) -> Dict[str, Any]:
  30. if ray.is_connected():
  31. ignore_reinit_error = ray_init_kwargs.get("ignore_reinit_error", False)
  32. if ignore_reinit_error:
  33. logger.info(
  34. "Calling ray.init() again after it has already been called. "
  35. "Reusing the existing Ray client connection."
  36. )
  37. return ray.get_context().client_worker.connection_info()
  38. raise RuntimeError(
  39. "Ray Client is already connected. Maybe you called "
  40. 'ray.init("ray://<address>") twice by accident?'
  41. )
  42. # Enable the same hooks that RAY_CLIENT_MODE does, as calling
  43. # ray.init("ray://<address>") is specifically for using client mode.
  44. _set_client_hook_status(True)
  45. _explicitly_enable_client_mode()
  46. # TODO(barakmich): https://github.com/ray-project/ray/issues/13274
  47. # for supporting things like cert_path, ca_path, etc and creating
  48. # the correct metadata
  49. conn = ray.connect(
  50. conn_str,
  51. job_config=job_config,
  52. secure=secure,
  53. metadata=metadata,
  54. connection_retries=connection_retries,
  55. namespace=namespace,
  56. ignore_version=ignore_version,
  57. _credentials=_credentials,
  58. ray_init_kwargs=ray_init_kwargs,
  59. )
  60. return conn
  61. @Deprecated(
  62. message="Use ray.shutdown() instead. See detailed usage at {}.".format(
  63. f"https://docs.ray.io/en/{get_ray_doc_version()}/ray-core/package-ref.html#ray-shutdown" # noqa: E501
  64. )
  65. )
  66. def disconnect():
  67. """Disconnects from server; is idempotent."""
  68. return ray.disconnect()