Run on Clusters

Basic Steps

Mars can be deployed on a cluster. First, you need to run

pip install pymars

on every node in the cluster. This will install dependencies needed for distributed execution on your cluster. After that, you may select a node as supervisor which also integrated web service, leaving other nodes as workers.

The supervisor can be started with the following command:

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

Web service will be started as well.

Workers can be started with the following command:

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

After all Mars processes are started, you can open a Python console and run

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

You can open a web browser and type http://<web_ip>:<web_port> to open Mars UI to look up resource usage of workers and execution progress of the task submitted just now.

Using Command Lines

When running Mars with command line, you can specify arguments to control the behavior of Mars processes. All Mars services have common arguments listed below.

Argument

Description

-H

Service IP binding, 0.0.0.0 by default

-p

Port of the service. If absent, a randomized port will be used

-f

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

-s

List of supervisor endpoints, separated by commas. Useful for workers and webs to spot supervisors, or when you want to run more than one supervisor

--log-level

Log level, can be debug, info, warning, error

--log-format

Log format, can be Python logging format

--log-conf

Python logging configuration file, logging.conf by default

--use-uvloop

Whether to use uvloop to accelerate, auto by default

Extra arguments for supervisors are listed below.

Argument

Description

-w

Port of web service in supervisor

Extra arguments for workers are listed below. Details about memory tuning can be found at the next section.

Argument

Description

--n-cpu

Number of CPU cores to use. If absent, the value will be the available number of cores

--n-io-process

Number of IO processes for network operations. 1 by default

--cuda-devices

Index of CUDA devices to use. If not specified, all devices will be used. Specifying an empty string will ignore all devices

For instance, if you want to start a Mars cluster with two supervisors and two workers, you can run commands below (memory and CPU tunings are omitted):

On 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

On 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

On 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

On 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