def setup_tensorboard(args): from tensorboard import notebook, manager import signal import shutil # Kill tensorboard for info in manager.get_all(): data_source = manager.data_source_from_info(info) print(f"port {info.port}: {data_source} (pid {info.pid})") if data_source == "logdir {args.output_dir}": pid = info.pid logger.info(f"Killing tensorboard at pid: {pid}") os.kill(pid, signal.SIGKILL) break # Delete output directory if os.path.exists(args.output_dir): logger.info(f"Deleting {args.output_dir}") shutil.rmtree(args.output_dir) logger.info(f"Creating {args.output_dir}") os.makedirs(args.output_dir) # Start notebook notebook.start(f"--logdir {args.output_dir}") # Kill tensorboard for info in manager.get_all(): data_source = manager.data_source_from_info(info) print(f"port {info.port}: {data_source} (pid {info.pid})") if data_source == "logdir {args.output_dir}": port = info.port print() notebook.display(port=port, height=1000) break
def list(): """Print a listing of known running TensorBoard instances. TensorBoard instances that were killed uncleanly (e.g., with SIGKILL or SIGQUIT) may appear in this list even if they are no longer running. Conversely, this list may be missing some entries if your operating system's temporary directory has been cleared since a still-running TensorBoard instance started. """ infos = manager.get_all() if not infos: print("No known TensorBoard instances running.") return print("Known TensorBoard instances:") for info in infos: template = ( " - port {port}: {data_source} (started {delta} ago; pid {pid})") print( template.format( port=info.port, data_source=manager.data_source_from_info(info), delta=_time_delta_from_info(info), pid=info.pid, ))
def _display(host=None, port=None, height=None, print_message=False, display_handle=None): """Internal version of `display`. Args: port: As with `display`. height: As with `display`. print_message: True to print which TensorBoard instance was selected for display (if applicable), or False otherwise. display_handle: If not None, an IPython display handle into which to render TensorBoard. """ if height is None: height = 800 if host is None: host = "localhost" if port is None: infos = manager.get_all() if not infos: raise ValueError( "Can't display TensorBoard: no known instances running.") else: info = max(manager.get_all(), key=lambda x: x.start_time) port = info.port else: infos = [i for i in manager.get_all() if i.port == port] info = (max(infos, key=lambda x: x.start_time) if infos else None) if print_message: if info is not None: message = ( "Selecting TensorBoard with {data_source} " "(started {delta} ago; port {port}, pid {pid}).").format( data_source=manager.data_source_from_info(info), delta=_time_delta_from_info(info), port=info.port, pid=info.pid, ) print(message) else: # The user explicitly provided a port, and we don't have any # additional information. There's nothing useful to say. pass fn = { _CONTEXT_COLAB: _display_colab, _CONTEXT_IPYTHON: _display_ipython, _CONTEXT_NONE: _display_cli, }[_get_context()] return fn(host=host, port=port, height=height, display_handle=display_handle)
def test_db_data_source_format(self): info = _make_info()._replace(logdir="", db="sqlite:~/bar") self.assertEqual(manager.data_source_from_info(info), "db sqlite:~/bar")
def test_logdir_data_source_format(self): info = _make_info()._replace(logdir="~/foo", db="") self.assertEqual(manager.data_source_from_info(info), "logdir ~/foo")