From eca90f142eb0df055a0da0862498e8c358c441db Mon Sep 17 00:00:00 2001 From: fuyw Date: Wed, 21 Aug 2019 11:32:15 +0800 Subject: [PATCH] Add xparl status & @remote_class(max_memory) (#134) * fix css max-width bug * check if monitor_port is used * change master log dir to .parl_data/master/port * Add docs/parallel_training/features.rst * rename feature.rst to overview.rst * Add xparl status & @remote_class(max_memory) * fix yapf error * use new remote/tests * reply job_memory_info to client heartbeat * add cluster_status_test.py * update overview.rst * Update docs --- docs/index.rst | 6 +- docs/parallel_training/comparison.png | Bin 0 -> 173704 bytes docs/parallel_training/overview.rst | 51 ++++ .../recommended_practice.rst | 2 +- parl/remote/client.py | 15 +- parl/remote/cluster_monitor.py | 15 + parl/remote/job.py | 40 ++- parl/remote/master.py | 13 +- parl/remote/monitor.py | 2 +- parl/remote/remote_constants.py | 1 + parl/remote/remote_decorator.py | 265 ++++++++++-------- parl/remote/scripts.py | 76 ++++- parl/remote/static/js/parl.js | 12 +- parl/remote/templates/workers.html | 3 - parl/remote/tests/actor_max_memory_test.py | 66 +++++ parl/remote/tests/cluster_status_test.py | 63 +++++ parl/remote/worker.py | 11 +- 17 files changed, 473 insertions(+), 168 deletions(-) create mode 100644 docs/parallel_training/comparison.png create mode 100644 docs/parallel_training/overview.rst create mode 100644 parl/remote/tests/actor_max_memory_test.py create mode 100644 parl/remote/tests/cluster_status_test.py diff --git a/docs/index.rst b/docs/index.rst index 41080d4..13e57da 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,7 +21,7 @@ Features | def forward(self, obs): | return a + b | | out = self.fc1(obs) | | | out = self.fc2(out) | parl.connect('localhost:8003') | -| return out | obj = HelloWorld() | +| return out | obj = HelloWorld() | | | ans = obj.sum(a, b) | | model = MLPModel() | | | target_model = copy.deepcopy(model) | | @@ -33,7 +33,7 @@ Abstractions :align: center :width: 400px -| PARL aims to build an **agent** for training algorithms to perform complex tasks. +| PARL aims to build an **agent** for training algorithms to perform complex tasks. | The main abstractions introduced by PARL that are used to build an agent recursively are the following: * **Model** is abstracted to construct the forward network which defines a policy network or critic network given state as input. @@ -65,6 +65,7 @@ Abstractions :maxdepth: 2 :caption: Parallel Training + parallel_training/overview.rst parallel_training/setup.rst parallel_training/recommended_practice.rst @@ -81,4 +82,3 @@ Abstractions model.rst algorithm.rst agent.rst - diff --git a/docs/parallel_training/comparison.png b/docs/parallel_training/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..3b15a02b4605eb243413566bfb8a00f5c01bd8b5 GIT binary patch literal 173704 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

ylp#!;#zzDPw@WahEG&C`Sj7xW0 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 XcdIZ(u>I;Yz~6m!UA1p2=E461M2lA2 literal 0 HcmV?d00001 diff --git a/docs/parallel_training/overview.rst b/docs/parallel_training/overview.rst new file mode 100644 index 0000000..cc5e087 --- /dev/null +++ b/docs/parallel_training/overview.rst @@ -0,0 +1,51 @@ +Summary +======= + +Easy-to-use +########### +| With a single @parl.remote_class decorator, users can implement parallel + training easily, and do not have to care about stuff of multi-processes, + network communication. + +High performance +################ +| `@parl.remote_class` enable us to achieve real multi-thread computation + efficiency without modifying our codes. As shown in figure (a), python's + original multi-thread computation performs poorly due to the limitation + of the GIL, while PARL empowers us to realize real parallel computation + efficiency. + +Web UI for computation resources +################################ + +| PARL provides a web monitor to watch the status of any resources connected + to the cluster. Users can view the cluster status at a WEB UI. It shows the + detailed information for each worker(e.g, memory used) and each task submitted. + +Board compatibility +################### +| Our framework for distributed training is compatible with any other + frameworks, like tensorflow, pytorch or mxnet. By adding `@parl.remote_class` + decorator to their codes, users can easily convert their codes to distributed + computation. + +Why PARL +######## + +High throughput +############### +| PARL uses a point-to-point connection for network communication in the + cluster. Unlike other framework like RLlib which replies on redis for + communication, PARL is able to achieve much higher throughput. The results + can be found in figure (b). With the same implementation in IMPALA, PARL + achieved an increase of 160% on data throughout over Ray(RLlib). + +Automatic deployment +#################### +| Unlike other parallel frameworks which fail to import modules from + external file, PARL will automatically package all related files and send + them to remote machines. + +.. image:: ./comparison.png + :width: 600px + :align: center diff --git a/docs/parallel_training/recommended_practice.rst b/docs/parallel_training/recommended_practice.rst index 09d867d..b67675f 100644 --- a/docs/parallel_training/recommended_practice.rst +++ b/docs/parallel_training/recommended_practice.rst @@ -19,7 +19,7 @@ Here we reveal the performance of Python threads. At first, let's run the follow ans += i a = A() for _ in range(5): - a.run() + a.run() | This code takes **17.46** seconds to finish counting from 1 to 1e8 for five times. | Now let's implement a thread-based code using the Python library, ``threading``, as shown below. diff --git a/parl/remote/client.py b/parl/remote/client.py index d5556e5..c2781df 100644 --- a/parl/remote/client.py +++ b/parl/remote/client.py @@ -147,7 +147,6 @@ class Client(object): to_byte(str(self.actor_num)), to_byte(str(elapsed_time)) ]) - except zmq.error.Again as e: logger.warning("[Client] Cannot connect to the master." "Please check if it is still alive.") @@ -195,8 +194,18 @@ class Client(object): try: job_heartbeat_socket.send_multipart( [remote_constants.HEARTBEAT_TAG]) - _ = job_heartbeat_socket.recv_multipart() - time.sleep(remote_constants.HEARTBEAT_INTERVAL_S) + job_message = job_heartbeat_socket.recv_multipart() + stop_job = to_str(job_message[1]) + job_address = to_str(job_message[2]) + + if stop_job == 'True': + logger.error( + 'Job {} exceeds max memory usage, will stop this job.'. + format(job_address)) + self.actor_num -= 1 + job_is_alive = False + else: + time.sleep(remote_constants.HEARTBEAT_INTERVAL_S) except zmq.error.Again as e: job_is_alive = False diff --git a/parl/remote/cluster_monitor.py b/parl/remote/cluster_monitor.py index df9e3ca..99bc2be 100644 --- a/parl/remote/cluster_monitor.py +++ b/parl/remote/cluster_monitor.py @@ -106,6 +106,21 @@ class ClusterMonitor(object): self.status['clients'].pop(client_address) self.lock.release() + def get_status_info(self): + """Return a message of current cluster status.""" + self.lock.acquire() + worker_num = len(self.status['workers']) + clients_num = len(self.status['clients']) + used_cpus = 0 + vacant_cpus = 0 + for worker in self.status['workers'].values(): + used_cpus += worker['used_cpus'] + vacant_cpus += worker['vacant_cpus'] + self.lock.release() + status_info = "has {} used cpus, {} vacant cpus.".format( + used_cpus, vacant_cpus) + return status_info + def get_status(self): """Return a cloudpickled status.""" self.lock.acquire() diff --git a/parl/remote/job.py b/parl/remote/job.py index 9c537ea..1f2a124 100644 --- a/parl/remote/job.py +++ b/parl/remote/job.py @@ -18,6 +18,8 @@ os.environ['XPARL'] = 'True' import argparse import cloudpickle import pickle +import psutil +import re import sys import tempfile import threading @@ -45,9 +47,15 @@ class Job(object): """ Args: worker_address(str): worker_address for sending job information(e.g, pid) + + Attributes: + pid (int): Job process ID. + max_memory (float): Maximum memory (MB) can be used by each remote instance. """ self.job_is_alive = True self.worker_address = worker_address + self.pid = os.getpid() + self.max_memory = None self.lock = threading.Lock() self._create_sockets() @@ -104,14 +112,15 @@ class Job(object): initialized_job = InitializedJob( self.job_address, worker_heartbeat_address, client_heartbeat_address, self.ping_heartbeat_address, None, - os.getpid()) + self.pid) self.job_socket.send_multipart( [remote_constants.NORMAL_TAG, cloudpickle.dumps(initialized_job)]) message = self.job_socket.recv_multipart() worker_thread.start() - assert message[0] == remote_constants.NORMAL_TAG + tag = message[0] + assert tag == remote_constants.NORMAL_TAG # create the kill_job_socket kill_job_address = to_str(message[1]) self.kill_job_socket = self.ctx.socket(zmq.REQ) @@ -119,6 +128,16 @@ class Job(object): zmq.RCVTIMEO, remote_constants.HEARTBEAT_TIMEOUT_S * 1000) self.kill_job_socket.connect("tcp://{}".format(kill_job_address)) + def _check_used_memory(self): + """Check if the memory used by this job exceeds self.max_memory.""" + stop_job = False + if self.max_memory is not None: + process = psutil.Process(self.pid) + used_memory = float(process.memory_info()[0]) / (1024**2) + if used_memory > self.max_memory: + stop_job = True + return stop_job + def _reply_ping(self, socket): """Create a socket server that reply the ping signal from client. This signal is used to make sure that the job is still alive. @@ -145,11 +164,18 @@ class Job(object): If the job losts connection with the client, it will exit too. """ self.client_is_alive = True - while self.client_is_alive: + while self.client_is_alive and self.job_is_alive: try: message = socket.recv_multipart() - socket.send_multipart([remote_constants.HEARTBEAT_TAG]) - + stop_job = self._check_used_memory() + socket.send_multipart([ + remote_constants.HEARTBEAT_TAG, + to_byte(str(stop_job)), + to_byte(self.job_address) + ]) + if stop_job == True: + socket.close(0) + os._exit(1) except zmq.error.Again as e: logger.warning( "[Job] Cannot connect to the client. This job will exit and inform the worker." @@ -178,7 +204,6 @@ class Job(object): try: message = socket.recv_multipart() socket.send_multipart([remote_constants.HEARTBEAT_TAG]) - except zmq.error.Again as e: logger.warning("[Job] Cannot connect to the worker{}. ".format( self.worker_address) + "Job will quit.") @@ -234,6 +259,9 @@ class Job(object): if tag == remote_constants.INIT_OBJECT_TAG: cls = cloudpickle.loads(message[1]) args, kwargs = cloudpickle.loads(message[2]) + max_memory = to_str(message[3]) + if max_memory != 'None': + self.max_memory = float(max_memory) try: obj = cls(*args, **kwargs) diff --git a/parl/remote/master.py b/parl/remote/master.py index a614330..a5d09ad 100644 --- a/parl/remote/master.py +++ b/parl/remote/master.py @@ -58,10 +58,11 @@ class Master(object): """ def __init__(self, port): - logger.set_dir(os.path.expanduser('~/.parl_data/master/')) self.ctx = zmq.Context() - self.master_ip = get_ip_address() + logger.set_dir( + os.path.expanduser('~/.parl_data/master/{}:{}'.format( + self.master_ip, port))) self.client_socket = self.ctx.socket(zmq.REP) self.client_socket.bind("tcp://*:{}".format(port)) self.client_socket.linger = 0 @@ -178,8 +179,14 @@ class Master(object): self.client_socket.send_multipart( [remote_constants.NORMAL_TAG, status]) - elif tag == remote_constants.WORKER_INITIALIZED_TAG: + # `xparl status` command line API + elif tag == remote_constants.STATUS_TAG: + status_info = self.cluster_monitor.get_status_info() + self.client_socket.send_multipart( + [remote_constants.NORMAL_TAG, + to_byte(status_info)]) + elif tag == remote_constants.WORKER_INITIALIZED_TAG: initialized_worker = cloudpickle.loads(message[1]) worker_address = initialized_worker.worker_address self.job_center.add_worker(initialized_worker) diff --git a/parl/remote/monitor.py b/parl/remote/monitor.py index 7723bc3..5511bdc 100644 --- a/parl/remote/monitor.py +++ b/parl/remote/monitor.py @@ -92,7 +92,7 @@ def cluster(): if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--monitor_port', default=1234, type=int) - parser.add_argument('--address', default='localhost:1234', type=str) + parser.add_argument('--address', default='localhost:8010', type=str) args = parser.parse_args() CLUSTER_MONITOR = ClusterMonitor(args.address) diff --git a/parl/remote/remote_constants.py b/parl/remote/remote_constants.py index 753aa0c..8f49da5 100644 --- a/parl/remote/remote_constants.py +++ b/parl/remote/remote_constants.py @@ -17,6 +17,7 @@ CONNECT_TAG = b'[CONNECT]' HEARTBEAT_TAG = b'[HEARTBEAT]' KILLJOB_TAG = b'[KILLJOB]' MONITOR_TAG = b'[MONITOR]' +STATUS_TAG = b'[STATUS]' WORKER_CONNECT_TAG = b'[WORKER_CONNECT]' WORKER_INITIALIZED_TAG = b'[WORKER_INITIALIZED]' diff --git a/parl/remote/remote_decorator.py b/parl/remote/remote_decorator.py index 0248947..b084117 100644 --- a/parl/remote/remote_decorator.py +++ b/parl/remote/remote_decorator.py @@ -28,7 +28,7 @@ from parl.remote.exceptions import RemoteError, RemoteAttributeError,\ from parl.remote.client import get_global_client -def remote_class(cls): +def remote_class(*args, **kwargs): """A Python decorator that enables a class to run all its functions remotely. @@ -43,7 +43,7 @@ def remote_class(cls): .. code-block:: python - @remote_class + @parl.remote_class class Actor(object): def __init__(self, x): self.x = x @@ -55,6 +55,16 @@ def remote_class(cls): actor = Actor() actor.step() + # Set maximum memory usage to 300 MB for each object. + @parl.remote_class(max_memory=300) + class LimitedActor(object): + ... + + Args: + max_memory (float): Maximum memory (MB) can be used by each remote + instance, the unit is in MB and default value is + none(unlimited). + Returns: A remote wrapper for the remote class. @@ -63,137 +73,148 @@ def remote_class(cls): by `parl.connect(master_address)` beforehand. """ - class RemoteWrapper(object): - """ - Wrapper for remote class in client side. - """ - - def __init__(self, *args, **kwargs): + def decorator(cls): + class RemoteWrapper(object): """ - Args: - args, kwargs: arguments for the initialization of the unwrapped - class. + Wrapper for remote class in client side. """ - self.GLOBAL_CLIENT = get_global_client() - - self.ctx = self.GLOBAL_CLIENT.ctx - - # GLOBAL_CLIENT will set `master_is_alive` to False when hearbeat - # finds the master is dead. - if self.GLOBAL_CLIENT.master_is_alive: - job_address = self.request_cpu_resource(self.GLOBAL_CLIENT) - else: - raise Exception("Can not submit job to the master. " - "Please check if master is still alive.") - - if job_address is None: - raise ResourceError("Cannot submit the job to the master. " - "Please add more CPU resources to the " - "master or try again later.") - - self.internal_lock = threading.Lock() - - # Send actor commands like `init` and `call` to the job. - self.job_socket = self.ctx.socket(zmq.REQ) - self.job_socket.linger = 0 - self.job_socket.connect("tcp://{}".format(job_address)) - self.job_address = job_address - self.job_shutdown = False - - self.send_file(self.job_socket) - - self.job_socket.send_multipart([ - remote_constants.INIT_OBJECT_TAG, - cloudpickle.dumps(cls), - cloudpickle.dumps([args, kwargs]) - ]) - message = self.job_socket.recv_multipart() - tag = message[0] - if tag == remote_constants.EXCEPTION_TAG: - traceback_str = to_str(message[1]) - self.job_shutdown = True - raise RemoteError('__init__', traceback_str) - - def __del__(self): - """Delete the remote class object and release remote resources.""" - if not self.job_shutdown: - try: - self.job_socket.send_multipart( - [remote_constants.KILLJOB_TAG]) - _ = self.job_socket.recv_multipart() - self.job_socket.close(0) - except AttributeError: - pass - - def send_file(self, socket): - try: - socket.send_multipart([ - remote_constants.SEND_FILE_TAG, self.GLOBAL_CLIENT.pyfiles - ]) - _ = socket.recv_multipart() - except zmq.error.Again as e: - logger.error("Send python files failed.") - - def request_cpu_resource(self, global_client): - """Try to request cpu resource for 1 second/time for 300 times.""" - cnt = 300 - while cnt > 0: - job_address = global_client.submit_job() - if job_address is not None: - return job_address - if cnt % 30 == 0: - logger.warning("No vacant cpu resources at the moment, " - "will try {} times later.".format(cnt)) - cnt -= 1 - return None - - def __getattr__(self, attr): - """Call the function of the unwrapped class.""" - - def wrapper(*args, **kwargs): - if self.job_shutdown: - raise RemoteError( - attr, "This actor losts connection with the job.") - self.internal_lock.acquire() - data = dumps_argument(*args, **kwargs) - - self.job_socket.send_multipart( - [remote_constants.CALL_TAG, - to_byte(attr), data]) + def __init__(self, *args, **kwargs): + """ + Args: + args, kwargs: arguments for the initialization of the unwrapped + class. + """ + self.GLOBAL_CLIENT = get_global_client() + + self.ctx = self.GLOBAL_CLIENT.ctx + + # GLOBAL_CLIENT will set `master_is_alive` to False when hearbeat + # finds the master is dead. + if self.GLOBAL_CLIENT.master_is_alive: + job_address = self.request_cpu_resource(self.GLOBAL_CLIENT) + else: + raise Exception("Can not submit job to the master. " + "Please check if master is still alive.") + + if job_address is None: + raise ResourceError("Cannot submit the job to the master. " + "Please add more CPU resources to the " + "master or try again later.") + + self.internal_lock = threading.Lock() + + # Send actor commands like `init` and `call` to the job. + self.job_socket = self.ctx.socket(zmq.REQ) + self.job_socket.linger = 0 + self.job_socket.connect("tcp://{}".format(job_address)) + self.job_address = job_address + self.job_shutdown = False + + self.send_file(self.job_socket) + + self.job_socket.send_multipart([ + remote_constants.INIT_OBJECT_TAG, + cloudpickle.dumps(cls), + cloudpickle.dumps([args, kwargs]), + to_byte(str(max_memory)) + ]) message = self.job_socket.recv_multipart() tag = message[0] + if tag == remote_constants.EXCEPTION_TAG: + traceback_str = to_str(message[1]) + self.job_shutdown = True + raise RemoteError('__init__', traceback_str) + + def __del__(self): + """Delete the remote class object and release remote resources.""" + if not self.job_shutdown: + try: + self.job_socket.send_multipart( + [remote_constants.KILLJOB_TAG]) + _ = self.job_socket.recv_multipart() + self.job_socket.close(0) + except AttributeError: + pass + except zmq.error.ZMQError: + pass + + def send_file(self, socket): + try: + socket.send_multipart([ + remote_constants.SEND_FILE_TAG, + self.GLOBAL_CLIENT.pyfiles + ]) + _ = socket.recv_multipart() + except zmq.error.Again as e: + logger.error("Send python files failed.") + + def request_cpu_resource(self, global_client): + """Try to request cpu resource for 1 second/time for 300 times.""" + cnt = 300 + while cnt > 0: + job_address = global_client.submit_job() + if job_address is not None: + return job_address + if cnt % 30 == 0: + logger.warning( + "No vacant cpu resources at the moment, " + "will try {} times later.".format(cnt)) + cnt -= 1 + return None + + def __getattr__(self, attr): + """Call the function of the unwrapped class.""" + + def wrapper(*args, **kwargs): + if self.job_shutdown: + raise RemoteError( + attr, "This actor losts connection with the job.") + self.internal_lock.acquire() + data = dumps_argument(*args, **kwargs) - if tag == remote_constants.NORMAL_TAG: - ret = loads_return(message[1]) + self.job_socket.send_multipart( + [remote_constants.CALL_TAG, + to_byte(attr), data]) - elif tag == remote_constants.EXCEPTION_TAG: - error_str = to_str(message[1]) - self.job_shutdown = True - raise RemoteError(attr, error_str) + message = self.job_socket.recv_multipart() + tag = message[0] - elif tag == remote_constants.ATTRIBUTE_EXCEPTION_TAG: - error_str = to_str(message[1]) - self.job_shutdown = True - raise RemoteAttributeError(attr, error_str) + if tag == remote_constants.NORMAL_TAG: + ret = loads_return(message[1]) - elif tag == remote_constants.SERIALIZE_EXCEPTION_TAG: - error_str = to_str(message[1]) - self.job_shutdown = True - raise RemoteSerializeError(attr, error_str) + elif tag == remote_constants.EXCEPTION_TAG: + error_str = to_str(message[1]) + self.job_shutdown = True + raise RemoteError(attr, error_str) - elif tag == remote_constants.DESERIALIZE_EXCEPTION_TAG: - error_str = to_str(message[1]) - self.job_shutdown = True - raise RemoteDeserializeError(attr, error_str) + elif tag == remote_constants.ATTRIBUTE_EXCEPTION_TAG: + error_str = to_str(message[1]) + self.job_shutdown = True + raise RemoteAttributeError(attr, error_str) - else: - self.job_shutdown = True - raise NotImplementedError() + elif tag == remote_constants.SERIALIZE_EXCEPTION_TAG: + error_str = to_str(message[1]) + self.job_shutdown = True + raise RemoteSerializeError(attr, error_str) + + elif tag == remote_constants.DESERIALIZE_EXCEPTION_TAG: + error_str = to_str(message[1]) + self.job_shutdown = True + raise RemoteDeserializeError(attr, error_str) + + else: + self.job_shutdown = True + raise NotImplementedError() + + self.internal_lock.release() + return ret - self.internal_lock.release() - return ret + return wrapper - return wrapper + return RemoteWrapper - return RemoteWrapper + max_memory = kwargs.get('max_memory') + if len(args) == 1 and callable(args[0]): + return decorator(args[0]) + return decorator diff --git a/parl/remote/scripts.py b/parl/remote/scripts.py index adbdf0c..0ddce5c 100644 --- a/parl/remote/scripts.py +++ b/parl/remote/scripts.py @@ -13,18 +13,20 @@ # limitations under the License. import click -import socket import locale -import sys -import random -import os import multiprocessing +import os +import random +import re +import socket import subprocess +import sys import threading import warnings import zmq from multiprocessing import Process -from parl.utils import get_ip_address +from parl.utils import get_ip_address, to_str +from parl.remote.remote_constants import STATUS_TAG # A flag to mark if parl is started from a command line os.environ['XPARL'] = 'True' @@ -43,7 +45,7 @@ def get_free_tcp_port(): tcp.bind(('', 0)) addr, port = tcp.getsockname() tcp.close() - return port + return str(port) def is_port_available(port): @@ -86,10 +88,18 @@ def cli(): type=int, help="Set number of cpu manually. If not set, it will use all " "cpus of this machine.") -def start_master(port, cpu_num): +@click.option( + "--monitor_port", help="The port to start a cluster monitor.", type=str) +def start_master(port, cpu_num, monitor_port): if not is_port_available(port): raise Exception( - "The master address localhost:{} already in use.".format(port)) + "The master address localhost:{} is already in use.".format(port)) + + if monitor_port and not is_port_available(monitor_port): + raise Exception( + "The input monitor port localhost:{} is already in use.".format( + monitor_port)) + cpu_num = cpu_num if cpu_num else multiprocessing.cpu_count() start_file = __file__.replace('scripts.pyc', 'start.py') start_file = start_file.replace('scripts.py', 'start.py') @@ -105,7 +115,7 @@ def start_master(port, cpu_num): FNULL = open(os.devnull, 'w') p = subprocess.Popen(command, stdout=FNULL, stderr=subprocess.STDOUT) - monitor_port = get_free_tcp_port() + monitor_port = monitor_port if monitor_port else get_free_tcp_port() command = [ sys.executable, '{}/monitor.py'.format(__file__[:__file__.rfind('/')]), @@ -115,23 +125,28 @@ def start_master(port, cpu_num): p = subprocess.Popen(command, stdout=FNULL, stderr=subprocess.STDOUT) FNULL.close() + master_ip = get_ip_address() cluster_info = """ # The Parl cluster is started at localhost:{}. # A local worker with {} CPUs is connected to the cluster. - ## If you want to check cluster status, visit: + ## If you want to check cluster status, please view: http://{}:{}. + + or call: + + xparl status - ## If you want to add more CPU resources, call: + ## If you want to add more CPU resources, please call: - xparl connect --address localhost:{} + xparl connect --address {}:{} - ## If you want to shutdown the cluster, call: + ## If you want to shutdown the cluster, please call: - xparl stop""".format(port, cpu_num, get_ip_address(), monitor_port, - port) + xparl stop + """.format(port, cpu_num, master_ip, monitor_port, master_ip, port) click.echo(cluster_info) @@ -168,9 +183,40 @@ def stop(): subprocess.call([command], shell=True) +@click.command("status") +def status(): + cmd = r'ps -ef | grep remote/monitor.py\ --monitor_port' + content = os.popen(cmd).read() + pattern = re.compile('--monitor_port (.*?)\n', re.S) + monitors = pattern.findall(content) + if len(monitors) == 0: + click.echo('No active cluster is found.') + else: + ctx = zmq.Context() + status = [] + for monitor in monitors: + monitor_port, _, master_address = monitor.split(' ') + master_ip = master_address.split(':')[0] + monitor_address = "{}:{}".format(master_ip, monitor_port) + socket = ctx.socket(zmq.REQ) + socket.connect('tcp://{}'.format(master_address)) + socket.send_multipart([STATUS_TAG]) + cluster_info = to_str(socket.recv_multipart()[1]) + msg = """ + # Cluster {} {} + + # If you want to check cluster status, please view: http://{} + """.format(master_address, cluster_info, monitor_address) + status.append(msg) + socket.close(0) + for monitor_status in status: + click.echo(monitor_status) + + cli.add_command(start_worker) cli.add_command(start_master) cli.add_command(stop) +cli.add_command(status) def main(): diff --git a/parl/remote/static/js/parl.js b/parl/remote/static/js/parl.js index dc96113..a9d0d0b 100644 --- a/parl/remote/static/js/parl.js +++ b/parl/remote/static/js/parl.js @@ -138,8 +138,8 @@ function addPlots(res, record, imgHandle, begin, end) { ] }; - if (i < record_num && worker.worker_address === record[i].worker_address) { - if (worker.cpu_num !== record[i].cpu_num) { + if (i < record_num && worker.hostname === record[i].hostname) { + if (worker.used_cpus !== record[i].used_cpus) { imgHandle[`w${i}c0`].setOption(cpuOption); } if (worker.used_memory !== record[i].used_memory) { @@ -155,10 +155,10 @@ function addPlots(res, record, imgHandle, begin, end) { } record[i] = { - worker_address: worker.worker_address, - used_cpu: worker.used_cpu, - vacant_cpu: worker.vacant_cpu, - used_memory: worker.used_cpu, + hostname: worker.hostname, + used_cpus: worker.used_cpus, + vacant_cpus: worker.vacant_cpus, + used_memory: worker.used_memory, vacant_memory: worker.vacant_memory }; } diff --git a/parl/remote/templates/workers.html b/parl/remote/templates/workers.html index e1bd8ce..78d2925 100644 --- a/parl/remote/templates/workers.html +++ b/parl/remote/templates/workers.html @@ -44,10 +44,8 @@ var delta = 3; $(document).ready(function() { - console.log('After ready.'); $.get("cluster", function(data, status) { res = data; - console.log('Get first data.', res); createDivs(res, start_num); addPlots(res, record, imgHandle, 0, start_num); }); @@ -55,7 +53,6 @@ setInterval(function() { $.get("cluster", function(data, status) { res = data; - console.log('Interval', res); createDivs(res, start_num); addPlots(res, record, imgHandle, 0, start_num); }); diff --git a/parl/remote/tests/actor_max_memory_test.py b/parl/remote/tests/actor_max_memory_test.py new file mode 100644 index 0000000..5747299 --- /dev/null +++ b/parl/remote/tests/actor_max_memory_test.py @@ -0,0 +1,66 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import parl +import unittest +import time +import threading + +from parl.remote.master import Master +from parl.remote.worker import Worker +from parl.remote.client import disconnect +from parl.remote.monitor import ClusterMonitor + + +@parl.remote_class(max_memory=200) +class Actor(object): + def __init__(self, x=10): + self.x = x + self.data = [] + + def add_100mb(self): + self.data.append(os.urandom(100 * 1024**2)) + self.x += 1 + return self.x + + +class TestMaxMemory(unittest.TestCase): + def tearDown(self): + disconnect() + + def test_max_memory(self): + port = 3001 + master = Master(port=port) + th = threading.Thread(target=master.run) + th.start() + time.sleep(1) + worker = Worker('localhost:{}'.format(port), 1) + cluster_monitor = ClusterMonitor('localhost:{}'.format(port)) + time.sleep(1) + parl.connect('localhost:{}'.format(port)) + actor = Actor() + time.sleep(30) + self.assertEqual(1, cluster_monitor.data['clients'][0]['actor_num']) + actor.add_100mb() + time.sleep(50) + self.assertEqual(0, cluster_monitor.data['clients'][0]['actor_num']) + actor.job_socket.close(0) + del actor + worker.exit() + master.exit() + + +if __name__ == '__main__': + unittest.main() diff --git a/parl/remote/tests/cluster_status_test.py b/parl/remote/tests/cluster_status_test.py new file mode 100644 index 0000000..8dab165 --- /dev/null +++ b/parl/remote/tests/cluster_status_test.py @@ -0,0 +1,63 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import parl +import unittest +import time +import threading + +from parl.remote.master import Master +from parl.remote.worker import Worker +from parl.remote.client import disconnect +from parl.remote.monitor import ClusterMonitor + + +@parl.remote_class(max_memory=200) +class Actor(object): + def __init__(self, x=10): + self.x = x + self.data = [] + + def add_100mb(self): + self.data.append(os.urandom(100 * 1024**2)) + self.x += 1 + return self.x + + +class TestClusterStatus(unittest.TestCase): + def tearDown(self): + disconnect + + def test_cluster_status(self): + port = 4321 + master = Master(port=port) + th = threading.Thread(target=master.run) + th.start() + time.sleep(1) + worker = Worker('localhost:{}'.format(port), 1) + time.sleep(5) + status_info = master.cluster_monitor.get_status_info() + self.assertEqual(status_info, 'has 0 used cpus, 1 vacant cpus.') + parl.connect('localhost:{}'.format(port)) + actor = Actor() + time.sleep(30) + status_info = master.cluster_monitor.get_status_info() + self.assertEqual(status_info, 'has 1 used cpus, 0 vacant cpus.') + worker.exit() + master.exit() + + +if __name__ == '__main__': + unittest.main() diff --git a/parl/remote/worker.py b/parl/remote/worker.py index f9f1a2c..20d5bf7 100644 --- a/parl/remote/worker.py +++ b/parl/remote/worker.py @@ -170,9 +170,10 @@ class Worker(object): def _fill_job_buffer(self): """An endless loop that adds initialized job into the job buffer""" while self.worker_is_alive: - initialized_jobs = self._init_jobs(job_num=self.cpu_num) - for job in initialized_jobs: - self.job_buffer.put(job) + if self.job_buffer.full() is False: + initialized_jobs = self._init_jobs(job_num=self.cpu_num) + for job in initialized_jobs: + self.job_buffer.put(job) # release jobs if the worker is not alive for job in initialized_jobs: @@ -269,7 +270,6 @@ class Worker(object): [remote_constants.HEARTBEAT_TAG]) _ = job_heartbeat_socket.recv_multipart() time.sleep(remote_constants.HEARTBEAT_INTERVAL_S) - except zmq.error.Again as e: job.is_alive = False logger.warning( @@ -291,7 +291,8 @@ class Worker(object): while self.worker_is_alive and self.master_is_alive: try: message = self.kill_job_socket.recv_multipart() - assert message[0] == remote_constants.KILLJOB_TAG + tag = message[0] + assert tag == remote_constants.KILLJOB_TAG to_kill_job_address = to_str(message[1]) self._kill_job(to_kill_job_address) self.kill_job_socket.send_multipart( -- GitLab