Esempio n. 1
0
    def get_task(self, request, _):
        res = elasticdl_pb2.Task()
        res.model_version = self._version
        res.minibatch_size = self._minibatch_size
        if request.task_type == elasticdl_pb2.EVALUATION:
            task_id, task = self._task_d.get_eval_task(request.worker_id)
        else:
            task_id, task = self._task_d.get(request.worker_id)

        if task:
            res.task_id = task_id
            res.shard_name = task.shard_name
            res.start = task.start
            res.end = task.end
            res.type = task.type
            for k, v in task.extended_config.items():
                res.extended_config[k] = v

            # For evaluation task, it will use the fixed version model
            if task.type == elasticdl_pb2.EVALUATION:
                res.model_version = task.model_version
        elif (not self._task_d.finished()) or (
                self._task_d.invoke_deferred_callback()):
            # If the todo and doing tasks are not empty,
            # Otherwise if the callback list is not empty,
            # we are trying to pop and invoke the callback.
            # Then the master tells the worker to wait
            # in case of new tasks later.
            res.type = elasticdl_pb2.WAIT
        with self._lock:
            self._worker_liveness_time[request.worker_id] = time.time()
        return res
Esempio n. 2
0
 def GetTask(self, request, _):
     res = elasticdl_pb2.Task()
     res.model_version = self._version
     res.minibatch_size = self._minibatch_size
     task_id, task = self._task_d.get(request.worker_id)
     if task:
         res.task_id = task_id
         res.shard_name = task.shard_name
         res.start = task.start
         res.end = task.end
         res.type = task.type
         # For evaluation task, it will use the fixed version model
         if task.type == elasticdl_pb2.EVALUATION:
             res.model_version = task.model_version
     elif not self._task_d.finished():
         # Not all tasks are finished, wait in case of new tasks later.
         res.type = elasticdl_pb2.WAIT
     return res
Esempio n. 3
0
    def get_task(self, task_type=None):
        """
        get task from master
        """
        req = elasticdl_pb2.GetTaskRequest()
        req.worker_id = self._worker_id
        if task_type is not None:
            req.task_type = task_type

        try:
            res = self._stub.get_task(req)
        except Exception:
            # Master may have stopped GRPC service when there are no more
            # tasks. This will result in a GRPC call exception.
            self.logger.info(
                "Cannot connect to master, assuming no more tasks")
            res = elasticdl_pb2.Task()
        return res
Esempio n. 4
0
    def get_task(self, task_type=None):
        """Get a task from master.

        Args:
            task_type: elasticdl_pb.TaskType
            the training phase, c.f. /elasticdl/proto/elasticdl.proto

        Returns:
            the task unit assigned by master,
            c.f. /elasticdl/proto/elasticdl.proto
        """

        req = elasticdl_pb2.GetTaskRequest()
        req.worker_id = self._worker_id
        if task_type is not None:
            req.task_type = task_type

        try:
            res = self._stub.get_task(req)
        except Exception:
            # the master node would stop the gRPC service if no more tasks.
            # And this will result a gRPC call exception.
            res = elasticdl_pb2.Task()
        return res
Esempio n. 5
0
 def get_task(self, request, _):
     return elasticdl_pb2.Task()