def _get_pipeline_path(self, source_dir): """ Get the minddata pipeline file path. Args: source_dir (str): The minddata pipeline source dir. Returns: str, the minddata pipeline file path. """ pipeline_path = os.path.join( source_dir, self._raw_pipeline_file_name.format(self._device_id)) try: pipeline_path = validate_and_normalize_path(pipeline_path) except RuntimeError: logger.warning('Minddata pipeline file is invalid.') raise ProfilerPathErrorException( 'Minddata pipeline file is invalid.') if not os.path.isfile(pipeline_path): logger.warning('The minddata pipeline file <%s> not found.', pipeline_path) raise ProfilerFileNotFoundException(pipeline_path) return pipeline_path
def _search_file(input_dir): """Search step trace file under specific input directory.""" # validate input_dir if not os.path.isdir(input_dir): raise ProfilerPathErrorException( '{} does not exist or is not a dir'.format(input_dir) ) # get step trace files files = os.listdir(input_dir) step_trace_files = list( filter( lambda file: file.startswith('training_trace') and not file.endswith('.done'), files ) ) # validate result if len(step_trace_files) > 1: # the format of file name is like # `training_trace.46.dev.profiler_default_tag.$id.slice_$number` # use the $number as the sorted key try: step_trace_files.sort(key=lambda path: int(path.rsplit('_', 1)[-1])) except ValueError as err: log.warning("Unable to parse file names: %s. %s", step_trace_files, err) step_trace_files = [] file_paths = [os.path.join(input_dir, file) for file in step_trace_files] log.info("Find %d step trace files.", len(file_paths)) return file_paths
def _get_step_trace_files(self): """Get step trace files.""" # step trace files may under $profiler_dir or $profiler_dir/data profiler_dir = self._input_dir step_trace_files = self._search_file(profiler_dir) if not step_trace_files: # try to find step trace files under $profiler_dir/data profiler_dir = os.path.join(profiler_dir, 'data') step_trace_files = self._search_file(profiler_dir) if not step_trace_files: raise ProfilerPathErrorException('Training trace file does not exist.') return step_trace_files
def _get_save_path(self, output_path): """ Get the save path. Args: output_path (str): The output dir. Returns: str, the save path. """ try: output_dir = validate_and_normalize_path(output_path) except ValidationError: logger.warning('Output path is invalid.') raise ProfilerPathErrorException('Output path is invalid.') if not os.path.isdir(output_dir): logger.warning('The output dir <%s> not found.', output_dir) raise ProfilerDirNotFoundException(output_dir) return os.path.join( output_dir, self._parsed_pipeline_file_name.format(self._device_id))
def _get_raw_profiling_path(self, profiling_id): """ Get raw profiling path. Args: profiling_id (str): The profiling ID. Returns: str, the raw profiling path. Raises: ProfilerPathErrorException: If the profiling path is invalid. ProfilerDirNotFoundException: If the profiling dir is not found. """ profiling_path = os.path.join(self._raw_data_dir, profiling_id) try: profiling_path = validate_and_normalize_path(profiling_path) except RuntimeError: raise ProfilerPathErrorException('Profiling path is invalid.') if not os.path.isdir(profiling_path): raise ProfilerDirNotFoundException(profiling_path) return profiling_path
def _get_save_path(self, device_id, output_path): """ Get the save path. Args: device_id (str): The device ID. output_path (str): The output dir. Returns: str, the save path. Raises: ProfilerPathErrorException: If the output path is invalid. ProfilerDirNotFoundException: If the output dir is not found. """ try: output_dir = validate_and_normalize_path(output_path) except RuntimeError: raise ProfilerPathErrorException('Output path is invalid.') if not os.path.isdir(output_dir): raise ProfilerDirNotFoundException(output_dir) return os.path.join(output_dir, '_'.join(['framework', 'raw', device_id]) + '.csv')