コード例 #1
0
def _ConstructDebuggerPluginWithGrpcPort(context):
    try:
        # pylint: disable=line-too-long,g-import-not-at-top
        from tensorboard.plugins.debugger import debugger_plugin as debugger_plugin_lib
        from tensorboard.plugins.debugger import interactive_debugger_plugin as interactive_debugger_plugin_lib
        # pylint: enable=line-too-long,g-import-not-at-top
    except ImportError as err:
        (unused_type, unused_value, traceback) = sys.exc_info()
        six.reraise(
            ImportError,
            ImportError(err.message +
                        '\n\nTo use the debugger plugin, you need to have '
                        'gRPC installed:\n  pip install grpcio'), traceback)

    if FLAGS.debugger_port > 0:
        interactive_plugin = (
            interactive_debugger_plugin_lib.InteractiveDebuggerPlugin(context))
        tf.logging.info('Starting Interactive Debugger Plugin at gRPC port %d',
                        FLAGS.debugger_data_server_grpc_port)
        interactive_plugin.listen(FLAGS.debugger_port)
        return interactive_plugin
    elif FLAGS.debugger_data_server_grpc_port > 0:
        noninteractive_plugin = debugger_plugin_lib.DebuggerPlugin(context)
        tf.logging.info(
            'Starting Non-interactive Debugger Plugin at gRPC port %d',
            FLAGS.debugger_data_server_grpc_port)
        noninteractive_plugin.listen(FLAGS.debugger_data_server_grpc_port)
        return noninteractive_plugin
    return None
コード例 #2
0
def _ConstructDebuggerPluginWithGrpcPort(context):
    try:
        # pylint: disable=line-too-long,g-import-not-at-top
        from tensorboard.plugins.debugger import debugger_plugin as debugger_plugin_lib
        from tensorboard.plugins.debugger import interactive_debugger_plugin as interactive_debugger_plugin_lib
        # pylint: enable=line-too-long,g-import-not-at-top
    except ImportError as e:
        e_type, e_value, e_traceback = sys.exc_info()
        message = e.msg if hasattr(e,
                                   'msg') else e.message  # Handle py2 vs py3
        if 'grpc' in message:
            e_value = ImportError(
                message + '\n\nTo use the debugger plugin, you need to have '
                'gRPC installed:\n  pip install grpcio')
        six.reraise(e_type, e_value, e_traceback)

    if FLAGS.debugger_port > 0:
        interactive_plugin = (
            interactive_debugger_plugin_lib.InteractiveDebuggerPlugin(context))
        tf.logging.info('Starting Interactive Debugger Plugin at gRPC port %d',
                        FLAGS.debugger_data_server_grpc_port)
        interactive_plugin.listen(FLAGS.debugger_port)
        return interactive_plugin
    elif FLAGS.debugger_data_server_grpc_port > 0:
        noninteractive_plugin = debugger_plugin_lib.DebuggerPlugin(context)
        tf.logging.info(
            'Starting Non-interactive Debugger Plugin at gRPC port %d',
            FLAGS.debugger_data_server_grpc_port)
        noninteractive_plugin.listen(FLAGS.debugger_data_server_grpc_port)
        return noninteractive_plugin
    return None
コード例 #3
0
  def testHealthPillsPluginIsInactive(self):
    plugin = debugger_plugin.DebuggerPlugin(
        base_plugin.TBContext(
            logdir=self.log_dir,
            multiplexer=event_multiplexer.EventMultiplexer({})))
    plugin.listen(self.debugger_data_server_grpc_port)

    # The multiplexer lacks sampled health pills.
    self.assertFalse(plugin.is_active())
コード例 #4
0
    def load(self, context):
        """Returns the debugger plugin, if possible.

        Args:
          context: The TBContext flags including `add_arguments`.

        Returns:
          A DebuggerPlugin instance or None if it couldn't be loaded.
        """
        flags = context.flags
        if flags.debugger_data_server_grpc_port > 0 or flags.debugger_port > 0:
            # Verify that the required Python packages are installed.
            try:
                # pylint: disable=unused-import
                import tensorflow  # noqa: F401
            except ImportError:
                raise ImportError(
                    "To use the debugger plugin, you need to have TensorFlow installed:\n"
                    "  pip install tensorflow"
                )

        if flags.debugger_data_server_grpc_port > 0:
            from tensorboard.plugins.debugger import (
                debugger_plugin as debugger_plugin_lib,
            )

            # debugger_data_server_grpc opens the non-interactive Debugger Plugin,
            # which appears as health pills in the Graph Plugin.
            noninteractive_plugin = debugger_plugin_lib.DebuggerPlugin(context)
            logger.info(
                "Starting Non-interactive Debugger Plugin at gRPC port %d",
                flags.debugger_data_server_grpc_port,
            )
            noninteractive_plugin.listen(flags.debugger_data_server_grpc_port)
            return noninteractive_plugin
        elif flags.debugger_port > 0:
            from tensorboard.plugins.debugger import (
                interactive_debugger_plugin as interactive_debugger_plugin_lib,
            )

            interactive_plugin = interactive_debugger_plugin_lib.InteractiveDebuggerPlugin(
                context
            )
            logger.info(
                "Starting Interactive Debugger Plugin at gRPC port %d",
                flags.debugger_data_server_grpc_port,
            )
            interactive_plugin.listen(flags.debugger_port)
            return interactive_plugin
        else:
            # If neither the debugger_data_server_grpc_port flag or the grpc_port
            # flag is specified, we instantiate a dummy plugin as a placeholder for
            # the frontend. The dummy plugin will display a message indicating that
            # the plugin is not active. It'll also display a command snippet to
            # illustrate how to activate the interactive Debugger Plugin.
            return InactiveDebuggerPlugin()
コード例 #5
0
  def testDebuggerDataServerNotStartedWhenPortIsNone(self):
    """Tests that the plugin starts no debugger data server if port is None."""
    self.mock_debugger_data_server_class.reset_mock()

    # Initialize a debugger plugin with no GRPC port provided.
    debugger_plugin.DebuggerPlugin(self.context).get_plugin_apps()

    # No debugger data server should have been started.
    # assert_not_called is not available in Python 3.4.
    self.assertFalse(self.mock_debugger_data_server_class.called)
コード例 #6
0
    def load(self, context):
        """Returns the debugger plugin, if possible.

    Args:
      context: The TBContext flags including `add_arguments`.

    Returns:
      A DebuggerPlugin instance or None if it couldn't be loaded.
    """
        if not (context.flags.debugger_data_server_grpc_port > 0
                or context.flags.debugger_port > 0):
            return None
        flags = context.flags
        try:
            # pylint: disable=g-import-not-at-top,unused-import
            import tensorflow
        except ImportError:
            raise ImportError(
                'To use the debugger plugin, you need to have TensorFlow installed:\n'
                '  pip install tensorflow')
        try:
            # pylint: disable=line-too-long,g-import-not-at-top
            from tensorboard.plugins.debugger import debugger_plugin as debugger_plugin_lib
            from tensorboard.plugins.debugger import interactive_debugger_plugin as interactive_debugger_plugin_lib
            # pylint: enable=line-too-long,g-import-not-at-top
        except ImportError as e:
            e_type, e_value, e_traceback = sys.exc_info()
            message = e.msg if hasattr(
                e, 'msg') else e.message  # Handle py2 vs py3
            if 'grpc' in message:
                e_value = ImportError(
                    message +
                    '\n\nTo use the debugger plugin, you need to have '
                    'gRPC installed:\n  pip install grpcio')
            six.reraise(e_type, e_value, e_traceback)
        if flags.debugger_port > 0:
            interactive_plugin = (interactive_debugger_plugin_lib.
                                  InteractiveDebuggerPlugin(context))
            logger.info('Starting Interactive Debugger Plugin at gRPC port %d',
                        flags.debugger_data_server_grpc_port)
            interactive_plugin.listen(flags.debugger_port)
            return interactive_plugin
        elif flags.debugger_data_server_grpc_port > 0:
            noninteractive_plugin = debugger_plugin_lib.DebuggerPlugin(context)
            logger.info(
                'Starting Non-interactive Debugger Plugin at gRPC port %d',
                flags.debugger_data_server_grpc_port)
            noninteractive_plugin.listen(flags.debugger_data_server_grpc_port)
            return noninteractive_plugin
        raise AssertionError()
コード例 #7
0
def _ConstructDebuggerPluginWithGrpcPort(context):
    try:
        # pylint: disable=line-too-long,g-import-not-at-top
        from tensorboard.plugins.debugger import debugger_plugin as debugger_plugin_lib
        # pylint: enable=line-too-long,g-import-not-at-top
    except ImportError as err:
        (unused_type, unused_value, traceback) = sys.exc_info()
        six.reraise(
            ImportError,
            ImportError(err.message +
                        "\n\nTo use the debugger plugin, you need to have "
                        "gRPC installed:\n  pip install grpcio"), traceback)
    tf.logging.info("Starting Debugger Plugin at gRPC port %d",
                    FLAGS.debugger_data_server_grpc_port)
    debugger_plugin = debugger_plugin_lib.DebuggerPlugin(context)
    debugger_plugin.listen(FLAGS.debugger_data_server_grpc_port)
    return debugger_plugin
コード例 #8
0
  def setUp(self):
    super(DebuggerPluginTestBase, self).setUp()
    # Importing the debugger_plugin can sometimes unfortunately produce errors.
    try:
      # pylint: disable=g-import-not-at-top
      from tensorboard.plugins.debugger import debugger_plugin
      from tensorboard.plugins.debugger import debugger_server_lib
      # pylint: enable=g-import-not-at-top
    except Exception as e:  # pylint: disable=broad-except
      raise self.skipTest(
          'Skipping test because importing some modules failed: %r' % e)
    self.debugger_plugin_module = debugger_plugin

    # Populate the log directory with debugger event for run '.'.
    self.log_dir = self.get_temp_dir()
    file_prefix = tf.compat.as_bytes(
        os.path.join(self.log_dir, 'events.debugger'))
    writer = tf.pywrap_tensorflow.EventsWriter(file_prefix)
    device_name = '/job:localhost/replica:0/task:0/cpu:0'
    writer.WriteEvent(
        self._CreateEventWithDebugNumericSummary(
            device_name=device_name,
            op_name='layers/Matmul',
            output_slot=0,
            wall_time=42,
            step=2,
            list_of_values=(list(range(12)) +
                            [float(tf.float32.as_datatype_enum), 1.0, 3.0])))
    writer.WriteEvent(
        self._CreateEventWithDebugNumericSummary(
            device_name=device_name,
            op_name='layers/Matmul',
            output_slot=1,
            wall_time=43,
            step=7,
            list_of_values=(
                list(range(12)) +
                [float(tf.float64.as_datatype_enum), 2.0, 3.0, 3.0])))
    writer.WriteEvent(
        self._CreateEventWithDebugNumericSummary(
            device_name=device_name,
            op_name='logits/Add',
            output_slot=0,
            wall_time=1337,
            step=7,
            list_of_values=(list(range(12)) +
                            [float(tf.int32.as_datatype_enum), 2.0, 3.0, 3.0])))
    writer.WriteEvent(
        self._CreateEventWithDebugNumericSummary(
            device_name=device_name,
            op_name='logits/Add',
            output_slot=0,
            wall_time=1338,
            step=8,
            list_of_values=(list(range(12)) +
                            [float(tf.int16.as_datatype_enum), 0.0])))
    writer.Close()

    # Populate the log directory with debugger event for run 'run_foo'.
    run_foo_directory = os.path.join(self.log_dir, 'run_foo')
    os.mkdir(run_foo_directory)
    file_prefix = tf.compat.as_bytes(
        os.path.join(run_foo_directory, 'events.debugger'))
    writer = tf.pywrap_tensorflow.EventsWriter(file_prefix)
    writer.WriteEvent(
        self._CreateEventWithDebugNumericSummary(
            device_name=device_name,
            op_name='layers/Variable',
            output_slot=0,
            wall_time=4242,
            step=42,
            list_of_values=(list(range(12)) +
                            [float(tf.int16.as_datatype_enum), 1.0, 8.0])))
    writer.Close()

    # Start a server that will receive requests and respond with health pills.
    self.multiplexer = event_multiplexer.EventMultiplexer({
        '.': self.log_dir,
        'run_foo': run_foo_directory,
    })
    self.debugger_data_server_grpc_port = portpicker.pick_unused_port()

    # Fake threading behavior so that threads are synchronous.
    tf.test.mock.patch('threading.Thread.start', threading.Thread.run).start()

    self.mock_debugger_data_server = tf.test.mock.Mock(
        debugger_server_lib.DebuggerDataServer)
    self.mock_debugger_data_server_class = tf.test.mock.Mock(
        debugger_server_lib.DebuggerDataServer,
        return_value=self.mock_debugger_data_server)

    tf.test.mock.patch.object(
        debugger_server_lib,
        'DebuggerDataServer',
        self.mock_debugger_data_server_class).start()

    self.context = base_plugin.TBContext(
        logdir=self.log_dir, multiplexer=self.multiplexer)
    self.plugin = debugger_plugin.DebuggerPlugin(self.context)
    self.plugin.listen(self.debugger_data_server_grpc_port)
    wsgi_app = application.TensorBoardWSGIApp(
        self.log_dir, [self.plugin], self.multiplexer, reload_interval=0,
        path_prefix='')
    self.server = werkzeug_test.Client(wsgi_app, wrappers.BaseResponse)

    # The debugger data server should be started at the correct port.
    self.mock_debugger_data_server_class.assert_called_once_with(
        self.debugger_data_server_grpc_port, self.log_dir)

    mock_debugger_data_server = self.mock_debugger_data_server
    start = mock_debugger_data_server.start_the_debugger_data_receiving_server
    self.assertEqual(1, start.call_count)
コード例 #9
0
ファイル: main.py プロジェクト: satya-panda/tensorboard
 def ConstructDebuggerPluginWithGrpcPort(context):
     debugger_plugin = debugger_plugin_lib.DebuggerPlugin(context)
     if FLAGS.debugger_data_server_grpc_port is not None:
         debugger_plugin.listen(FLAGS.debugger_data_server_grpc_port)
     return debugger_plugin