在集群中部署#

基本步骤#

Mars 可在集群中部署。首先,你需要在集群中的每个节点运行

pip install pymars

这将会为你的集群安装所有需要的依赖。此后,你可以选择一台机器作为 Supervisor(它集成了 Web Service),将其他的机器作为 Worker。

你可以使用下面的命令启动 Supervisor:

mars-supervisor -H <host_name> -p <supervisor_port> -w <web_port>

Web Service 也将随之启动。

可以使用下面的命令启动 Worker:

mars-worker -H <host_name> -p <worker_port> -s <supervisor_ip>:<supervisor_port>

当所有 Mars 进程启动后,可启动一个 Python 命令行,执行

import mars
import mars.tensor as mt
import mars.dataframe as md
# create a default session that connects to the cluster
mars.new_session('http://<web_ip>:<web_port>')
a = mt.random.rand(2000, 2000, chunk_size=200)
b = mt.inner(a, a)
b.execute()  # submit tensor to cluster
df = md.DataFrame(a).sum()
df.execute()  # submit DataFrame to cluster

你可以打开一个浏览器窗口,输入 http://<web_ip>:<web_port> 来打开 Mars UI,查看 Worker 资源使用状况和刚才提交作业的执行进度。

使用命令行#

当使用命令行启动 Mars 时,你可以通过指定启动参数控制 Mars 各服务进程的行为。所有 Mars 服务均拥有下面的参数。

参数

描述

-H

服务 IP 绑定,默认为 0.0.0.0

-p

服务端口。如果缺失,将使用随机端口

-f

Path to service configuration file. Absent when use default configuration.

-s

Supervisor Endpoint 列表,使用空格或逗号分隔。当为 Worker 指定 Supervisor,或者当需要为 Supervisor 指定其他 Supervisor 时需要使用此参数

--log-level

日志级别,可以使用 debuginfowarningerror

--log-format

日志格式,可以使用 Python logging 模块的日志格式

--log-conf

Python 日志配置文件的位置,默认为 logging.conf

--use-uvloop

是否需要使用 uvloop 加速服务,默认为 auto

Supervisor 的额外参数在下面列出。

参数

描述

-w

Supervisor 中使用的 Web 端口

Worker 的额外参数在下面列出。关于内存调优的内容可以参见下一节。

参数

描述

--n-cpu

使用的 CPU 核数,默认为所有可用的核

--n-io-process

用于网络传输的进程数,默认为 1

--cuda-devices

CUDA 设备的序号。如果未指定,将使用所有 GPU。

例如,如果你希望启动一个 Mars 集群,其中包含两个 Supervisor 和两个 Worker,你可以运行下面的命令(内存和 CPU 相关的细节已被忽略)。

在 Supervisor 1(192.168.1.10)上

mars-supervisor -H 192.168.1.10 -p 7001 -w 7005 -s 192.168.1.10:7001,192.168.1.11:7002

在 Supervisor 2(192.168.1.11)上

mars-supervisor -H 192.168.1.11 -p 7002 -s 192.168.1.10:7001,192.168.1.11:7002

在 Worker 1(192.168.1.20)上

mars-worker -H 192.168.1.20 -p 7003 -s 192.168.1.10:7001,192.168.1.11:7002

在 Worker 2(192.168.1.21)上

mars-worker -H 192.168.1.21 -p 7004 -s 192.168.1.10:7001,192.168.1.11:7002