Пример #1
0
 def start_server(self):
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
     master_url = determine_master(port=self.port).split(':')[0]
     host = master_url.split(':')[0]
     sock.bind((host, self.port))
     sock.listen(5)
     self.socket = sock
     self.runs = True
     self.run()
Пример #2
0
    def start_flask_service(self):
        """Define Flask parameter server service.

        This HTTP server can do two things: get the current model
        parameters and update model parameters. After registering
        the `parameters` and `update` routes, the service will
        get started.

        """
        app = Flask(__name__)
        self.app = app

        @app.route('/')
        def home():
            return 'Elephas'

        @app.route('/parameters', methods=['GET'])
        def handle_get_parameters():
            if self.mode == 'asynchronous':
                self.lock.acquire_read()
            self.pickled_weights = pickle.dumps(self.weights, -1)
            pickled_weights = self.pickled_weights
            if self.mode == 'asynchronous':
                self.lock.release()
            return pickled_weights

        @app.route('/update', methods=['POST'])
        def handle_update_parameters():
            delta = pickle.loads(request.data)
            if self.mode == 'asynchronous':
                self.lock.acquire_write()

            if not self.master_network.built:
                self.master_network.build()

            # Just apply the gradient
            weights_before = self.weights
            self.weights = subtract_params(weights_before, delta)

            if self.mode == 'asynchronous':
                self.lock.release()
            return 'Update done'

        master_url = determine_master(self.port)
        host = master_url.split(':')[0]
        self.app.run(host=host,
                     debug=self.debug,
                     port=self.port,
                     threaded=self.threaded,
                     use_reloader=self.use_reloader)
Пример #3
0
 def stop_server(self):
     self.runs = False
     if self.socket:
         for thread in self.connections:
             thread.join()
             del thread
         self.socket.close()
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         try:
             host = determine_master(port=self.port).split(':')[0]
             sock.connect((host, self.port))
             sock.close()
         except Exception:
             pass
     self.socket = None
     self.connections = []
Пример #4
0
 def start(self):
     self.server.start()
     self.master_url = determine_master(self.port)