def __load_configs(self, path: Path): if path == self.__current_path: return self.__current_path = path config_files = self.__load_config_files(path) if not config_files: if not is_colab() and not is_kaggle(): labml_notice([ (".labml.yaml", Text.value), " config file could not be found. Looking in path: ", (str(path), Text.meta) ]) while path.exists() and not path.is_dir(): path = path.parent for c in config_files: self.__merge_configs(c) for c in self.custom_configs: self.__merge_configs(c) if not config_files and self.configs['path'] is None: self.configs['path'] = str(path) self.__update_configs()
def log(self, parts: List[Union[str, Tuple[str, Optional[StyleCode]]]], *, is_new_line: bool, is_reset: bool): tuple_parts = [] for p in parts: if type(p) == str: text = p style = None else: text, style = p lines = text.split('\n') for line in lines[:-1]: tuple_parts.append((line, style)) tuple_parts.append(('\n', None)) tuple_parts.append((lines[-1], style)) coded = [ IpynbDestination.html_code(text, color) for text, color in tuple_parts ] text = "".join(coded) lines = text.split('\n') if is_kaggle(): attrs = 'style="color: #444; overflow-x: scroll;"' else: attrs = 'style="overflow-x: scroll;"' with self.lock: if self.is_same_cell(): if coded: last = self.__cell_lines.pop() if is_reset: self.__cell_lines += lines else: self.__cell_lines += [last + lines[0]] + lines[1:] text = '\n'.join(self.__cell_lines) self.html.value = f"<pre {attrs}>{text}</pre>" else: self.__cell_lines = lines text = '\n'.join(self.__cell_lines) self.html = HTML(f"<pre {attrs}>{text}</pre>") display(self.html) # print(len(self.__cell_lines), self.__cell_lines[-1], is_new_line) if is_new_line: self.__cell_lines.append('')
def log(self, parts: List[Union[str, Tuple[str, Optional[StyleCode]]]], *, is_new_line=True): tuple_parts = [] for p in parts: if type(p) == str: text = p style = None else: text, style = p lines = text.split('\n') for line in lines[:-1]: tuple_parts.append((line, style)) tuple_parts.append(('\n', None)) tuple_parts.append((lines[-1], style)) coded = [self.__html_code(text, color) for text, color in tuple_parts] text = "".join(coded) lines = text.split('\n') if is_kaggle(): attrs = 'style="color: #444;' else: attrs = '' if self.is_same_cell(): if coded: self.__cell_lines.pop() self.__cell_lines += lines text = '\n'.join(self.__cell_lines) html = HTML(f"<pre {attrs}>{text}</pre>") self.__last_handle.update(html) else: self.__cell_lines = lines text = '\n'.join(self.__cell_lines) html = HTML(f"<pre {attrs}>{text}</pre>") self.__last_handle = display(html, display_id=self.__last_id) self.__last_id += 1 # print(len(self.__cell_lines), self.__cell_lines[-1], is_new_line) if is_new_line: self.__cell_lines.append('')
def __load_configs(self, path: str): config_files = self.__load_config_files(path) if not config_files: if not is_colab() and not is_kaggle(): warnings.warn(f"No '.labml.yaml' config file found. " f"Looking in {path}", UserWarning, stacklevel=4) for c in config_files: self.__merge_configs(c) for c in self.custom_configs: self.__merge_configs(c) if not config_files and self.configs['path'] is None: self.configs['path'] = path self.__update_configs()
def __init__(self, *, uuid: str, name: Optional[str], python_file: Optional[str], comment: Optional[str], writers: Set[str], ignore_callers: Set[str], tags: Optional[Set[str]], is_evaluate: bool): if is_ipynb(): lab_singleton().set_path(os.getcwd()) if python_file is None: python_file = 'notebook.ipynb' if name is None: name = 'Notebook Experiment' else: if python_file is None: python_file = get_caller_file(ignore_callers) lab_singleton().set_path(python_file) if name is None: file_path = pathlib.PurePath(python_file) name = file_path.stem if comment is None: comment = '' if global_params_singleton().comment is not None: comment = global_params_singleton().comment self.experiment_path = lab_singleton().experiments / name self.check_repo_dirty = lab_singleton().check_repo_dirty self.configs_processor = None if tags is None: tags = set(name.split('_')) self.run = Run.create( uuid=uuid, experiment_path=self.experiment_path, python_file=python_file, trial_time=time.localtime(), name=name, comment=comment, tags=list(tags)) try: repo = git.Repo(lab_singleton().path) self.run.repo_remotes = list(repo.remote().urls) self.run.commit = repo.head.commit.hexsha self.run.commit_message = repo.head.commit.message.strip() self.run.is_dirty = repo.is_dirty() self.run.diff = repo.git.diff() except git.InvalidGitRepositoryError: if not is_colab() and not is_kaggle(): labml_notice(["Not a valid git repository: ", (lab_singleton().path, Text.value)]) self.run.commit = 'unknown' self.run.commit_message = '' self.run.is_dirty = True self.run.diff = '' self.checkpoint_saver = CheckpointSaver(self.run.checkpoint_path) self.is_evaluate = is_evaluate self.web_api = None self.writers = writers self.is_started = False self.distributed_rank = 0 self.distributed_world_size = -1
def __init__(self, *, name: Optional[str], python_file: Optional[str], comment: Optional[str], writers: Set[str], ignore_callers: Set[str], tags: Optional[Set[str]]): if python_file is None: python_file = get_caller_file(ignore_callers) if python_file.startswith('<ipython'): assert is_ipynb() if name is None: raise ValueError("You must specify python_file or experiment name" " when creating an experiment from a python notebook.") lab_singleton().set_path(os.getcwd()) python_file = 'notebook.ipynb' else: lab_singleton().set_path(python_file) if name is None: file_path = pathlib.PurePath(python_file) name = file_path.stem if comment is None: comment = '' if global_params_singleton().comment is not None: comment = global_params_singleton().comment self.name = name self.experiment_path = lab_singleton().experiments / name self.check_repo_dirty = lab_singleton().check_repo_dirty self.configs_processor = None experiment_path = pathlib.Path(self.experiment_path) if not experiment_path.exists(): experiment_path.mkdir(parents=True) if tags is None: tags = set(name.split('_')) self.run = Run.create( experiment_path=self.experiment_path, python_file=python_file, trial_time=time.localtime(), comment=comment, tags=list(tags)) try: repo = git.Repo(lab_singleton().path) self.run.commit = repo.head.commit.hexsha self.run.commit_message = repo.head.commit.message.strip() self.run.is_dirty = repo.is_dirty() self.run.diff = repo.git.diff() except git.InvalidGitRepositoryError: if not is_colab() and not is_kaggle(): warnings.warn(f"Not a valid git repository", UserWarning, stacklevel=4) self.run.commit = 'unknown' self.run.commit_message = '' self.run.is_dirty = True self.run.diff = '' logger_internal().reset_writers() if 'sqlite' in writers: from labml.internal.logger.writers import sqlite logger_internal().add_writer( sqlite.Writer(self.run.sqlite_path, self.run.artifacts_folder)) if 'tensorboard' in writers: from labml.internal.logger.writers import tensorboard logger_internal().add_writer(tensorboard.Writer(self.run.tensorboard_log_path)) if 'web_api' in writers: from labml.internal.logger.writers import web_api self.web_api = web_api.Writer() logger_internal().add_writer(self.web_api) else: self.web_api = None self.checkpoint_saver = CheckpointSaver(self.run.checkpoint_path)