Exemple #1
0
 def run(self):
     better_exchook.install()
     while True:
         func = workerQueue.get()
         Logging.log("Next work item: %s" % func,
                     "remaining: %i" % workerQueue.qsize())
         with self.lock:
             self.cur_item = func
         try:
             func()
         except SystemExit:
             return
         except Exception:
             Logging.log_exception("Worker", *sys.exc_info())
         finally:
             # Note, this is buggy:
             # In case that func() adds itself back to the work-queue,
             # we would remove it here and then sometime later when we
             # execute it again, it's not in the set anymore.
             # Note that some other code also does not expect this.
             # TODO fix this
             if func in currentWork:
                 currentWork.remove(func)
                 # noinspection PyUnresolvedReferences
                 currentWork.save()
Exemple #2
0
def demo():
    """
  Will print out the different network topologies of the specified pretraining scheme.
  """
    import better_exchook
    better_exchook.install()
    import rnn
    import sys
    if len(sys.argv) <= 1:
        print("usage: python %s [config] [other options]" % __file__)
        print(
            "example usage: python %s ++pretrain default ++pretrain_construction_algo from_input"
            % __file__)
    rnn.init_config(command_line_options=sys.argv[1:])
    # noinspection PyProtectedMember
    rnn.config._hack_value_reading_debug()
    rnn.config.update({"log": []})
    rnn.init_log()
    rnn.init_backend_engine()
    if not rnn.config.value("pretrain", ""):
        print(
            "config option 'pretrain' not set, will set it for this demo to 'default'"
        )
        rnn.config.set("pretrain", "default")
    pretrain = pretrain_from_config(rnn.config)
    print("pretrain: %s" % pretrain)
    num_pretrain_epochs = pretrain.get_train_num_epochs()
    from pprint import pprint
    for epoch in range(1, 1 + num_pretrain_epochs):
        print("epoch %i (of %i) network json:" % (epoch, num_pretrain_epochs))
        net_json = pretrain.get_network_json_for_epoch(epoch)
        pprint(net_json)
    print("done.")
Exemple #3
0
def main(mod):
    """
    :param dict[str] mod:
    """
    import unittest
    better_exchook.install()
    if len(sys.argv) <= 1:
        for k, v in sorted(mod.items()):
            if k.startswith("test_"):
                print("-" * 40)
                print("Executing: %s" % k)
                try:
                    v()
                except unittest.SkipTest as exc:
                    print("SkipTest:", exc)
                print("-" * 40)
        print("Finished all tests.")
    else:
        assert len(sys.argv) >= 2
        for arg in sys.argv[1:]:
            print("Executing: %s" % arg)
            if arg in mod:
                mod[arg]()  # assume function and execute
            else:
                eval(arg)  # assume Python code and execute
def demo():
    import better_exchook
    better_exchook.install()
    import sys
    dsclazzeval = sys.argv[1]
    dataset = eval(dsclazzeval)
    assert isinstance(dataset, GeneratingDataset)
    assert dataset._input_classes and dataset._output_classes
    assert dataset.num_outputs["data"][1] == 2  # expect 1-hot
    assert dataset.num_outputs["classes"][1] == 1  # expect sparse
    for i in range(10):
        print("Seq idx %i:" % i)
        s = dataset.generate_seq(i)
        assert isinstance(s, DatasetSeq)
        features = s.features
        output_seq = s.targets["classes"]
        assert features.ndim == 2
        assert output_seq.ndim == 1
        input_seq = numpy.argmax(features, axis=1)
        input_seq_str = "".join([dataset._input_classes[i] for i in input_seq])
        output_seq_str = "".join(
            [dataset._output_classes[i] for i in output_seq])
        print(" %r" % input_seq_str)
        print(" %r" % output_seq_str)
        assert features.shape[1] == dataset.num_outputs["data"][0]
        assert features.shape[0] == output_seq.shape[0]
Exemple #5
0
def test():
	import better_exchook
	better_exchook.install()
	
	state = parse("/Library/Frameworks/SDL.framework/Headers/SDL.h")
	
	return state
Exemple #6
0
def demo():
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options]" % __file__)
    print("example usage: python %s ++pretrain default ++pretrain_construction_algo from_input" % __file__)
  rnn.initConfig(commandLineOptions=sys.argv[1:])
  rnn.config._hack_value_reading_debug()
  rnn.config.update({"log": []})
  rnn.initLog()
  rnn.initBackendEngine()
  if not rnn.config.value("pretrain", ""):
    print("config option 'pretrain' not set, will set it for this demo to 'default'")
    rnn.config.set("pretrain", "default")
  pretrain = pretrainFromConfig(rnn.config)
  print("pretrain: %s" % pretrain)
  num_pretrain_epochs = pretrain.get_train_num_epochs()
  from pprint import pprint
  for epoch in range(1, 1 + num_pretrain_epochs):
    print("epoch %i (of %i) network json:" % (epoch, num_pretrain_epochs))
    net_json = pretrain.get_network_json_for_epoch(epoch)
    pprint(net_json)
  print("done.")
def _demo():
    import better_exchook
    better_exchook.install()
    from argparse import ArgumentParser
    arg_parser = ArgumentParser()
    arg_parser.add_argument("--ogg")
    arg_parser.add_argument("--opts")
    arg_parser.add_argument("--kind")
    arg_parser.add_argument("--dim", type=int)
    arg_parser.add_argument("--end_frame",
                            type=int,
                            default=None,
                            help="e.g. 200, better for plotting")
    args = arg_parser.parse_args()
    lib_fn = get_auto_compiled_lib_filename(verbose=True)
    print("Lib filename:", lib_fn)
    lib = ParseOggVorbisLib()
    if args.ogg:
        raw_bytes = open(args.ogg, "rb").read()
        if args.opts:
            opts = eval(args.opts)
        else:
            opts = {}
        features = lib.get_features_from_raw_bytes(raw_bytes=raw_bytes,
                                                   kind=args.kind,
                                                   output_dim=args.dim,
                                                   **opts)
        _plot(features, end_frame=args.end_frame)
Exemple #8
0
def demo():
    """
    Some demo.
    """
    # some examples
    # this code produces this output: https://gist.github.com/922622

    try:
        x = {1: 2, "a": "b"}

        # noinspection PyMissingOrEmptyDocstring
        def f():
            y = "foo"
            # noinspection PyUnresolvedReferences,PyStatementEffect
            x, 42, sys.stdin.__class__, sys.exc_info, y, z

        f()
    except Exception:
        better_exchook(*sys.exc_info())

    try:
        # noinspection PyArgumentList
        (lambda _x: None)(__name__, 42)  # multiline
    except Exception:
        better_exchook(*sys.exc_info())

    try:

        class Obj:
            def __repr__(self):
                return ("<Obj multi-\n" + "     line repr>")

        obj = Obj()
        assert not obj
    except Exception:
        better_exchook(*sys.exc_info())

    # noinspection PyMissingOrEmptyDocstring
    def f1(a):
        f2(a + 1, 2)

    # noinspection PyMissingOrEmptyDocstring
    def f2(a, b):
        f3(a + b)

    # noinspection PyMissingOrEmptyDocstring
    def f3(a):
        b = ("abc" * 100) + "-interesting"  # some long demo str
        a(b)  # error, not callable

    try:
        f1(13)
    except Exception:
        better_exchook(*sys.exc_info())

    # use this to overwrite the global exception handler
    install()
    # and fail
    # noinspection PyUnresolvedReferences
    finalfail(sys)
Exemple #9
0
  def thread_main(self):
    try:
      import better_exchook
      better_exchook.install()

      while self.batches.has_more() and not self.coord.should_stop():
        enqueue_args = self.get_next_batch()
        if self.queue:
          self.queue.put(enqueue_args)
        else:
          self.tf_session.run(self.tf_queue.enqueue(enqueue_args))  # TODO cache op
        with self.state_change_cond:
          self.state_change_cond.notifyAll()
        self.batches.advance(1)

      self.reached_end = not self.batches.has_more()

    except Exception as exc:
      print("Exception in DataProvider thread: %r" % exc)
      sys.excepthook(*sys.exc_info())

    finally:
      with self.state_change_cond:
        self.thread_finished = True
        self.state_change_cond.notifyAll()
Exemple #10
0
def parse_file():
    import better_exchook
    better_exchook.install()

    state = State()
    state.autoSetupSystemMacros()

    filename = "/Library/Frameworks/SDL.framework/Headers/SDL.h"
    preprocessed = state.preprocess_file(filename, local=True)
    tokens = cpre2_parse(state, preprocessed)

    token_list = []

    def copy_hook(input, output):
        for x in input:
            output.append(x)
            yield x

    tokens = copy_hook(tokens, token_list)

    cpre3_parse(state, tokens)
    print("tokens:")
    pprint(token_list)
    print("parse errors:")
    pprint(state._errors)
    assert not state._errors

    return state, token_list
 def run(self):
     better_exchook.install()
     while True:
         with lock:
             func = workerQueue.get()
             if func in workerQueueSet:
                 workerQueueSet.remove(func)
         Logging.log("Next work item: %s" % func,
                     "remaining: %i" % workerQueue.qsize())
         with self.lock:
             self.cur_item = func
         try:
             func()
         except SystemExit:
             return
         except Exception:
             Logging.log_exception("Worker", *sys.exc_info())
         finally:
             # Note: func() can add itself back to the work-queue.
             with lock:
                 if func not in workerQueueSet:
                     if func in currentWorkSet:
                         currentWorkSet.remove(func)
                         # noinspection PyUnresolvedReferences
                         currentWorkSet.save()
Exemple #12
0
def main():
    import better_exchook
    better_exchook.install()
    from argparse import ArgumentParser
    from pprint import pprint
    import time
    arg_parser = ArgumentParser()
    arg_parser.add_argument("--path", required=True, help="path of db")
    arg_parser.add_argument("--rev")
    args = arg_parser.parse_args()
    cur_db = Db(path=args.path)
    old_db = HistoricDb(path=args.path, git_revision=args.rev)
    print("Old DB commit:", old_db.git_commit.hexsha[:8], ",",
          time.asctime(time.localtime(old_db.git_commit.authored_date)), ",",
          old_db.git_commit.message.strip())
    cur_drinkers = set(cur_db.get_drinker_names())
    old_drinkers = set(old_db.get_drinker_names())
    print("New drinkers:", cur_drinkers.difference(old_drinkers))
    print("Removed drinkers:", old_drinkers.difference(cur_drinkers))
    cur_total_buy_item_counts = cur_db.get_total_buy_item_counts()
    old_total_buy_item_counts = old_db.get_total_buy_item_counts()
    print("Current DB total buy items counts:")
    pprint(cur_total_buy_item_counts)
    print("Old DB total buy items counts:")
    pprint(old_total_buy_item_counts)
    keys = set(cur_total_buy_item_counts.keys()).union(
        set(old_total_buy_item_counts.keys()))
    diff_total_buy_item_counts = {
        key: cur_total_buy_item_counts.get(key, 0) -
        old_total_buy_item_counts.get(key, 0)
        for key in keys
    }
    print("Diff total buy items counts:")
    pprint(diff_total_buy_item_counts)
Exemple #13
0
def _main(argv):
    import better_exchook
    better_exchook.install()
    log.initialize(verbosity=[5])
    print("LmDataset demo startup")
    kwargs = eval(argv[0])
    print("Creating LmDataset with kwargs=%r ..." % kwargs)
    dataset = LmDataset(**kwargs)
    print("init_seq_order ...")
    dataset.init_seq_order(epoch=1)

    seq_idx = 0
    last_log_time = time.time()
    print("start iterating through seqs ...")
    while dataset.is_less_than_num_seqs(seq_idx):
        if seq_idx == 0:
            print("load_seqs with seq_idx=%i ...." % seq_idx)
        dataset.load_seqs(seq_idx, seq_idx + 1)

        if time.time() - last_log_time > 2.0:
            last_log_time = time.time()
            print(
                "Loading %s progress, %i/%i (%.0f%%) seqs loaded (%.0f%% skipped), (%.0f%% unknown) total syms %i ..."
                % (dataset.__class__.__name__, dataset.next_orth_idx,
                   dataset.estimated_num_seqs, 100.0 * dataset.next_orth_idx /
                   dataset.estimated_num_seqs, 100.0 * dataset.num_skipped /
                   (dataset.next_orth_idx or 1), 100.0 * dataset.num_unknown /
                   dataset._num_timesteps_accumulated["data"],
                   dataset._num_timesteps_accumulated["data"]))

        seq_idx += 1

    print("finished iterating, num seqs: %i" % seq_idx)
    print("dataset len:", dataset.len_info())
Exemple #14
0
def demo():
  import better_exchook
  better_exchook.install()
  import sys
  dsclazzeval = sys.argv[1]
  dataset = eval(dsclazzeval)
  assert isinstance(dataset, GeneratingDataset)
  assert dataset._input_classes and dataset._output_classes
  assert dataset.num_outputs["data"][1] == 2  # expect 1-hot
  assert dataset.num_outputs["classes"][1] == 1  # expect sparse
  for i in range(10):
    print "Seq idx", i, ":"
    s = dataset.generate_seq(i)
    assert isinstance(s, DatasetSeq)
    features = s.features
    output_seq = s.targets["classes"]
    assert features.ndim == 2
    assert output_seq.ndim == 1
    input_seq = numpy.argmax(features, axis=1)
    input_seq_str = "".join([dataset._input_classes[i] for i in input_seq])
    output_seq_str = "".join([dataset._output_classes[i] for i in output_seq])
    print " ", repr(input_seq_str)
    print " ", repr(output_seq_str)
    assert features.shape[1] == dataset.num_outputs["data"][0]
    assert features.shape[0] == output_seq.shape[0]
Exemple #15
0
 def checkExec():
   if "--forkExecProc" in sys.argv:
     try:
       import better_exchook
     except ImportError:
       pass  # Doesn't matter.
     else:
       better_exchook.install()
     argidx = sys.argv.index("--forkExecProc")
     writeFileNo = int(sys.argv[argidx + 1])
     readFileNo = int(sys.argv[argidx + 2])
     readend = os.fdopen(readFileNo, "r")
     writeend = os.fdopen(writeFileNo, "w")
     unpickler = Unpickler(readend)
     name = unpickler.load()
     if ExecingProcess.Verbose: print "ExecingProcess child %s (pid %i)" % (name, os.getpid())
     try:
       target = unpickler.load()
       args = unpickler.load()
     except EOFError:
       print "Error: unpickle incomplete"
       raise SystemExit
     ret = target(*args)
     # IOError is probably broken pipe. That probably means that the parent died.
     try: Pickler(writeend).dump(ret)
     except IOError: pass
     try: readend.close()
     except IOError: pass
     try: writeend.close()
     except IOError: pass
     if ExecingProcess.Verbose: print "ExecingProcess child %s (pid %i) finished" % (name, os.getpid())
     raise SystemExit
Exemple #16
0
	def threadMain(self):
		better_exchook.install()
		thread = currentThread()
		setCurThreadName("PyMod %s" % self.name)
		while True:
			if self.module:
				try:
					reload(self.module)
				except Exception:
					print "couldn't reload module", self.module
					sys.excepthook(*sys.exc_info())
					# continue anyway, maybe it still works and maybe the mainFunc does sth good/important
			else:
				self.module = __import__(self.moduleName)
			mainFunc = getattr(self.module, self.mainFuncName)
			try:
				mainFunc()
			except KeyboardInterrupt:
				break
			except Exception:
				print "Exception in module", self.name
				sys.excepthook(*sys.exc_info())
			if not thread.reload: break
			sys.stdout.write("reloading module %s\n" % self.name)
			thread.cancel = False
			thread.reload = False
			thread.waitQueue = None
def parse_file():
	import better_exchook
	better_exchook.install()

	state = State()
	state.autoSetupSystemMacros()

	filename = "/Library/Frameworks/SDL.framework/Headers/SDL.h"
	preprocessed = state.preprocess_file(filename, local=True)
	tokens = cpre2_parse(state, preprocessed)

	token_list = []
	def copy_hook(input, output):
		for x in input:
			output.append(x)
			yield x
	tokens = copy_hook(tokens, token_list)


	cpre3_parse(state, tokens)
	print "tokens:"
	pprint(token_list)
	print "parse errors:"
	pprint(state._errors)
	assert not state._errors

	return state, token_list
Exemple #18
0
def demo():
  """
  Will print out the different network topologies of the specified pretraining scheme.
  """
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options]" % __file__)
    print("example usage: python %s ++pretrain default ++pretrain_construction_algo from_input" % __file__)
  rnn.init_config(command_line_options=sys.argv[1:])
  # noinspection PyProtectedMember
  rnn.config._hack_value_reading_debug()
  rnn.config.update({"log": []})
  rnn.init_log()
  rnn.init_backend_engine()
  if not rnn.config.value("pretrain", ""):
    print("config option 'pretrain' not set, will set it for this demo to 'default'")
    rnn.config.set("pretrain", "default")
  pretrain = pretrain_from_config(rnn.config)
  print("pretrain: %s" % pretrain)
  num_pretrain_epochs = pretrain.get_train_num_epochs()
  from pprint import pprint
  for epoch in range(1, 1 + num_pretrain_epochs):
    print("epoch %i (of %i) network json:" % (epoch, num_pretrain_epochs))
    net_json = pretrain.get_network_json_for_epoch(epoch)
    pprint(net_json)
  print("done.")
Exemple #19
0
    def _thread_main(self):
        try:
            import better_exchook
            better_exchook.install()

            while self.batches.has_more() and not self.coord.should_stop():
                enqueue_args = self.get_next_batch(consider_batch_slice=True)
                if enqueue_args is not None:
                    if self.queue:
                        self.queue.put(enqueue_args)
                    else:
                        self.tf_queue.enqueue(tf_session=self.tf_session,
                                              data=enqueue_args)
                with self.state_change_cond:
                    self.state_change_cond.notifyAll()
                self.batches.advance(1)

            self.reached_end = not self.batches.has_more()

        except Exception as exc:
            print("Exception in DataProvider thread: %r" % exc, file=log.v1)
            sys.excepthook(*sys.exc_info())

        finally:
            with self.state_change_cond:
                self.thread_finished = True
                self.state_change_cond.notifyAll()
Exemple #20
0
    def _start_child(self, epoch):
        assert self.child_pid is None
        assert self.reader_thread is None
        self.pipe_c2p = self._pipe_open()
        self.pipe_p2c = self._pipe_open()
        args = self._build_sprint_args()
        print("%s: epoch" % self, epoch, "exec", args, file=log.v5)

        pid = os.fork()
        if pid == 0:  # child
            # In case we are in some test environment or so, recover the original stdout/stderr.
            sys.stdin = sys.__stdin__
            sys.stdout = sys.__stdout__
            sys.stderr = sys.__stderr__
            import better_exchook
            better_exchook.install()
            try:
                sys.stdin.close()  # Force no tty stdin.
                self.pipe_c2p[0].close()
                self.pipe_p2c[1].close()
                os.execv(args[0], args)  # Does not return if successful.
                print("%s child exec failed." % self)
            except BaseException:
                print("%s child: Error when starting Sprint %r." %
                      (self, args))
                sys.excepthook(*sys.exc_info())
            finally:
                print("%s child: exit" % self)
                os._exit(1)
                return  # Not reached.

        # parent
        self.pipe_c2p[1].close()
        self.pipe_p2c[0].close()
        self.child_pid = pid

        try:
            initSignal, (inputDim, outputDim,
                         num_segments) = self._read_next_raw()
            assert initSignal == b"init"
            assert isinstance(inputDim, int) and isinstance(outputDim, int)
            # Ignore num_segments. It can be totally different than the real number of sequences.
            self.setDimensions(inputDim, outputDim)
        except Exception:
            print("%s: Sprint child process (%r) caused an exception." %
                  (self, args),
                  file=log.v1)
            sys.excepthook(*sys.exc_info())
            self._exit_child(wait_thread=False)
            raise Exception("%s Sprint init failed" % self)

        self.reader_thread = Thread(target=self.reader_thread_proc,
                                    args=(
                                        pid,
                                        epoch,
                                    ),
                                    name="%s reader thread" % self)
        self.reader_thread.daemon = True
        self.reader_thread.start()
Exemple #21
0
def setup():
    """
  Calls necessary setups.
  """
    better_exchook.install()
    better_exchook.replace_traceback_format_tb()

    import _setup_sleepy_env  # noqa
Exemple #22
0
def init(**kwargs):
    import better_exchook
    better_exchook.install()
    # This module can also be used for Sprint PythonControl, which will also call init().
    # We need to catch these cases.
    if "name" in kwargs and kwargs["name"] == "Sprint.PythonControl":
        return PythonControl.init(**kwargs)
    return init_PythonTrainer(**kwargs)
def init(**kwargs):
  import better_exchook
  better_exchook.install()
  # This module can also be used for Sprint PythonControl, which will also call init().
  # We need to catch these cases.
  if "name" in kwargs and kwargs["name"] == "Sprint.PythonControl":
    return PythonControl.init(**kwargs)
  return init_PythonTrainer(**kwargs)
Exemple #24
0
  def _start_child(self, epoch):
    """
    :param epoch:
    :return:
    """
    assert self.child_pid is None
    assert self.reader_thread is None
    self.pipe_c2p = self._pipe_open()
    self.pipe_p2c = self._pipe_open()
    args = self._build_sprint_args()
    print("%s: epoch" % self, epoch, "exec", args, file=log.v5)

    pid = os.fork()
    if pid == 0:  # child
      # In case we are in some test environment or so, recover the original stdout/stderr.
      sys.stdin = sys.__stdin__
      sys.stdout = sys.__stdout__
      sys.stderr = sys.__stderr__
      import better_exchook
      better_exchook.install()
      # noinspection PyBroadException
      try:
        sys.stdin.close()  # Force no tty stdin.
        self.pipe_c2p[0].close()
        self.pipe_p2c[1].close()
        os.execv(args[0], args)  # Does not return if successful.
        print("%s child exec failed." % self)
      except BaseException:
        print("%s child: Error when starting Sprint %r." % (self, args))
        sys.excepthook(*sys.exc_info())
      finally:
        print("%s child: exit" % self)
        # noinspection PyProtectedMember
        os._exit(1)
        return  # Not reached.

    # parent
    self.pipe_c2p[1].close()
    self.pipe_p2c[0].close()
    self.child_pid = pid

    try:
      init_signal, (input_dim, output_dim, num_segments) = self._read_next_raw()
      assert init_signal == b"init"
      assert isinstance(input_dim, int) and isinstance(output_dim, int)
      # Ignore num_segments. It can be totally different than the real number of sequences.
      self.set_dimensions(input_dim, output_dim)
    except Exception:
      print("%s: Sprint child process (%r) caused an exception." % (self, args), file=log.v1)
      sys.excepthook(*sys.exc_info())
      self._exit_child(wait_thread=False)
      raise Exception("%s Sprint init failed" % self)

    self.reader_thread = Thread(target=self._reader_thread_proc, args=(pid, epoch,),
                                name="%s reader thread" % self)
    self.reader_thread.daemon = True
    self.reader_thread.start()
def demo():
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options]" % __file__)
    print("example usage: python %s ++learning_rate_control newbob ++learning_rate_file newbob.data ++learning_rate 0.001" % __file__)
  rnn.initConfig(commandLineOptions=sys.argv[1:])
  rnn.config._hack_value_reading_debug()
  from Pretrain import pretrainFromConfig
  pretrain = pretrainFromConfig(rnn.config)
  first_non_pretrain_epoch = 1
  pretrain_learning_rate = None
  if pretrain:
    first_non_pretrain_epoch = pretrain.get_train_num_epochs() + 1
  log.initialize(verbosity=[5])
  control = loadLearningRateControlFromConfig(rnn.config)
  print("LearningRateControl: %r" % control)
  if not control.epochData:
    print("No epoch data so far.")
    return
  firstEpoch = min(control.epochData.keys())
  if firstEpoch != 1:
    print("Strange, first epoch from epoch data is %i." % firstEpoch)
  print("Error key: %s from %r" % (control.getErrorKey(epoch=firstEpoch), control.epochData[firstEpoch].error))
  if pretrain:
    pretrain_learning_rate = rnn.config.float('pretrain_learning_rate', control.defaultLearningRate)
  maxEpoch = max(control.epochData.keys())
  for epoch in range(1, maxEpoch + 2):  # all epochs [1..maxEpoch+1]
    oldLearningRate = None
    if epoch in control.epochData:
      oldLearningRate = control.epochData[epoch].learningRate
    if epoch < first_non_pretrain_epoch:
      learningRate = pretrain_learning_rate
      s = "Pretrain epoch %i, fixed learning rate: %s (was: %s)" % (epoch, learningRate, oldLearningRate)
    elif first_non_pretrain_epoch > 1 and epoch == first_non_pretrain_epoch:
      learningRate = control.defaultLearningRate
      s = "First epoch after pretrain, epoch %i, fixed learning rate: %s (was %s)" % (epoch, learningRate, oldLearningRate)
    else:
      learningRate = control.calcNewLearnignRateForEpoch(epoch)
      s = "Calculated learning rate for epoch %i: %s (was: %s)" % (epoch, learningRate, oldLearningRate)
    if learningRate < control.minLearningRate:
      learningRate = control.minLearningRate
      s += ", clipped to %s" % learningRate
    s += ", previous relative error: %s" % control.calcRelativeError(epoch - 2, epoch - 1)
    if hasattr(control, "_calcRecentMeanRelativeError"):
      s += ", previous mean relative error: %s" % control._calcRecentMeanRelativeError(epoch)
    print(s)
    # Overwrite new learning rate so that the calculation for further learning rates stays consistent.
    if epoch in control.epochData:
      control.epochData[epoch].learningRate = learningRate
    else:
      control.epochData[epoch] = control.EpochData(learningRate=learningRate)
  print("Finished, last stored epoch was %i." % maxEpoch)
def main():
  global LstmCellTypes
  print("Benchmarking LSTMs.")
  better_exchook.install()
  print("Args:", " ".join(sys.argv))
  arg_parser = ArgumentParser()
  arg_parser.add_argument("cfg", nargs="*", help="opt=value, opt in %r" % sorted(base_settings.keys()))
  arg_parser.add_argument("--no-cpu", action="store_true")
  arg_parser.add_argument("--no-gpu", action="store_true")
  arg_parser.add_argument("--selected", help="comma-separated list from %r" % LstmCellTypes)
  arg_parser.add_argument("--no-setup-tf-thread-pools", action="store_true")
  args = arg_parser.parse_args()
  for opt in args.cfg:
    key, value = opt.split("=", 1)
    assert key in base_settings
    value_type = type(base_settings[key])
    base_settings[key] = value_type(value)
  print("Settings:")
  pprint(base_settings)

  log.initialize(verbosity=[4])
  print("Returnn:", describe_crnn_version(), file=log.v3)
  print("TensorFlow:", describe_tensorflow_version(), file=log.v3)
  print("Python:", sys.version.replace("\n", ""), sys.platform)
  if not args.no_setup_tf_thread_pools:
    setup_tf_thread_pools(log_file=log.v2)
  else:
    print("Not setting up the TF thread pools. Will be done automatically by TF to number of CPU cores.")
  if args.no_gpu:
    print("GPU will not be used.")
  else:
    print("GPU available: %r" % is_gpu_available())
  print_available_devices()

  if args.selected:
    LstmCellTypes = args.selected.split(",")
  benchmarks = {}
  if not args.no_gpu and is_gpu_available():
    for lstm_unit in LstmCellTypes:
      benchmarks["GPU:" + lstm_unit] = benchmark(lstm_unit=lstm_unit, use_gpu=True)
  if not args.no_cpu:
    for lstm_unit in LstmCellTypes:
      if lstm_unit in GpuOnlyCellTypes:
        continue
      benchmarks["CPU:" + lstm_unit] = benchmark(lstm_unit=lstm_unit, use_gpu=False)

  print("-" * 20)
  print("Settings:")
  pprint(base_settings)
  print("Final results:")
  for t, lstm_unit in sorted([(t, lstm_unit) for (lstm_unit, t) in sorted(benchmarks.items())]):
    print("  %s: %s" % (lstm_unit, hms_fraction(t)))
  print("Done.")
def main():
  global LstmCellTypes
  print("Benchmarking LSTMs.")
  better_exchook.install()
  print("Args:", " ".join(sys.argv))
  arg_parser = ArgumentParser()
  arg_parser.add_argument("cfg", nargs="*", help="opt=value, opt in %r" % sorted(base_settings.keys()))
  arg_parser.add_argument("--no-cpu", action="store_true")
  arg_parser.add_argument("--no-gpu", action="store_true")
  arg_parser.add_argument("--selected", help="comma-separated list from %r" % LstmCellTypes)
  arg_parser.add_argument("--no-setup-tf-thread-pools", action="store_true")
  args = arg_parser.parse_args()
  for opt in args.cfg:
    key, value = opt.split("=", 1)
    assert key in base_settings
    value_type = type(base_settings[key])
    base_settings[key] = value_type(value)
  print("Settings:")
  pprint(base_settings)

  log.initialize(verbosity=[4])
  print("Returnn:", describe_returnn_version(), file=log.v3)
  print("TensorFlow:", describe_tensorflow_version(), file=log.v3)
  print("Python:", sys.version.replace("\n", ""), sys.platform)
  if not args.no_setup_tf_thread_pools:
    setup_tf_thread_pools(log_file=log.v2)
  else:
    print("Not setting up the TF thread pools. Will be done automatically by TF to number of CPU cores.")
  if args.no_gpu:
    print("GPU will not be used.")
  else:
    print("GPU available: %r" % is_gpu_available())
  print_available_devices()

  if args.selected:
    LstmCellTypes = args.selected.split(",")
  benchmarks = {}
  if not args.no_gpu and is_gpu_available():
    for lstm_unit in LstmCellTypes:
      benchmarks["GPU:" + lstm_unit] = benchmark(lstm_unit=lstm_unit, use_gpu=True)
  if not args.no_cpu:
    for lstm_unit in LstmCellTypes:
      if lstm_unit in GpuOnlyCellTypes:
        continue
      benchmarks["CPU:" + lstm_unit] = benchmark(lstm_unit=lstm_unit, use_gpu=False)

  print("-" * 20)
  print("Settings:")
  pprint(base_settings)
  print("Final results:")
  for t, lstm_unit in sorted([(t, lstm_unit) for (lstm_unit, t) in sorted(benchmarks.items())]):
    print("  %s: %s" % (lstm_unit, hms_fraction(t)))
  print("Done.")
Exemple #28
0
def demo():
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options]" % __file__)
    print("example usage: python %s ++learning_rate_control newbob ++learning_rate_file newbob.data ++learning_rate 0.001" % __file__)
  rnn.initConfig(commandLineOptions=sys.argv[1:])
  from Pretrain import pretrainFromConfig
  pretrain = pretrainFromConfig(rnn.config)
  first_non_pretrain_epoch = 1
  pretrain_learning_rate = None
  if pretrain:
    first_non_pretrain_epoch = pretrain.get_train_num_epochs() + 1
  rnn.config._hack_value_reading_debug()
  log.initialize(verbosity=[5])
  control = loadLearningRateControlFromConfig(rnn.config)
  print("LearningRateControl: %r" % control)
  if not control.epochData:
    print("No epoch data so far.")
    return
  if pretrain:
    pretrain_learning_rate = rnn.config.float('pretrain_learning_rate', control.defaultLearningRate)
  maxEpoch = max(control.epochData.keys())
  for epoch in range(1, maxEpoch + 2):  # all epochs [1..maxEpoch+1]
    oldLearningRate = None
    if epoch in control.epochData:
      oldLearningRate = control.epochData[epoch].learningRate
    if epoch < first_non_pretrain_epoch:
      learningRate = pretrain_learning_rate
      s = "Pretrain epoch %i, fixed learning rate: %s (was: %s)" % (epoch, learningRate, oldLearningRate)
    elif first_non_pretrain_epoch > 1 and epoch == first_non_pretrain_epoch:
      learningRate = control.defaultLearningRate
      s = "First epoch after pretrain, epoch %i, fixed learning rate: %s (was %s)" % (epoch, learningRate, oldLearningRate)
    else:
      learningRate = control.calcLearningRateForEpoch(epoch)
      s = "Calculated learning rate for epoch %i: %s (was: %s)" % (epoch, learningRate, oldLearningRate)
    if learningRate < control.minLearningRate:
      learningRate = control.minLearningRate
      s += ", clipped to %s" % learningRate
    s += ", previous relative error: %s" % control.calcRelativeError(epoch - 2, epoch - 1)
    print(s)
    # Overwrite new learning rate so that the calculation for further learning rates stays consistent.
    if epoch in control.epochData:
      control.epochData[epoch].learningRate = learningRate
    else:
      control.epochData[epoch] = control.EpochData(learningRate=learningRate)
  print("Finished, last stored epoch was %i." % maxEpoch)
Exemple #29
0
def _main():
  import better_exchook
  better_exchook.install()
  from argparse import ArgumentParser
  arg_parser = ArgumentParser()
  arg_parser.add_argument(
    "lm_dataset", help="Python eval string, should eval to dict" +
                       ", or otherwise filename, and will just dump")
  arg_parser.add_argument("--post_processor", nargs="*")
  args = arg_parser.parse_args()
  if not args.lm_dataset.startswith("{") and os.path.isfile(args.lm_dataset):
    callback = print
    if args.post_processor:
      pp = get_post_processor_function(args.post_processor)
      callback = lambda text: print(pp(text))
    iter_corpus(args.lm_dataset, callback)
    sys.exit(0)

  log.initialize(verbosity=[5])
  print("LmDataset demo startup")
  kwargs = eval(args.lm_dataset)
  assert isinstance(kwargs, dict), "arg should be str of dict: %s" % args.lm_dataset
  print("Creating LmDataset with kwargs=%r ..." % kwargs)
  dataset = LmDataset(**kwargs)
  print("init_seq_order ...")
  dataset.init_seq_order(epoch=1)

  seq_idx = 0
  last_log_time = time.time()
  print("start iterating through seqs ...")
  while dataset.is_less_than_num_seqs(seq_idx):
    if seq_idx == 0:
      print("load_seqs with seq_idx=%i ...." % seq_idx)
    dataset.load_seqs(seq_idx, seq_idx + 1)

    if time.time() - last_log_time > 2.0:
      last_log_time = time.time()
      print("Loading %s progress, %i/%i (%.0f%%) seqs loaded (%.0f%% skipped), (%.0f%% unknown) total syms %i ..." % (
            dataset.__class__.__name__, dataset.next_orth_idx, dataset.estimated_num_seqs,
            100.0 * dataset.next_orth_idx / dataset.estimated_num_seqs,
            100.0 * dataset.num_skipped / (dataset.next_orth_idx or 1),
            100.0 * dataset.num_unknown / dataset._num_timesteps_accumulated["data"],
            dataset._num_timesteps_accumulated["data"]))

    seq_idx += 1

  print("finished iterating, num seqs: %i" % seq_idx)
  print("dataset len:", dataset.len_info())
Exemple #30
0
    def _thread_main(self):
        from Util import interrupt_main
        try:
            import better_exchook
            better_exchook.install()
            from Util import AsyncThreadRun

            # First iterate once over the data to get the data len as fast as possible.
            data_len = 0
            while True:
                ls = self._data_files["data"].readlines(10**4)
                data_len += len(ls)
                if not ls:
                    break
            with self._lock:
                self._data_len = data_len
            self._data_files["data"].seek(
                0, os.SEEK_SET)  # we will read it again below

            # Now, read and use the vocab for a compact representation in memory.
            keys_to_read = ["data", "classes"]
            while True:
                for k in list(keys_to_read):
                    data_strs = self._data_files[k].readlines(10**6)
                    if not data_strs:
                        assert len(self._data[k]) == self._data_len
                        keys_to_read.remove(k)
                        continue
                    assert len(
                        self._data[k]) + len(data_strs) <= self._data_len
                    vocab = self._vocabs[k]
                    data = [
                        self._data_str_to_numpy(
                            vocab,
                            s.decode("utf8").strip() + self._add_postfix[k])
                        for s in data_strs
                    ]
                    with self._lock:
                        self._data[k].extend(data)
                if not keys_to_read:
                    break
            for k, f in list(self._data_files.items()):
                f.close()
                self._data_files[k] = None

        except Exception:
            sys.excepthook(*sys.exc_info())
            interrupt_main()
Exemple #31
0
 def checkExec():
     if "--forkExecProc" in sys.argv:
         mod_path = os.path.realpath(
             os.path.join(os.path.dirname(__file__), '..'))
         if not any(mod_path == os.path.realpath(s) for s in sys.path):
             sys.path.append(mod_path)
         try:
             import better_exchook
         except ImportError:
             pass  # Doesn't matter.
         else:
             better_exchook.install()
         argidx = sys.argv.index("--forkExecProc")
         writeFileNo = int(sys.argv[argidx + 1])
         readFileNo = int(sys.argv[argidx + 2])
         readend = os.fdopen(readFileNo, "r")
         writeend = os.fdopen(writeFileNo, "w")
         unpickler = Unpickler(readend)
         name = unpickler.load()
         if ExecingProcess.Verbose:
             print("ExecingProcess child %s (pid %i)" % (name, os.getpid()))
         try:
             target = unpickler.load()
             args = unpickler.load()
         except EOFError:
             print("Error: unpickle incomplete")
             raise SystemExit
         ret = target(*args)
         sys.exited = True
         # IOError is probably broken pipe. That probably means that the parent died.
         try:
             Pickler(writeend).dump(ret)
         except IOError:
             pass
         try:
             readend.close()
         except IOError:
             pass
         try:
             writeend.close()
         except IOError:
             pass
         if ExecingProcess.Verbose:
             print("ExecingProcess child %s (pid %i) finished" %
                   (name, os.getpid()))
         raise SystemExit
Exemple #32
0
def demo():
    """
  Will print out the different network topologies of the specified pretraining scheme.
  """
    import better_exchook
    better_exchook.install()
    import rnn
    import argparse
    from Util import dict_diff_str
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument("config")
    arg_parser.add_argument("--diff",
                            action="store_true",
                            help="show diff only")
    arg_parser.add_argument('other_returnn_args',
                            nargs=argparse.REMAINDER,
                            help="config updates or so")
    args = arg_parser.parse_args()
    rnn.init_config(config_filename=args.config,
                    command_line_options=args.other_returnn_args,
                    extra_updates={"log": []})
    # noinspection PyProtectedMember
    rnn.config._hack_value_reading_debug()
    rnn.init_log()
    if not rnn.config.value("pretrain", ""):
        print(
            "config option 'pretrain' not set, will set it for this demo to 'default'"
        )
        rnn.config.set("pretrain", "default")
    pretrain = pretrain_from_config(rnn.config)
    print("pretrain: %s" % pretrain)
    num_pretrain_epochs = pretrain.get_train_num_epochs()
    last_net_json = None
    from pprint import pprint
    for epoch in range(1, 1 + num_pretrain_epochs):
        print("epoch %i (of %i) network json:" % (epoch, num_pretrain_epochs))
        net_json = pretrain.get_network_json_for_epoch(epoch)
        if args.diff:
            if last_net_json is not None:
                print(dict_diff_str(last_net_json, net_json))
            else:
                print("(initial)")
        else:
            pprint(net_json)
        last_net_json = net_json
    print("done.")
def watcher_loop():
    import main
    import Action
    better_exchook.install()

    while not exitEvent.isSet():
        if main.DownloadOnly:
            if len(currentWorkSet) == 0:
                queue_work(Action.CheckDownloadsFinished())
            exitEvent.wait(1)
            continue

        if workerQueue.qsize() >= kMinQueuedActions:
            exitEvent.wait(1)
            continue

        func = Action.get_new_action()
        workerQueue.put(func)
Exemple #34
0
def setup(*raw_arg_list):
    print("RandomFtpGrabber startup.")

    import better_exchook
    better_exchook.install()
    import Logging
    better_exchook.output = Logging.log

    arg_parser = ArgumentParser()
    arg_parser.add_argument("--dir", default=os.getcwd())
    arg_parser.add_argument("--numWorkers", type=int)
    arg_parser.add_argument("--shell", action="store_true")
    arg_parser.add_argument("--skipShodan", action="store_true")
    arg_parser.add_argument("--downloadRemaining", action="store_true")
    global Args
    Args = arg_parser.parse_args(raw_arg_list)

    if sys.version_info.major != 3:
        Logging.log("Warning: This code was only tested with Python3.")
        import time
        time.sleep(10)  # wait a bit to make sure the user sees this

    start_stdin_handler_loop()

    import main
    main.RootDir = Args.dir
    Logging.log("root dir: %s" % RootDir)

    main.SkipShodan = Args.skipShodan
    if not main.SkipShodan:
        prepare_lists()

    main.DownloadOnly = Args.downloadRemaining
    if not main.DownloadOnly:
        setup_lists()

    import TaskSystem  # important to be initially imported in the main thread
    if Args.numWorkers:
        TaskSystem.kNumWorkers = Args.numWorkers
        TaskSystem.kMinQueuedActions = Args.numWorkers
        TaskSystem.kSuggestedMaxQueuedActions = Args.numWorkers * 2
    if Args.shell:
        TaskSystem.kNumWorkers = 0
    TaskSystem.setup()
Exemple #35
0
def main():
    better_exchook.install()
    my_files = sorted(os.listdir(my_dir))
    for fn in my_files:
        if fn.startswith("test_") and fn.endswith(".py"):
            print("=" * 40)
            print("Python test file:", fn)
            mod_name = os.path.splitext(fn)[0]
            mod = importlib.import_module(mod_name)
            for name in dir(mod):
                if not name.startswith("test_"):
                    continue
                value = getattr(mod, name)
                if callable(value):
                    print("-" * 40)
                    print("Test:", mod_name, ".", name)
                    value()
                    print("-" * 40)
            print("=" * 40)
Exemple #36
0
def _demo():
    def _make_int_list(s):
        """
    :param str s:
    :rtype: list[int]
    """
        return [int(s_) for s_ in s.split(",")]

    import better_exchook
    better_exchook.install()
    from argparse import ArgumentParser
    arg_parser = ArgumentParser()
    arg_parser.add_argument("--states", type=_make_int_list, default=[0])
    arg_parser.add_argument("--inputs", type=_make_int_list, default=[0])
    # Other example FST files can be found online, e.g.: https://github.com/placebokkk/gofst/tree/master/ex01
    # Or: https://github.com/zh794390558/deeplearning/tree/master/kaldi/fst/data/test
    arg_parser.add_argument("--fst",
                            default=returnn_dir + "/tests/lexicon_opt.fst")
    args = arg_parser.parse_args()
    # Try to compile now.
    get_tf_mod(verbose=True)
    # Some demo.
    assert os.path.exists(args.fst)
    fst_tf = get_fst(filename=args.fst)
    states_tf = tf.compat.v1.placeholder(tf.int32, [None])
    inputs_tf = tf.compat.v1.placeholder(tf.int32, [None])
    output_tf = fst_transition(fst_handle=fst_tf,
                               states=states_tf,
                               inputs=inputs_tf)
    with tf.compat.v1.Session() as session:
        out_next_states, out_labels, out_scores = session.run(output_tf,
                                                              feed_dict={
                                                                  states_tf:
                                                                  args.states,
                                                                  inputs_tf:
                                                                  args.inputs
                                                              })
        print("states:", args.states)
        print("inputs:", args.inputs)
        print("output next states:", out_next_states)
        print("output labels:", out_labels)
        print("output scores:", out_scores)
Exemple #37
0
def demo():
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options]" % __file__)
    print("example usage: python %s ++pretrain default ++pretrain_construction_algo from_input" % __file__)
  rnn.initConfig(commandLineOptions=sys.argv[1:])
  rnn.config._hack_value_reading_debug()
  if not rnn.config.value("pretrain", ""):
    print("config option 'pretrain' not set, will set it for this demo to 'default'")
    rnn.config.set("pretrain", "default")
  pretrain = pretrainFromConfig(rnn.config)
  print("pretrain: %s" % pretrain)
  num_pretrain_epochs = pretrain.get_train_num_epochs()
  from pprint import pprint
  for epoch in range(1, 1 + num_pretrain_epochs):
    print("epoch %i (of %i) network json:" % (epoch, num_pretrain_epochs))
    net_json = pretrain.get_network_json_for_epoch(epoch)
    pprint(net_json)
  print("done.")
Exemple #38
0
def _main(argv):
  import better_exchook
  better_exchook.install()
  log.initialize(verbosity=[5])
  dataset = LmDataset(**eval(argv[0]))
  dataset.init_seq_order(epoch=1)

  seq_idx = 0
  last_log_time = time.time()
  while dataset.is_less_than_num_seqs(seq_idx):
    dataset.load_seqs(seq_idx, seq_idx + 1)

    if time.time() - last_log_time > 2.0:
      last_log_time = time.time()
      print >> log.v5, "Loading %s progress, %i/%i (%.0f%%) seqs loaded (%.0f%% skipped), total syms %i ..." % (
                       dataset.__class__.__name__, dataset.next_orth_idx, dataset.estimated_num_seqs,
                       100.0 * dataset.next_orth_idx / dataset.estimated_num_seqs,
                       100.0 * dataset.num_skipped / (dataset.next_orth_idx or 1),
                       dataset._num_timesteps_accumulated["data"])

    seq_idx += 1

  print >>log.v3, "dataset len:", dataset.len_info()
Exemple #39
0
 def threadMain(self):
     better_exchook.install()
     thread = currentThread()
     while True:
         if self.module:
             try:
                 reload(self.module)
             except Exception:
                 print "couldn't reload module", self.module
                 sys.excepthook(*sys.exc_info())
                 # continue anyway, maybe it still works and maybe the mainFunc does sth good/important
         else:
             self.module = __import__(self.moduleName)
         mainFunc = getattr(self.module, self.mainFuncName)
         try:
             mainFunc()
         except Exception:
             print "Exception in thread", thread.name
             sys.excepthook(*sys.exc_info())
         if not thread.reload: break
         sys.stdout.write("reloading module %s\n" % self.name)
         thread.cancel = False
         thread.reload = False
         thread.waitQueue = None
Exemple #40
0
 def checkExec():
   if "--forkExecProc" in sys.argv:
     mod_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
     if not any(mod_path == os.path.realpath(s) for s in sys.path):
       sys.path.append(mod_path)
     try:
       import better_exchook
     except ImportError:
       pass  # Doesn't matter.
     else:
       better_exchook.install()
     argidx = sys.argv.index("--forkExecProc")
     writeFileNo = int(sys.argv[argidx + 1])
     readFileNo = int(sys.argv[argidx + 2])
     readend = os.fdopen(readFileNo, "rb")
     writeend = os.fdopen(writeFileNo, "wb")
     unpickler = Unpickler(readend)
     name = unpickler.load()
     if ExecingProcess.Verbose: print("ExecingProcess child %s (pid %i)" % (name, os.getpid()))
     try:
       target = unpickler.load()
       args = unpickler.load()
     except EOFError:
       print("Error: unpickle incomplete")
       raise SystemExit
     ret = target(*args)
     sys.exited = True
     # IOError is probably broken pipe. That probably means that the parent died.
     try: Pickler(writeend).dump(ret)
     except IOError: pass
     try: readend.close()
     except IOError: pass
     try: writeend.close()
     except IOError: pass
     if ExecingProcess.Verbose: print("ExecingProcess child %s (pid %i) finished" % (name, os.getpid()))
     raise SystemExit
Exemple #41
0
        import subprocess
        # echo via subprocess, because this stdout as well as the other will always be visible.
        subprocess.check_call(
            ["echo", "travis_fold:start:test_returnn_as_framework_TaskSystem"])
        subprocess.check_call([
            py,
            os.path.abspath("tests/returnn-as-framework.py"),
            "test_TaskSystem_Pickler()"
        ],
                              cwd="/")
        subprocess.check_call(
            ["echo", "travis_fold:end:test_returnn_as_framework_TaskSystem"])


if __name__ == '__main__':
    better_exchook.install()
    TestDemos.setup_class()
    tests = TestDemos()
    import sys
    fns = sys.argv[1:]
    if not fns:
        fns = [arg for arg in dir(tests) if arg.startswith("test_")]
    for arg in fns:
        f = getattr(tests, arg)
        print("-" * 20)
        print("Run:", f)
        print("-" * 20)
        f()
        print("-" * 20)
        print("Ok.")
        print("-" * 20)
Exemple #42
0
#!/usr/bin/python
# MusicPlayer, https://github.com/albertz/music-player
# Copyright (c) 2012, Albert Zeyer, www.az2000.de
# All rights reserved.
# This code is under the 2-clause BSD license, see License.txt in the root directory of this project.

import better_exchook
better_exchook.install()

try:
	import faulthandler
	faulthandler.enable(all_threads=True)
except ImportError:
	print "note: faulthandler module not available"

# Do this early to do some option parsing and maybe special handling.
import appinfo

# This might do some init which might be important to be done in the main thread.
import utils

utils.ExecingProcess.checkExec()

import sys, time
print "MusicPlayer", appinfo.version, "from", appinfo.buildTime, "on", appinfo.platform, "(%s)" % sys.platform
print "startup on", utils.formatDate(time.time())

from State import state, modules

if __name__ == '__main__':	
Exemple #43
0
def main():
    """ Parses command line arguments and executes commands """
    # Setup recipe importer
    sys.meta_path.append(RecipeFinder)

    # Setup argument parser
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    parser.add_argument('--log_level', dest='log_level', metavar='LOG_LEVEL',
                        type=int, default=20, help='log level, 10 for debug messages, 50 for only critical,'
                                                   ' default: 20, ')

    parser.add_argument('--config', dest='config_files', action='append',
                        default=[], help='config file for setup, defining which jobs to run')

    # Not fully supported at the moment
    # parser.add_argument('--settings', dest='settings_file',
    #                     default=gs.GLOBAL_SETTINGS_FILE_DEFAULT,
    #                     help='settings file, aka how to run the jobs')

    # parser.add_argument('-s', '--setting', dest='commandline_settings', action='append',
    #                     default=[], help='overwrite global settings directly via commandline')

    parser_manager = subparsers.add_parser('manager', aliases=['m'],
                                           conflict_handler='resolve',
                                           help="Load config files and start manager loop")
    parser_manager.set_defaults(func=manager)
    parser_manager.add_argument("-r", dest="run", default=False,
                                action='store_true', help="Run the given task")
    parser_manager.add_argument("-co", dest="clear_once", action="store_true",
                                default=False,
                                help="Move jobs aside that are in an error "
                                     "state when the manager runs the first time")
    parser_manager.add_argument("--http", dest="http_port", default=None,
                                type=int, help="Enables http server, takes "
                                               "port as argument")
    parser_manager.add_argument("--fs", "--filesystem", dest="filesystem",
                                default=None,
                                help="Start filesystem in given directory")
    parser_manager.add_argument('argv', metavar='ARGV', type=str,
                                nargs='*',
                                help='an additional way do '
                                     'define config files')

    parser_console = subparsers.add_parser('console',  aliases=['c'],
                                           usage='sis console [-h] [--load LOAD_SIS_GRAPH] [ARGV [ARGV ...]]\n\n'
                                                 'Open console to debug sisyphus graph or job',
                                           help="Start console to interactively work on sis graph. Things like: "
                                                "Rerunning tasks, cleaning up the work directory, and debugging "
                                                "is best done here")
    parser_console.add_argument("--load", dest="load", default=[], action='append',
                                help="load graph and start console")
    parser_console.add_argument("--skip_config", dest="not_load_config", default=False, action='store_true',
                                help="do not load config files before starting the console")
    parser_console.add_argument("-c", dest="commands", default=[], action='append',
                                help="Run commands after loading console")
    parser_console.add_argument('argv', metavar='ARGV', type=str, nargs='*',
                                help='an additional way do define config files')
    parser_console.set_defaults(func=console)

    parser_worker = subparsers.add_parser(gs.CMD_WORKER, help='Start worker to compute job (for internally usage)')
    parser_worker.set_defaults(func=worker)
    parser_worker.add_argument('jobdir', metavar='JOBDIR', type=str,
                               help='Job directory of the executed function')
    parser_worker.add_argument('task_name', metavar='TASK_NAME', type=str,
                               help='Task name')
    parser_worker.add_argument('task_id', metavar='TASK_ID', type=int,
                               nargs='?', default=None,
                               help='Task id, if not set trying to '
                                    'read it from environment variables')
    parser_worker.add_argument('--force_resume', "--fr", default=False, action="store_true",
                               help='force resume of non resumable tasks, good for debugging')
    parser_worker.add_argument('--engine', default='short', help='The engine running the Job')

    # Currently disabled parser, maybe used again in the future
    #
    # Disabled, since it's not used for now
    # parser_unittest = subparsers.add_parser('unittest', help='Run unittest tasks')
    # parser_unittest.set_defaults(func=unittest)
    # parser_unittest.add_argument("--do_not_run", dest="run", default=True, action='store_false',
    #                              help="Do not run the given task")
    # parser_unittest.add_argument('argv', metavar='ARGV', type=str, nargs='*',
    #                              help='an additional way do define config files')

    # Disabled since it's currently not working
    # parser_notebook = subparsers.add_parser('notebook',
    #                                         usage='sis notebook [-h]\n\n'
    #                                               'Open notebook session',
    #                                         help="Start notebook to interactively work on sis graph")
    # parser_notebook.add_argument("--load", dest="load", default=[], action='append',
    #                              help="load graph and start console")
    # parser_notebook.add_argument("--file", "-f", dest="filename", default='default',
    #                              help="load (and create if needed) this notebook file")
    # parser_notebook.set_defaults(func=helper.notebook)

    # Disabled since it's currently not working
    # parser_connect = subparsers.add_parser('connect', usage='sis connect [-h] [connect_file]\n\n'
    #                                                         'Opens a console connected to given kernel',
    #                                        help='Opens a console connected with given kernel')
    # parser_connect.add_argument('argv', metavar='ARGV', type=str, nargs='?',
    #                             default=[], help='connection_file')
    # parser_connect.set_defaults(func=helper.connect)

    args = parser.parse_args()

    if not hasattr(args, 'func'):
        parser.print_help()
        return

    # add argv to config_files if manager or console is called
    if args.func in [manager, console]:
        args.config_files += args.argv

    # Setup logging
    logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s',
                        level=args.log_level)

    # Changing settings via commandline is currently not supported
    # Needs to ensure all parameters are passed correctly to worker, ignored since nobody requested it so far
    # update_global_settings_from_file(args.settings_file)
    # update_global_settings_from_list(args.commandline_settings)

    update_global_settings_from_file(gs.GLOBAL_SETTINGS_FILE_DEFAULT)
    if gs.USE_VERBOSE_TRACEBACK:
        if gs.VERBOSE_TRACEBACK_TYPE == "ipython":
            from IPython.core import ultratb
            sys.excepthook = ultratb.VerboseTB()
        elif gs.VERBOSE_TRACEBACK_TYPE == "better_exchook":
            # noinspection PyPackageRequirements
            import better_exchook
            better_exchook.install()
            better_exchook.replace_traceback_format_tb()
        else:
            raise Exception("invalid VERBOSE_TRACEBACK_TYPE %r" % gs.VERBOSE_TRACEBACK_TYPE)

    if gs.USE_SIGNAL_HANDLERS:
        from sisyphus.tools import maybe_install_signal_handers
        maybe_install_signal_handers()

    if args.func != manager:
        gs.JOB_AUTO_CLEANUP = False

    try:
        args.func(args)
    except BaseException as exc:
        if not isinstance(exc, SystemExit):
            logging.error("Main thread unhandled exception:")
            sys.excepthook(*sys.exc_info())
        import threading
        non_daemon_threads = {
            thread for thread in threading.enumerate()
            if not thread.daemon and thread is not threading.main_thread()}
        if non_daemon_threads:
            logging.warning("Main thread exit. Still running non-daemon threads: %r" % non_daemon_threads)
def demo():
  """
  Demo run. Given some learning rate file (with scores / existing lrs), will calculate how lrs would have been set,
  given some config.
  """
  import better_exchook
  better_exchook.install()
  import rnn
  import sys
  if len(sys.argv) <= 1:
    print("usage: python %s [config] [other options] [++check_learning_rates 1]" % __file__)
    print(
      ("example usage: "
       "python %s ++learning_rate_control newbob ++learning_rate_file newbob.data ++learning_rate 0.001") % __file__)
  rnn.init_config(command_line_options=sys.argv[1:])
  # noinspection PyProtectedMember
  rnn.config._hack_value_reading_debug()
  rnn.config.update({"log": []})
  rnn.init_log()
  rnn.init_backend_engine()
  check_lr = rnn.config.bool("check_learning_rates", False)
  from Pretrain import pretrain_from_config
  pretrain = pretrain_from_config(rnn.config)
  first_non_pretrain_epoch = 1
  pretrain_learning_rate = None
  if pretrain:
    first_non_pretrain_epoch = pretrain.get_train_num_epochs() + 1
  log.initialize(verbosity=[5])
  control = load_learning_rate_control_from_config(rnn.config)
  print("LearningRateControl: %r" % control)
  if not control.epoch_data:
    print("No epoch data so far.")
    return
  first_epoch = min(control.epoch_data.keys())
  if first_epoch != 1:
    print("Strange, first epoch from epoch data is %i." % first_epoch)
  print("Error key: %s from %r" % (control.get_error_key(epoch=first_epoch), control.epoch_data[first_epoch].error))
  if pretrain:
    pretrain_learning_rate = rnn.config.float('pretrain_learning_rate', control.default_learning_rate)
  max_epoch = max(control.epoch_data.keys())
  for epoch in range(1, max_epoch + 2):  # all epochs [1..max_epoch+1]
    old_learning_rate = None
    if epoch in control.epoch_data:
      old_learning_rate = control.epoch_data[epoch].learning_rate
    if epoch < first_non_pretrain_epoch:
      learning_rate = pretrain_learning_rate
      s = "Pretrain epoch %i, fixed learning rate: %s (was: %s)" % (epoch, learning_rate, old_learning_rate)
    elif 1 < first_non_pretrain_epoch == epoch:
      learning_rate = control.default_learning_rate
      s = "First epoch after pretrain, epoch %i, fixed learning rate: %s (was %s)" % (
        epoch, learning_rate, old_learning_rate)
    else:
      learning_rate = control.calc_new_learning_rate_for_epoch(epoch)
      s = "Calculated learning rate for epoch %i: %s (was: %s)" % (epoch, learning_rate, old_learning_rate)
    if learning_rate < control.min_learning_rate:
      learning_rate = control.min_learning_rate
      s += ", clipped to %s" % learning_rate
    s += ", previous relative error: %s" % control.calc_relative_error(epoch - 2, epoch - 1)
    if hasattr(control, "_calc_recent_mean_relative_error"):
      # noinspection PyProtectedMember
      s += ", previous mean relative error: %s" % control._calc_recent_mean_relative_error(epoch)
    print(s)
    if check_lr and old_learning_rate is not None:
      if old_learning_rate != learning_rate:
        print("Learning rate is different in epoch %i!" % epoch)
        sys.exit(1)
    # Overwrite new learning rate so that the calculation for further learning rates stays consistent.
    if epoch in control.epoch_data:
      control.epoch_data[epoch].learning_rate = learning_rate
    else:
      control.epoch_data[epoch] = control.EpochData(learningRate=learning_rate)
  print("Finished, last stored epoch was %i." % max_epoch)