示例#1
0
    def _analyse_timeline(self):
        """
        Analyse and parse timeline info.
        """
        timeline_analyser = AnalyserFactory.instance().get_analyser(
            'timeline', self._output_path, self._dev_id
        )
        min_cycle_counter = timeline_analyser.get_min_cycle_counter()

        # Get framework info
        aicoredetail_analyser = AnalyserFactory.instance().get_analyser(
            'aicore_detail', self._output_path, self._dev_id
        )
        framework_info = aicoredetail_analyser.query()

        # Get all reduce info
        step_trace_analyser = AnalyserFactory.instance().get_analyser(
            'step_trace', self._output_path, self._dev_id
        )
        all_reduce_info = step_trace_analyser.query_for_all_reduce(min_cycle_counter)

        # Get timeline info
        logger.info('Start writing timeline info...')
        logger.info('Warm Prompt: It could take a few minutes if you are training '
                    'with a complex network or more than 10 steps.')
        # Add AllReduce and framework info into timeline
        timeline_analyser.init_timeline(all_reduce_info, framework_info)
        timeline_analyser.write_timeline()
        timeline_analyser.write_timeline_summary()
    def test_query_success_8(self):
        """
        Test the success of the querying function.

        All queues utilization are lower than the lowest threshold.
        """
        profiling_dir = os.path.join(os.path.dirname(__file__), 'resource')
        pipeline_path = os.path.join(profiling_dir,
                                     'minddata_pipeline_raw_3.csv')
        analyser = AnalyserFactory.instance().get_analyser(
            'minddata_pipeline', profiling_dir, '3')

        expect_result = {
            'col_name': COL_NAMES,
            'object': get_pipeline_infos(pipeline_path, [3, 4]),
            'size': 2
        }
        condition = {
            'filter_condition': {
                'threshold': [0.8, 0.2],
                'is_display_op_detail': True
            }
        }
        result = analyser.query(condition)
        assert expect_result == result
    def test_query_success_6(self):
        """
        Test the success of the querying function.

        The upstream queue utilization of the operator is greater than
        the highest threshold, and the downstream queue utilization of
        the operator is lower than the lowest threshold.
        """
        profiling_dir = os.path.join(os.path.dirname(__file__), 'resource')
        pipeline_path = os.path.join(profiling_dir,
                                     'minddata_pipeline_raw_1.csv')
        analyser = AnalyserFactory.instance().get_analyser(
            'minddata_pipeline', profiling_dir, '1')

        expect_result = {
            'col_name': COL_NAMES,
            'object': get_pipeline_infos(pipeline_path, [2]),
            'size': 1
        }
        condition = {
            'filter_condition': {
                'threshold': [0.8, 0.2],
                'is_display_op_detail': True
            }
        }
        result = analyser.query(condition)
        assert expect_result == result
示例#4
0
    def _query_op_detail_info(self, op_type_order):
        """
        Query AICORE operator detail information.

        Args:
            op_type_order(list): The name of the op type in order.

        Returns:
            dict, the AICORE operator detail information.
        """

        op_type_condition = {}
        if self._valid_optype_name:
            op_type_condition['in'] = self._valid_optype_name
        if self._filt_optype_names:
            op_type_condition['not_in'] = self._filt_optype_names

        subgraph_condition = {}
        if self._subgraph != 'all':
            subgraph_condition['in'] = [self._subgraph]

        filter_condition = {
            'op_type': op_type_condition,
            'subgraph': subgraph_condition,
            'is_display_detail': False,
            'is_display_full_op_name': self._withfullpath
        }
        analyser = AnalyserFactory.instance().get_analyser(
            'aicore_detail', self._output_path, self._dev_id
        )
        result = analyser.query_and_sort_by_op_type(
            filter_condition, op_type_order
        )
        return result
示例#5
0
def get_timeline_detail():
    """
    Get timeline detail.

    Returns:
        Response, the detail information of timeline.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/timeline
    """
    summary_dir = request.args.get("dir")
    profiler_dir = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    if not os.path.exists(profiler_dir):
        raise ProfilerDirNotFoundException(msg=summary_dir)
    device_id = request.args.get("device_id", default='0')
    _ = to_int(device_id, 'device_id')
    device_type = request.args.get("device_type", default='ascend')
    if device_type not in ['gpu', 'ascend']:
        logger.info(
            "Invalid device_type, device_type should be gpu or ascend.")
        raise ParamValueError("Invalid device_type.")

    analyser = AnalyserFactory.instance().get_analyser('timeline',
                                                       profiler_dir, device_id)
    timeline = analyser.get_display_timeline(device_type)

    return jsonify(timeline)
示例#6
0
def get_cluster_link_info():
    """
    Get cluster link info.

    Returns:
        Response, the cluster link info.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>>POST http://xxx/v1/mindinsight/profile/search-cluster-link
    """
    train_id = get_train_id(request)
    cluster_profiler_dir = os.path.join(settings.SUMMARY_BASE_DIR, train_id)
    try:
        cluster_profiler_dir = validate_and_normalize_path(
            cluster_profiler_dir, 'cluster_profiler')
    except ValidationError:
        raise ParamValueError('Invalid cluster_profiler dir')

    condition = request.stream.read()
    try:
        condition = json.loads(condition) if condition else {}
    except (json.JSONDecodeError, ValueError):
        raise ParamValueError("Json data parse failed.")

    device_id = condition.get("device_id", "0")
    to_int(device_id, 'device_id')

    analyser = AnalyserFactory.instance().get_analyser('cluster_hccl',
                                                       cluster_profiler_dir,
                                                       device_id)
    link_info = analyser.get_cluster_link_info(condition)
    return jsonify(link_info)
示例#7
0
def get_queue_info():
    """
    Get each type queue info.

    Returns:
        Response, the queue info.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/queue_info
    """
    profiler_dir_abs = get_profiler_abs_dir(request)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = unquote_args(request, "device_id")
    to_int(device_id, 'device_id')
    queue_type = unquote_args(request, "type")
    queue_info = {}

    minddata_analyser = AnalyserFactory.instance().get_analyser(
        'minddata', profiler_dir_abs, device_id)
    if queue_type == "get_next":
        queue_info, _ = minddata_analyser.analyse_get_next_info(
            info_type="queue")
    elif queue_type == "device_queue":
        queue_info, _ = minddata_analyser.analyse_device_queue_info(
            info_type="queue")

    return jsonify(queue_info)
示例#8
0
def get_timeline_summary():
    """
    Get timeline summary info.

    Returns:
        Response, the timeline summary info.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/timeline-summary
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')
    device_type = request.args.get("device_type", default='ascend')
    if device_type not in ['gpu', 'ascend']:
        logger.info(
            "Invalid device_type, device_type should be gpu or ascend.")
        raise ParamValueError("Invalid device_type.")

    analyser = AnalyserFactory.instance().get_analyser('timeline',
                                                       profiler_dir_abs,
                                                       device_id)
    summary = analyser.get_timeline_summary(device_type)

    return summary
示例#9
0
def get_target_time_info():
    """
    Get all the time information of the specified column.

    Returns:
        Response, all the time information of the specified column.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/training-trace/target-time-info
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    proc_name = request.args.get("type")
    validate_ui_proc(proc_name)
    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')

    analyser = AnalyserFactory.instance().get_analyser('step_trace',
                                                       profiler_dir_abs,
                                                       device_id)
    target_time_info = analyser.query(
        {'filter_condition': {
            'mode': 'proc',
            'proc_name': proc_name
        }})
    target_time_info['summary'] = analyser.summary
    return jsonify(target_time_info)
示例#10
0
def get_timeline_detail():
    """
    Get timeline detail.

    Returns:
        Response, the detail information of timeline.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/timeline
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')
    device_type = request.args.get("device_type", default='ascend')
    scope_name_num = request.args.get("scope_name_num", default='0')
    if device_type not in ['gpu', 'ascend']:
        logger.info(
            "Invalid device_type, device_type should be gpu or ascend.")
        raise ParamValueError("Invalid device_type.")

    analyser = AnalyserFactory.instance().get_analyser('timeline',
                                                       profiler_dir_abs,
                                                       device_id)
    timeline = analyser.get_display_timeline(device_type, scope_name_num)

    return jsonify(timeline)
示例#11
0
def get_training_trace_graph():
    """
    Get training trace info of one step.

    Returns:
        Response, the training trace info of one step.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/training-trace/graph
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    graph_type = request.args.get("type", default='0')
    graph_type = to_int(graph_type, 'graph_type')
    device_id = request.args.get("device_id", default='0')
    _ = to_int(device_id, 'device_id')
    graph_info = {}
    try:
        analyser = AnalyserFactory.instance().get_analyser(
            'step_trace', profiler_dir_abs, device_id)
    except ProfilerFileNotFoundException:
        return jsonify(graph_info)

    graph_info = analyser.query(
        {'filter_condition': {
            'mode': 'step',
            'step_id': graph_type
        }})
    graph_info['summary'] = analyser.summary
    graph_info['point_info'] = analyser.point_info
    return jsonify(graph_info)
示例#12
0
def get_memory_usage_graphics():
    """
    Get graphic representation of memory usage.

    Returns:
        Response, the graphic representation of memory usage.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/memory-graphics
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')
    device_type = request.args.get("device_type", default='ascend')
    if device_type not in ['ascend']:
        logger.info(
            "Invalid device_type, Memory Usage only supports Ascend for now.")
        raise ParamValueError("Invalid device_type.")

    analyser = AnalyserFactory.instance().get_analyser('memory_usage',
                                                       profiler_dir_abs,
                                                       device_id)
    graphics = analyser.get_memory_usage_graphics(device_type)

    return graphics
示例#13
0
    def minddata_outer_bounds_analyze(self):
        """Get the proposals of minddata outer bounds."""
        minddata_dict = OrderedDict()
        minddata_analyser = AnalyserFactory.instance().get_analyser(
            'minddata', self.profiling_path, self.device_id)
        get_next_queue_info, _ = minddata_analyser.analyse_get_next_info(info_type="queue")
        device_queue_info, _ = minddata_analyser.analyse_device_queue_info(info_type="queue")

        result = MinddataAnalyser.analyse_queue_summary(get_next_queue_info, device_queue_info)
        if "get_next_queue_info" in result:
            get_next_queue_info_summary = result.get("get_next_queue_info").get("summary", {})
            empty_batch = get_next_queue_info_summary.get("empty_batch_count")
            total_batch = get_next_queue_info_summary.get("total_batch")

            minddata_dict["minddata_get_next_queue"] = [empty_batch, total_batch]
            self.__proposal_dict.update(minddata_dict)
        if "device_queue_info" in result:
            get_next_queue_info_summary = result.get("device_queue_info").get("summary", {})
            full_batch = get_next_queue_info_summary.get("full_batch_count", 0)
            empty_batch = get_next_queue_info_summary.get("empty_batch_count", 0)
            total_batch = get_next_queue_info_summary.get("total_batch", 0)

            minddata_dict["minddata_device_queue"] = [empty_batch, total_batch, full_batch, total_batch]
            self.__proposal_dict.update(minddata_dict)

        warning_op = list()
        for key, value in result.items():
            if isinstance(value, dict):
                status = value.get("status")
                if status == "warning":
                    warning_op.append(key)

        if warning_op:
            minddata_dict["minddata_warning_op"] = [",".join(warning_op)]
            self.__proposal_dict.update(minddata_dict)
示例#14
0
def get_memory_usage_breakdowns():
    """
    Get memory breakdowns of each node.

    Returns:
        Response, the memory breakdowns for each node.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/memory-breakdowns
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')
    device_type = request.args.get("device_type", default='ascend')
    graph_id = request.args.get("graph_id", default='0')
    node_id = request.args.get("node_id", default='0')
    node_id = to_int(node_id, 'node_id')
    if device_type not in ['ascend']:
        logger.error(
            "Invalid device_type, Memory Usage only supports Ascend for now.")
        raise ParamValueError("Invalid device_type.")

    analyser = AnalyserFactory.instance().get_analyser('memory_usage',
                                                       profiler_dir_abs,
                                                       device_id)
    breakdowns = analyser.get_memory_usage_breakdowns(device_type, graph_id,
                                                      node_id)

    return breakdowns
 def test_timeline_file_not_exist(self):
     """Test the function of get timeline data for UI display."""
     device_id = 1
     analyser = AnalyserFactory.instance().get_analyser(
         'timeline', self.profiler, device_id)
     analyser.get_timeline_summary("gpu")
     analyser.get_display_timeline("gpu", 0)
示例#16
0
def get_cluster_flops():
    """
    Get cluster FLOPs.

    Returns:
        str, the cluster FLOPs.

    Raises:
        ParamValueError: If the cluster profiler dir is invalid.

    Examples:
        >>>GET http://xxx/v1/mindinsight/profile/cluster-flops
    """
    train_id = get_train_id(request)
    if not train_id:
        raise ParamValueError('No train id.')
    cluster_profiler_dir = os.path.join(settings.SUMMARY_BASE_DIR, train_id)
    cluster_profiler_dir = validate_and_normalize_path(cluster_profiler_dir,
                                                       'cluster_profiler')
    check_train_job_and_profiler_dir(cluster_profiler_dir)

    analyser = AnalyserFactory.instance().get_analyser('cluster_flops',
                                                       cluster_profiler_dir)
    flops = analyser.get_flops()
    return jsonify(flops)
示例#17
0
def get_process_summary():
    """
    Get interval process summary.

    Returns:
        Response, the process summary.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/process_summary
    """
    profiler_dir_abs = get_profiler_abs_dir(request)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = unquote_args(request, "device_id")
    to_int(device_id, 'device_id')

    minddata_analyser = AnalyserFactory.instance().get_analyser(
        'minddata', profiler_dir_abs, device_id)
    get_next_queue_info, _ = minddata_analyser.analyse_get_next_info(
        info_type="queue")
    device_queue_info, _ = minddata_analyser.analyse_device_queue_info(
        info_type="queue")

    result = MinddataAnalyser.analyse_queue_summary(get_next_queue_info,
                                                    device_queue_info)

    return jsonify(result)
示例#18
0
def get_time_info():
    """
    Get minddata operation info.

    Returns:
        Response, the minddata operation info.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/minddata_op
    """
    profiler_dir_abs = get_profiler_abs_dir(request)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = unquote_args(request, "device_id")
    to_int(device_id, 'device_id')
    op_type = unquote_args(request, "type")

    time_info = {
        'size': 0,
        'info': [],
        "summary": {
            "time_summary": {}
        },
        "advise": {}
    }
    minddata_analyser = AnalyserFactory.instance().get_analyser(
        'minddata', profiler_dir_abs, device_id)
    if op_type == "get_next":
        _, time_info = minddata_analyser.analyse_get_next_info(
            info_type="time")
    elif op_type == "device_queue":
        _, time_info = minddata_analyser.analyse_device_queue_info(
            info_type="time")

    return jsonify(time_info)
示例#19
0
 def get_analyser_result(self, analyser_type, condition=None):
     logger.debug("The Proposer 'analyser_type' is %s, 'options' is %s", str(analyser_type), str(condition))
     analyser_result = {}
     try:
         analyser = AnalyserFactory.instance().get_analyser(analyser_type, self.profiling_path, self.device_id)
         analyser_result = analyser.query(condition)
         logger.debug("The 'analyser_result' is %s, the 'condition' is %s.", str(analyser_result), str(condition))
     except MindInsightException as e:
         logger.warning(e)
     return analyser_result
示例#20
0
 def test_target_info_api(self):
     """Test step trace restful api."""
     condition = {'filter_condition': {'mode': 'proc', 'step_id': None}}
     analyser = AnalyserFactory.instance().get_analyser(
         'step_trace', self.profiler, '1')
     for proc_name in ['iteration_interval', 'fp_and_bp', 'tail']:
         condition['filter_condition']['proc_name'] = proc_name
         res = analyser.query(condition)
         assert res['size'] == 322
         assert len(res['info'][proc_name]) == res['size']
示例#21
0
 def test_summary_for_step_trace(self):
     """Test summary for step trace."""
     analyser = AnalyserFactory.instance().get_analyser('step_trace', self.profiler, '1')
     summary = analyser.summary
     assert summary == {
         'total_time': 205.3809,
         'iteration_interval': 0.2038,
         'iteration_interval_percent': '0.1%',
         'fp_and_bp': 118.054,
         'fp_and_bp_percent': '57.48%',
         'tail': 87.1231,
         'tail_percent': '42.42%',
         'total_steps': 322}
示例#22
0
def get_profile_op_info():
    """
    Get operation profiling info.

    Returns:
        str, the operation profiling information.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>> POST http://xxxx/v1/mindinsight/profile/ops/search
    """
    profiler_dir = get_profiler_dir(request)
    train_id = get_train_id(request)
    if not profiler_dir or not train_id:
        raise ParamValueError("No profiler_dir or train_id.")

    search_condition = request.stream.read()
    try:
        search_condition = json.loads(
            search_condition if search_condition else "{}")
    except (json.JSONDecodeError, ValueError):
        raise ParamValueError("Json data parse failed.")
    validate_condition(search_condition)

    device_id = search_condition.get("device_id", "0")
    to_int(device_id, 'device_id')
    profiler_dir_abs = os.path.join(settings.SUMMARY_BASE_DIR, train_id,
                                    profiler_dir)
    try:
        profiler_dir_abs = validate_and_normalize_path(profiler_dir_abs,
                                                       "profiler")
    except ValidationError:
        raise ParamValueError("Invalid profiler dir")

    check_train_job_and_profiler_dir(profiler_dir_abs)

    op_type = search_condition.get("op_type")

    analyser = AnalyserFactory.instance().get_analyser(op_type,
                                                       profiler_dir_abs,
                                                       device_id)

    op_info = analyser.query(search_condition)
    return jsonify(op_info)
示例#23
0
    def _query_op_type_info(self):
        """
        Query AICORE operator type information.

        Returns:
            list[list], the AICORE operator type and execution time information.
        """
        condition = {
            'sort_condition': {
                'name': 'execution_time',
                'type': 'descending'
            }
        }
        analyser = AnalyserFactory.instance().get_analyser(
            'aicore_type', self._output_path, self._dev_id
        )
        result = analyser.query(condition)
        return result.get('object')
示例#24
0
 def minddata_cpu_utilization_proposal(self):
     """Get the proposals of minddata cpu utilization"""
     filename = "minddata_cpu_utilization_{}.json".format(self.device_id)
     file_path = os.path.join(self.profiling_path, filename)
     # Forward compatibility, it is reasonable that the file does not exist.
     if not os.path.exists(file_path):
         return
     minddata_cpu_utilization = OrderedDict()
     minddata_cpu_utilization_analyser = AnalyserFactory.instance().get_analyser(
         'minddata_cpu_utilization', self.profiling_path, self.device_id)
     try:
         idle_utilization_avg = minddata_cpu_utilization_analyser.get_idle_utilization_avg()
         # The maximum value of this cpu_activate_utilization_avg is 100%.
         cpu_activate_utilization_avg = 100 - idle_utilization_avg
         cpu_activate_utilization_threshold = 80
         if cpu_activate_utilization_avg > cpu_activate_utilization_threshold:
             minddata_cpu_utilization["minddata_cpu_utilization"] = [cpu_activate_utilization_avg]
             self.__proposal_dict.update(minddata_cpu_utilization)
     except (ProfilerRawFileException, ProfilerFileNotFoundException) as err:
         log.exception(err)
示例#25
0
def get_training_trace_graph():
    """
    Get training trace info of one step.

    Returns:
        Response, the training trace info of one step.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/training-trace/graph
    """
    summary_dir = request.args.get("dir")
    profiler_dir_abs = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    check_train_job_and_profiler_dir(profiler_dir_abs)

    graph_type = request.args.get("type", default='0')
    graph_type = to_int(graph_type, 'graph_type')
    device_id = request.args.get("device_id", default='0')
    to_int(device_id, 'device_id')
    graph_info = {}
    try:
        analyser = AnalyserFactory.instance().get_analyser(
            'step_trace', profiler_dir_abs, device_id)
    except ProfilerFileNotFoundException:
        return jsonify(graph_info)

    graph_info = analyser.query(
        {'filter_condition': {
            'mode': 'step',
            'step_id': graph_type
        }})
    graph_info['summary'] = analyser.summary
    graph_info['point_info'] = analyser.point_info(graph_type)
    graph_info['is_heterogeneous'] = False

    # In heterogeneous training scene, do not display step trace data.
    cpu_op_type_file_name = f"cpu_op_type_info_{device_id}.csv"
    if cpu_op_type_file_name in os.listdir(profiler_dir_abs):
        graph_info = {'is_heterogeneous': True}

    return jsonify(graph_info)
示例#26
0
def get_minddata_pipeline_op_queue_info():
    """
    Get minddata pipeline operator info and queue info.

    Returns:
        str, the operation information and queue information.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>> POST http://xxxx/v1/mindinsight/profile/minddata-pipeline/op-queue
    """
    profiler_dir = get_profiler_dir(request)
    train_id = get_train_id(request)
    if not profiler_dir or not train_id:
        raise ParamValueError("No profiler_dir or train_id.")

    profiler_dir_abs = os.path.join(settings.SUMMARY_BASE_DIR, train_id,
                                    profiler_dir)
    try:
        profiler_dir_abs = validate_and_normalize_path(profiler_dir_abs,
                                                       "profiler")
    except ValidationError:
        raise ParamValueError("Invalid profiler dir.")

    check_train_job_and_profiler_dir(profiler_dir_abs)
    condition = request.stream.read()
    try:
        condition = json.loads(condition) if condition else {}
    except Exception:
        raise ParamValueError("Json data parse failed.")
    validate_minddata_pipeline_condition(condition)

    device_id = condition.get("device_id", "0")
    to_int(device_id, 'device_id')
    analyser = AnalyserFactory.instance().get_analyser('minddata_pipeline',
                                                       profiler_dir_abs,
                                                       device_id)
    op_info = analyser.query(condition)
    return jsonify(op_info)
示例#27
0
def get_timeline_summary():
    """
    Get timeline summary info.

    Returns:
        Response, the timeline summary info.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/timeline-summary
    """
    summary_dir = request.args.get("dir")
    profiler_dir = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    device_id = request.args.get("device_id", default='0')
    _ = to_int(device_id, 'device_id')

    analyser = AnalyserFactory.instance().get_analyser('timeline',
                                                       profiler_dir, device_id)
    summary = analyser.get_timeline_summary()

    return summary
示例#28
0
def get_timeline_detail():
    """
    Get timeline detail.

    Returns:
        Response, the detail information of timeline.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/timeline
    """
    summary_dir = request.args.get("dir")
    profiler_dir = validate_and_normalize_profiler_path(
        summary_dir, settings.SUMMARY_BASE_DIR)
    device_id = request.args.get("device_id", default='0')
    _ = to_int(device_id, 'device_id')

    analyser = AnalyserFactory.instance().get_analyser('timeline',
                                                       profiler_dir, device_id)
    timeline = analyser.get_display_timeline()

    return jsonify(timeline)
示例#29
0
def get_minddata_cpu_utilization_info():
    """
    Get minddata cpu utilization info.

    Returns:
        str, the minddata cpu utilization info.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>>POST http://xxx/v1/mindinsight/profile/minddata-cpu-utilization-summary
    """
    profiler_dir = get_profiler_dir(request)
    train_id = get_train_id(request)
    if not profiler_dir or not train_id:
        raise ParamValueError("No profiler_dir or train_id.")

    profiler_dir_abs = os.path.join(settings.SUMMARY_BASE_DIR, train_id,
                                    profiler_dir)

    try:
        profiler_dir_abs = validate_and_normalize_path(profiler_dir_abs,
                                                       "profiler")
    except ValidationError:
        raise ParamValueError("Invalid profiler dir.")

    check_train_job_and_profiler_dir(profiler_dir_abs)
    condition = request.stream.read()
    try:
        condition = json.loads(condition) if condition else {}
    except (json.JSONDecodeError, ValueError):
        raise ParamValueError("Json data parse failed.")

    device_id = condition.get("device_id", "0")
    to_int(device_id, 'device_id')
    analyser = AnalyserFactory.instance().get_analyser(
        'minddata_cpu_utilization', profiler_dir_abs, device_id)
    cpu_utilization = analyser.query(condition)
    return jsonify(cpu_utilization)
示例#30
0
def get_minddata_pipeline_queue_info():
    """
    Get the special minddata pipeline queue info.

    Returns:
        str, the queue information.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>> GET http://xxxx/v1/mindinsight/profile/minddata-pipeline/queue
    """
    profiler_dir = get_profiler_dir(request)
    train_id = get_train_id(request)
    if not profiler_dir or not train_id:
        raise ParamValueError("No profiler_dir or train_id.")

    profiler_dir_abs = os.path.join(settings.SUMMARY_BASE_DIR, train_id,
                                    profiler_dir)
    try:
        profiler_dir_abs = validate_and_normalize_path(profiler_dir_abs,
                                                       "profiler")
    except ValidationError:
        raise ParamValueError("Invalid profiler dir.")

    check_train_job_and_profiler_dir(profiler_dir_abs)

    device_id = request.args.get('device_id', default='0')
    to_int(device_id, 'device_id')
    op_id = request.args.get('op_id', type=int)
    if op_id is None:
        raise ParamValueError(
            "Invalid operator id or operator id does not exist.")

    analyser = AnalyserFactory.instance().get_analyser('minddata_pipeline',
                                                       profiler_dir_abs,
                                                       device_id)
    op_queue_info = analyser.get_op_and_parent_op_info(op_id)
    return jsonify(op_queue_info)