Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DOCS] add benchmark log format doc #4366

Merged
merged 4 commits into from
Dec 2, 2019
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions docs/dev/benchmark.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
.. Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

.. http://www.apache.org/licenses/LICENSE-2.0

.. Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

********************************
Benchmark Performance Log Format
********************************
This page details schema v0.1 for a unified benchmark log format. This schema will allow easier cross-references with other frameworks/runs, experiment reproduction, data for nightly perf regression, and the separation of logging/visualization efforts.

Log Format Overview
~~~~~~~~~~~~~~~~~~~

This schema primarily reflects coarse-grained grouping of parameters required for reproduction, so the naming/inclusion of fields within nested json objects may be unstable. We have included some suggestions and examples for propagation of these fields.

+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| header | examples | category | notes/justification |
+=======================+==============================================================================================================================================================================+==============+==============================================================================+
| timestamp | 1572282699.6 | metadata | indicates when this record is logged |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| schema\_version | 0.1 | metadata | ensure reproducibility as we iterate on this schema |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| metadata | { "docker\_tag":"gcr.io/.../0a680", ... } | metadata | ``docker_tag`` is required |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| workload | resnet-18 | workload | name of workload |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| workload\_args | {“input\_name”: "Input3", “input\_shape”: [list\_of\_shape], “data\_layout”: NHCW} | workload | |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| workload\_metadata | {"class": "vision","doc\_url": "``https://github.com/.../README.md``", "opset": 7,"type": "body\_analysis","url": "``https://onnxzoo...ferplus.tar.gz``", "md5": "07fc7..."} | workload | source of workload |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| engine | tvm / onnx-runtime | compiler | |
anwang2009 marked this conversation as resolved.
Show resolved Hide resolved
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| engine\_version | 0.5 / 996cf30e8d54b4bf58f0c9950475f47bba7e2c7e | compiler | include either version or SHA, or both in the format "0.5:996cf3..." |
anwang2009 marked this conversation as resolved.
Show resolved Hide resolved
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| engine\_config | {“llvm”: “llvm-8”, “nvcc”: 10.1, "accelerator": "MLAS"} | compiler | fields are optionally specified |
anwang2009 marked this conversation as resolved.
Show resolved Hide resolved
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| compilation\_config | {"opt\_level": 3, "layer\_schedules": [...]} | compiler | optional |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| software\_config | {"os": "ubuntu:18.04","pip": { "docker": "4.1.0", "gitpython": "3.0.4", "numpy": "1.17.4", "onnx": "1.6.0"}, “cudnn”: “cudnn-8”, "cuda_driver”: “480.10.1”} | backend | env dependency list |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| hardware\_config | "mbp13inch2019" | hardware | descriptor of target hardware environment, optionally json |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| execution\_config | {“number”: 1, “repeat”: 10, “min\_repeat\_ms”, 0} | statistics | workload execution parameters, optional |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+
| statistics | {“runtime\_ms\_mean”: 12,“runtime\_ms\_std”: 12} | statistics | all metrics, other optional fields ``binary_size``, ``compile_time``, etc. |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------+



Storage format
~~~~~~~~~~~~~~
Currently we're prototyping benchmark data as JSON objects for extensibility and convenience, especially in early versions of the schema. However, as we scale up benchmark aggregation and stabilize parameters, we anticipate switching to a columnar format, such as Arrow or Parquet.

Here is sample data encoded as JSON:

::

{
"compilation_config":{
"relay_opt_lvl":3,
"tvm_target":"llvm -mcpu=cascadelake"
},
"engine":"tvm",
"engine_config":{
"llvm":"llvm-8"
},
"engine_version":"3486e2c2cf9d0c7c20853f3503528444ce824c1b",
"hardware_config":"c2-standard-16",
"metadata":{
"docker_tag":"tvmai/ci-gpu:v0.53"
},
"schema_version":0.1,
"software_config":{
"os":"ubuntu:18.04",
"pip":{
"docker":"4.1.0",
"gitpython":"3.0.4",
"numpy":"1.17.4",
"onnx":"1.6.0"
}
},
"statistics":{
"compile_ms":3030.268669128418,
"runtime_ms_mean":42.473589888888895,
"runtime_ms_std":2.184165809925635
anwang2009 marked this conversation as resolved.
Show resolved Hide resolved
},
"timestamp":"20191121223511",
"workload":"vgg19",
"workload_args":{
"input_shape_dict":{
"data_0":[
1,
3,
224,
224
]
},
"input_type_dict":{
"data_0":"float32"
},
"input_value_dict":{}
},
"workload_metadata":{
"class":"vision",
"doc_url":"https://github.com/onnx/models/blob/master/vision/classification/vgg/vgg19/README.md",
"md5":"07e9a6784c3d6d32e61e14ee8ceabfc7",
"opset":3,
"type":"classification",
"url":"https://s3.amazonaws.com/download.onnx/models/opset_3/vgg19.tar.gz"
}
}
1 change: 1 addition & 0 deletions docs/dev/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,4 @@ In this part of documentation, we share the rationale for the specific choices m
inferbound
nnvm_json_spec
nnvm_overview
benchmark