在集群中部署¶
基本步骤¶
Mars 可在集群中部署。首先,你需要在集群中的每个节点运行
pip install 'pymars[distributed]'
这将会为你的集群安装所有需要的依赖。此后,你可以选择一台机器作为 Scheduler,另一台作为 Web Service,将其他的机器作为 Worker。你可以使用下面的命令启动 Scheduler:
mars-scheduler -a <scheduler_ip> -p <scheduler_port>
可以使用下面的命令启动 Web Service:
mars-web -a <web_ip> -p <web_port> -s <scheduler_ip>:<scheduler_port>
可以使用下面的命令启动 Worker:
mars-worker -a <worker_ip> -p <worker_port> -s <scheduler_ip>:<scheduler_port>
当所有 Mars 进程启动后,可启动一个 Python 命令行,执行
import mars.tensor as mt
import mars.dataframe as md
from mars.session import new_session
new_session('http://<web_ip>:<web_port>').as_default()
a = mt.ones((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 服务均拥有下面的参数。
参数 |
描述 |
---|---|
|
对外服务地址,该地址对集群中的其他服务进程可见。当使用多穴主机及运行在虚拟机或容器中的服务时需要配置此参数 |
|
服务 IP 绑定,默认为 |
|
服务端口。如果缺失,将使用随机端口 |
|
Scheduler Endpoint 列表,使用空格或逗号分隔。当为 Worker 或 Web 服务指定 Scheduler,或者当需要为 Scheduler 指定其他 Scheduler 时需要使用此参数 |
|
日志级别,可以使用 |
|
日志格式,可以使用 Python logging 模块的日志格式 |
|
Python 日志配置文件的位置,默认为 |
Scheduler 的额外参数在下面列出。
参数 |
描述 |
---|---|
|
服务进程数,默认为可用的核数 |
Worker 的额外参数在下面列出。关于内存调优的内容可以参见下一节。
参数 |
描述 |
---|---|
|
用于计算的 CPU 进程数,默认值为可用的核数 |
|
用于网络传输的进程数,默认为 1 |
|
CUDA 设备的序号。如果未指定,将仅使用 CPU。 |
|
物理内存限制,可以为总内存大小的百分比,也可以为实际值。例如, |
|
共享内存限制,可以为总内存大小的百分比,也可以为实际值。例如, |
|
启动 Worker 所需的最小内存,可以为总内存大小的百分比,也可以为实际值。例如, |
|
Spill 的目标路径,在 MacOS 或 Linux 下使用半角冒号(:)拆分。 |
|
Plasma Store 存储所用的路径。一旦指定,管理内存时将不会考虑 Plasma Store 的大小。 |
例如,如果你希望启动一个 Mars 集群,其中包含两个 Scheduler、两个 Worker 及一个 Web 服务,你可以运行下面的命令(内存和 CPU 相关的细节已被忽略)。
在 Scheduler 1(192.168.1.10)上
mars-scheduler -a 192.168.1.10 -p 7001 -s 192.168.1.10:7001,192.168.1.11:7002
在 Scheduler 2(192.168.1.11)上
mars-scheduler -a 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 -a 192.168.1.20 -p 7003 -s 192.168.1.10:7001,192.168.1.11:7002 \
--spill-dirs /mnt/disk2/spill:/mnt/disk3/spill
在 Worker 2(192.168.1.21)上
mars-worker -a 192.168.1.21 -p 7004 -s 192.168.1.10:7001,192.168.1.11:7002 \
--spill-dirs /mnt/disk2/spill:/mnt/disk3/spill
在 Web 服务器(192.168.1.30)上
mars-web -p 7005 -s 192.168.1.10:7001,192.168.1.11:7002
内存优化¶
Mars Worker 管理两个不同部分的内存,第一部分为每个进程的私有内存,第二部分是使用 Apache Arrow 中的 plasma_store 管理的共享内存。当 Mars Worker 启动,它将默认使用当前可用内存的 50% 作为共享内存,将剩余部分作为各进程私有内存使用。与此同时,Mars 为内存分配提供了软限制和硬限制,分别默认为 75% 和 90%。如果这些选项不满足你的需要,你可以使用 --cache-mem
参数配置共享内存的大小,使用 --phy-mem
参数配置总内存大小,软限制和硬限制将从这些数值计算。
例如,使用
mars-worker -a localhost -p 9012 -s localhost:9010 --cache-mem 512m --phy-mem 90%
可将共享内存限制为 512MB,总内存限制为物理内存的 90%。