服务器中 ray 模块的安装配置

时间:2024-12-15 07:16:21

ray 官网Welcome to the Ray documentation — Ray 2.3.1

某些 python 模块会调用 ray,如果不好安装配置真的会各种烦人报错,而且服务器使用 ray 与 windows 系统使用方法存在区别

1. conda 创建虚拟环境

创建后虚拟环境中的 pythton 路径如果与系统最先调用的 python 路径不一致(比如多个虚拟环境)在后续调用 pip 或者 ray 一定要用绝对路径

  1. # 创建并激活虚拟环境 ray
  2. conda create -c conda-forge python=3.8 -n ray
  3. conda activate ray

2. 安装 ray

安装 ray 过程中,除了安装 ray 的最基础功能,还需要安装一些依赖库,相当于 ray 的一些扩展功能,具体有哪些可以参考 Ray Default ::

  1. # 除了这五个还有其他的,但够用了
  2. pip install -U "ray[default]"
  3. pip install -U "ray[air]"
  4. pip install -U "ray[tune]"
  5. pip install -U "ray[rllib]"
  6. pip install -U "ray[serve]"

3. ray start

windows 不同,服务器运行 ray 必须要先创建 ray 集群,之后在 python 中初始化(连接到)该集群。如果只是需要在单独的一个服务器上运行命令,不需要在服务器之间的通讯,或者远程服务器与本地计算机的通讯,则只需要运行下边最简单的命令

  1. # 创建一个具有30cpu的 ray 集群
  2. ray start --head --num-cpus=30
  3. # 日志
  4. Usage stats collection is enabled. To disable this, add `--disable-usage-stats` to the command that starts the cluster, or run .
  5. Local node IP: 10.11.11.179
  6. 2023-04-16 01:49:35,305 ERROR :1169 -- Failed to start the dashboard
  7. 2023-04-16 01:49:35,306 ERROR :1194 -- Error should be written to '' or ''. We are printin.
  8. 2023-04-16 01:49:35,307 ERROR :1238 --
  9. The last 20 lines of /tmp/ray/session_2023-04-16_01-48-54_707151_109593/logs/ (it contains the error message from
  10. 2023-04-16 01:49:32,933 INFO :239 -- Starting dashboard metrics server on port 44227
  11. 2023-04-16 01:49:32,941 INFO :112 -- Get all modules by type: DashboardHeadModule
  12. --------------------
  13. Ray runtime started.
  14. --------------------
  15. Next steps
  16. To connect to this Ray runtime from another node, run
  17. ray start --address='10.11.11.179:6379'
  18. Alternatively, use the following Python code:
  19. import ray
  20. (address='auto')
  21. To see the status of the cluster, use
  22. ray status
  23. If connection fails, check your firewall settings and network configuration.
  24. To terminate the Ray runtime, run
  25. ray stop

4. head 节点和 worker 节点

如果需要服务器之间相互通讯或者远程服务器与本地计算机之间的通讯,那么就相对复杂一些,在配置 ray 集群时会涉及到两个概念:主节点和工作节点

head 节点是Ray集群的中心节点,它负责协调任务的执行和资源管理,负责:

  • 分配任务:head节点将任务分配给worker节点,以便它们执行任务。
  • 管理资源:head节点负责管理集群中的资源,例如CPU、内存和GPU等,以确保任务能够正确地执行并使用适当的资源。
  • 跟踪任务状态:head节点跟踪任务的执行状态,并在任务完成后将结果返回给调用者。

worker节点是Ray集群中的计算节点,它们负责执行任务并将结果返回给head节点:

  • 接收任务:worker节点从head节点接收分配给它们的任务,并执行任务的指令。
  • 执行任务:worker节点执行任务的代码,并将结果返回给head节点。
  • 释放资源:worker节点在完成任务后释放使用的资源,以便其他任务可以使用它们。

总的来说,head节点和worker节点的区别在于它们的职责和行为。head节点是集群的中心节点,负责协调和管理任务的执行,而worker节点是集群的计算节点,负责执行任务。在Ray集群中,head节点和worker节点之间进行通信,以确保任务能够正确地执行并返回结果。

PS:个人理解就似乎父进与子进程的关系或者说是base环境和虚拟环境的关系

具体步骤:

明确服务器 IP 地址

ifconfig

初始化创建主节点

  1. ray start --head --port=6379 --num-cpus=<number_of_cpus> --redis-password=<password>
  2. # port = 0,随机端口
  3. # port=6379,默认端口

工作节点连接到主节点

ray start --address=<address_of_head_node>:<port_of_head_node> --num-cpus=<number_of_cpus>

5. 在 ray 集群通过 python 启用命令

  1. import ray
  2. # 初始化ray
  3. ray.init(address='auto')
  4. # 某些指定的 function
  5. ()

注意:在 python 中 () 之后,结束命令一定要 (),否则下一次运行 () 会报错

6. 其他命令

  1. ray dashboard
  2. # 由于服务器缺少可视化窗口GUI,所以会报错,但不影响使用
  3. '''
  4. Usage: ray dashboard [OPTIONS] CLUSTER_CONFIG_FILE
  5. Try 'ray dashboard --help' for help.
  6. Error: Missing argument 'CLUSTER_CONFIG_FILE'.
  7. '''
  8. ray status
  9. # 日志
  10. '''
  11. ======== Autoscaler status: 2023-04-16 04:04:48.643492 ========
  12. Node status
  13. ---------------------------------------------------------------
  14. Healthy:
  15. 1 node_36f47b4427ed06ce849863e323f684649dce7aa5c1ad7d3be38416aa
  16. Pending:
  17. (no pending nodes)
  18. Recent failures:
  19. (no failures)
  20. Resources
  21. ---------------------------------------------------------------
  22. Usage:
  23. 0.0/30.0 CPU
  24. 0.00/595.632 GiB memory
  25. 0.00/186.265 GiB object_store_memory
  26. Demands:
  27. (no resource demands)
  28. '''
  29. # 关闭 ray 集群
  30. ray stop