From 33b2320763a3e2d87c467b929b5a9eabf9d0540b Mon Sep 17 00:00:00 2001 From: Marcel R Date: Wed, 10 Apr 2024 11:33:35 +0200 Subject: [PATCH] AOT mechanism. --- .flake8 | 2 +- .gitattributes | 2 + .gitignore | 2 - .../plugins/aot/TFAOTInference.cc | 37 +--- .../test/onnx_runtime_cfg.py | 78 +++++-- .../RuntimeMeasurement/test/tf_runtime_cfg.py | 78 +++++-- .../test/tfaot_runtime_cfg.py | 44 ++-- cmssw/install_sandbox_tfaot.sh | 15 +- examples/cnn/model_tf.yaml | 13 ++ examples/dnn_2_inputs/model_tf.yaml | 15 ++ examples/simple/create.py | 55 ----- examples/simple/saved_model/fingerprint.pb | 3 - examples/simple/saved_model/saved_model.pb | 3 - .../variables/variables.data-00000-of-00001 | Bin 302323 -> 0 bytes .../saved_model/variables/variables.index | Bin 3386 -> 0 bytes examples/simple_dnn/create.py | 76 +++++++ examples/simple_dnn/frozen_graph_l10u128.pb | 3 + examples/simple_dnn/frozen_graph_l10u256.pb | 3 + examples/simple_dnn/frozen_graph_l20u128.pb | 3 + examples/simple_dnn/frozen_graph_l20u256.pb | 3 + examples/simple_dnn/model_tf_l10u128.yaml | 11 + examples/simple_dnn/model_tf_l10u256.yaml | 11 + examples/simple_dnn/model_tf_l20u128.yaml | 11 + examples/simple_dnn/model_tf_l20u256.yaml | 11 + examples/simple_dnn/model_tfaot_l10u128.yaml | 12 + examples/simple_dnn/model_tfaot_l10u256.yaml | 12 + .../simple_dnn/model_tfaot_l10u256_bs.yaml | 12 + examples/simple_dnn/model_tfaot_l20u128.yaml | 12 + examples/simple_dnn/model_tfaot_l20u256.yaml | 12 + .../saved_model_l10u128/fingerprint.pb | 3 + .../saved_model_l10u128/saved_model.pb | 3 + .../variables/variables.data-00000-of-00001 | 3 + .../variables/variables.index | 3 + .../saved_model_l10u256/fingerprint.pb | 3 + .../saved_model_l10u256/saved_model.pb | 3 + .../variables/variables.data-00000-of-00001 | 3 + .../variables/variables.index | 3 + .../saved_model_l20u128/fingerprint.pb | 3 + .../saved_model_l20u128/saved_model.pb | 3 + .../variables/variables.data-00000-of-00001 | 3 + .../variables/variables.index | 3 + .../saved_model_l20u256/fingerprint.pb | 3 + .../saved_model_l20u256/saved_model.pb | 3 + .../variables/variables.data-00000-of-00001 | 3 + .../variables/variables.index | 3 + examples/simple_dnn_old/model_onnx.yaml | 13 ++ examples/simple_dnn_old/model_tf.yaml | 13 ++ .../simple_dnn.onnx | Bin .../simple_dnn.pb | 0 mlprof/plotting/plotter.py | 208 ++++++++++-------- mlprof/scripts/__init__.py | 7 + {cmssw => mlprof/scripts}/render_aot.py | 13 +- mlprof/tasks/base.py | 31 ++- mlprof/tasks/parameters.py | 130 ++++++++--- mlprof/tasks/runtime.py | 199 ++++++----------- mlprof/tasks/sandboxes.py | 18 +- mlprof/util.py | 14 ++ 57 files changed, 811 insertions(+), 422 deletions(-) create mode 100644 examples/cnn/model_tf.yaml create mode 100644 examples/dnn_2_inputs/model_tf.yaml delete mode 100644 examples/simple/create.py delete mode 100644 examples/simple/saved_model/fingerprint.pb delete mode 100644 examples/simple/saved_model/saved_model.pb delete mode 100644 examples/simple/saved_model/variables/variables.data-00000-of-00001 delete mode 100644 examples/simple/saved_model/variables/variables.index create mode 100644 examples/simple_dnn/create.py create mode 100644 examples/simple_dnn/frozen_graph_l10u128.pb create mode 100644 examples/simple_dnn/frozen_graph_l10u256.pb create mode 100644 examples/simple_dnn/frozen_graph_l20u128.pb create mode 100644 examples/simple_dnn/frozen_graph_l20u256.pb create mode 100644 examples/simple_dnn/model_tf_l10u128.yaml create mode 100644 examples/simple_dnn/model_tf_l10u256.yaml create mode 100644 examples/simple_dnn/model_tf_l20u128.yaml create mode 100644 examples/simple_dnn/model_tf_l20u256.yaml create mode 100644 examples/simple_dnn/model_tfaot_l10u128.yaml create mode 100644 examples/simple_dnn/model_tfaot_l10u256.yaml create mode 100644 examples/simple_dnn/model_tfaot_l10u256_bs.yaml create mode 100644 examples/simple_dnn/model_tfaot_l20u128.yaml create mode 100644 examples/simple_dnn/model_tfaot_l20u256.yaml create mode 100644 examples/simple_dnn/saved_model_l10u128/fingerprint.pb create mode 100644 examples/simple_dnn/saved_model_l10u128/saved_model.pb create mode 100644 examples/simple_dnn/saved_model_l10u128/variables/variables.data-00000-of-00001 create mode 100644 examples/simple_dnn/saved_model_l10u128/variables/variables.index create mode 100644 examples/simple_dnn/saved_model_l10u256/fingerprint.pb create mode 100644 examples/simple_dnn/saved_model_l10u256/saved_model.pb create mode 100644 examples/simple_dnn/saved_model_l10u256/variables/variables.data-00000-of-00001 create mode 100644 examples/simple_dnn/saved_model_l10u256/variables/variables.index create mode 100644 examples/simple_dnn/saved_model_l20u128/fingerprint.pb create mode 100644 examples/simple_dnn/saved_model_l20u128/saved_model.pb create mode 100644 examples/simple_dnn/saved_model_l20u128/variables/variables.data-00000-of-00001 create mode 100644 examples/simple_dnn/saved_model_l20u128/variables/variables.index create mode 100644 examples/simple_dnn/saved_model_l20u256/fingerprint.pb create mode 100644 examples/simple_dnn/saved_model_l20u256/saved_model.pb create mode 100644 examples/simple_dnn/saved_model_l20u256/variables/variables.data-00000-of-00001 create mode 100644 examples/simple_dnn/saved_model_l20u256/variables/variables.index create mode 100644 examples/simple_dnn_old/model_onnx.yaml create mode 100644 examples/simple_dnn_old/model_tf.yaml rename examples/{simple_dnn => simple_dnn_old}/simple_dnn.onnx (100%) rename examples/{simple_dnn => simple_dnn_old}/simple_dnn.pb (100%) create mode 100644 mlprof/scripts/__init__.py rename {cmssw => mlprof/scripts}/render_aot.py (90%) create mode 100644 mlprof/util.py diff --git a/.flake8 b/.flake8 index 8d408ca..2daa5c2 100644 --- a/.flake8 +++ b/.flake8 @@ -1,6 +1,6 @@ [flake8] -# line length of 100 is recommended, but set it to a forgiving value +# line length max-line-length = 120 # codes of errors to ignore diff --git a/.gitattributes b/.gitattributes index d865b62..8feca75 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,5 @@ *.pb filter=lfs diff=lfs merge=lfs -text *.pb.txt filter=lfs diff=lfs merge=lfs -text *.pbtxt filter=lfs diff=lfs merge=lfs -text +*.index filter=lfs diff=lfs merge=lfs -text +*.data-* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 64cb7a8..b33cdc8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,8 +12,6 @@ *.npz *.h5 *.hdf5 -*.json -*.yaml *.out *.parquet .coverage diff --git a/cmssw/MLProf/RuntimeMeasurement/plugins/aot/TFAOTInference.cc b/cmssw/MLProf/RuntimeMeasurement/plugins/aot/TFAOTInference.cc index 4dfe277..a4ec577 100644 --- a/cmssw/MLProf/RuntimeMeasurement/plugins/aot/TFAOTInference.cc +++ b/cmssw/MLProf/RuntimeMeasurement/plugins/aot/TFAOTInference.cc @@ -59,7 +59,7 @@ class TFAOTInference : public edm::stream::EDAnalyzer<> { std::normal_distribution normalPDFDouble_; // aot model - tfaot::Model model_; + // INSERT=model }; void TFAOTInference::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -108,37 +108,10 @@ TFAOTInference::TFAOTInference(const edm::ParameterSet& config) throw cms::Exception("InvalidInputType") << "input type unknown: " << inputTypeStr_; } - // parse and register batch rules - for (size_t i = 0; i < batchRules_.size(); i++) { - std::string rule = batchRules_[i]; - - // extract the target batch size from the front - auto pos = rule.find(":"); - if (pos == std::string::npos) { - throw cms::Exception("InvalidBatchRule") << "invalid batch rule format: " << batchRules_[i]; - } - size_t batchSize = std::stoi(rule.substr(0, pos)); - rule = rule.substr(pos + 1); - - // loop through remaining comma-separated composite batch size - std::vector sizes; - size_t sumSizes = 0; - while (!rule.empty()) { - pos = rule.find(","); - sizes.push_back(std::stoi(rule.substr(0, pos))); - sumSizes += sizes.back(); - rule = rule.substr(pos + 1); - } - - // the sum of composite batch sizes should never be smaller than the target batch size - if (sumSizes < batchSize) { - throw cms::Exception("InvalidBatchRule") - << "sum of composite batch sizes is smaller than target batch size: " << batchRules_[i]; - } - - // register the batch rule - model_.setBatchRule(batchSize, sizes, sumSizes - batchSize); - std::cout << "registered batch rule for batch size " << batchSize << std::endl; + // register batch rules + for (const auto& rule : batchRules_) { + model_.setBatchRule(rule); + std::cout << "registered batch rule " << rule << std::endl; } } diff --git a/cmssw/MLProf/RuntimeMeasurement/test/onnx_runtime_cfg.py b/cmssw/MLProf/RuntimeMeasurement/test/onnx_runtime_cfg.py index 35cde2a..4e8f27c 100644 --- a/cmssw/MLProf/RuntimeMeasurement/test/onnx_runtime_cfg.py +++ b/cmssw/MLProf/RuntimeMeasurement/test/onnx_runtime_cfg.py @@ -5,19 +5,69 @@ # setup minimal options options = VarParsing("python") +options.setDefault("maxEvents", 1) +options.register( + "csvFile", + "results.csv", + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "path of the csv file to save results", +) options.register( "batchSize", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int, - "Batch size to be tested", + "batch size to be tested", ) options.register( - "csvFile", - "results.csv", + "inputType", + "", + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "input type; 'random', 'incremental', 'zeros', or 'ones'", +) +options.register( + "nCalls", + 100, + VarParsing.multiplicity.singleton, + VarParsing.varType.int, + "number of evaluation calls for averaging", +) +options.register( + "graphPath", + "", VarParsing.multiplicity.singleton, VarParsing.varType.string, - "The path of the csv file to save results", + "path to the graph file", +) +options.register( + "inputTensorNames", + [], + VarParsing.multiplicity.list, + VarParsing.varType.string, + "names of the input tensors", +) +options.register( + "outputTensorNames", + [], + VarParsing.multiplicity.list, + VarParsing.varType.string, + "Names of the output tensors", +) +options.register( + "inputRanks", + [], + VarParsing.multiplicity.list, + VarParsing.varType.int, + "ranks of the input tensors", +) +options.register( + "flatInputSizes", + [], + VarParsing.multiplicity.list, + VarParsing.varType.int, + "sizes of the flattened input tensors; the amount should match the sum of ranks", ) options.parseArguments() @@ -29,11 +79,11 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.maxEvents = cms.untracked.PSet( - input=cms.untracked.int32(__N_EVENTS__), # noqa + input=cms.untracked.int32(options.maxEvents), ) process.source = cms.Source( "PoolSource", - fileNames=cms.untracked.vstring(*__INPUT_FILES__), # noqa + fileNames=cms.untracked.vstring(options.inputFiles), ) # process options @@ -44,20 +94,20 @@ # multi-threading options process.options.numberOfThreads = cms.untracked.uint32(1) -process.options.numberOfStreams = cms.untracked.uint32(0) +process.options.numberOfStreams = cms.untracked.uint32(1) process.options.numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1) # setup the plugin process.load("MLProf.RuntimeMeasurement.onnxInference_cfi") -process.onnxInference.graphPath = cms.string("__GRAPH_PATH__") -process.onnxInference.inputTensorNames = cms.vstring(__INPUT_TENSOR_NAMES__) # noqa -process.onnxInference.outputTensorNames = cms.vstring(__OUTPUT_TENSOR_NAMES__) # noqa +process.onnxInference.graphPath = cms.string(options.graphPath) +process.onnxInference.inputTensorNames = cms.vstring(options.inputTensorNames) +process.onnxInference.outputTensorNames = cms.vstring(options.outputTensorNames) process.onnxInference.outputFile = cms.string(options.csvFile) -process.onnxInference.inputType = cms.string("__INPUT_TYPE__") -process.onnxInference.inputRanks = cms.vint32(__INPUT_RANKS__) # noqa -process.onnxInference.flatInputSizes = cms.vint32(__FLAT_INPUT_SIZES__) # noqa +process.onnxInference.inputType = cms.string(options.inputType) +process.onnxInference.inputRanks = cms.vint32(options.inputRanks) +process.onnxInference.flatInputSizes = cms.vint32(options.flatInputSizes) process.onnxInference.batchSize = cms.int32(options.batchSize) -process.onnxInference.nCalls = cms.int32(__N_CALLS__) # noqa +process.onnxInference.nCalls = cms.int32(options.nCalls) # define what to run in the path process.p = cms.Path(process.onnxInference) diff --git a/cmssw/MLProf/RuntimeMeasurement/test/tf_runtime_cfg.py b/cmssw/MLProf/RuntimeMeasurement/test/tf_runtime_cfg.py index e0b59d4..e3e820a 100644 --- a/cmssw/MLProf/RuntimeMeasurement/test/tf_runtime_cfg.py +++ b/cmssw/MLProf/RuntimeMeasurement/test/tf_runtime_cfg.py @@ -5,19 +5,69 @@ # setup minimal options options = VarParsing("python") +options.setDefault("maxEvents", 1) +options.register( + "csvFile", + "results.csv", + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "path of the csv file to save results", +) options.register( "batchSize", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int, - "Batch size to be tested", + "batch size to be tested", ) options.register( - "csvFile", - "results.csv", + "inputType", + "", + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "input type; 'random', 'incremental', 'zeros', or 'ones'", +) +options.register( + "nCalls", + 100, + VarParsing.multiplicity.singleton, + VarParsing.varType.int, + "number of evaluation calls for averaging", +) +options.register( + "graphPath", + "", VarParsing.multiplicity.singleton, VarParsing.varType.string, - "The path of the csv file to save results", + "path to the graph file", +) +options.register( + "inputTensorNames", + [], + VarParsing.multiplicity.list, + VarParsing.varType.string, + "names of the input tensors", +) +options.register( + "outputTensorNames", + [], + VarParsing.multiplicity.list, + VarParsing.varType.string, + "Names of the output tensors", +) +options.register( + "inputRanks", + [], + VarParsing.multiplicity.list, + VarParsing.varType.int, + "ranks of the input tensors", +) +options.register( + "flatInputSizes", + [], + VarParsing.multiplicity.list, + VarParsing.varType.int, + "sizes of the flattened input tensors; the amount should match the sum of ranks", ) options.parseArguments() @@ -29,11 +79,11 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.maxEvents = cms.untracked.PSet( - input=cms.untracked.int32(__N_EVENTS__), # noqa + input=cms.untracked.int32(options.maxEvents), ) process.source = cms.Source( "PoolSource", - fileNames=cms.untracked.vstring(*__INPUT_FILES__), # noqa + fileNames=cms.untracked.vstring(options.inputFiles), ) # process options @@ -44,20 +94,20 @@ # multi-threading options process.options.numberOfThreads = cms.untracked.uint32(1) -process.options.numberOfStreams = cms.untracked.uint32(0) +process.options.numberOfStreams = cms.untracked.uint32(1) process.options.numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1) # setup the plugin process.load("MLProf.RuntimeMeasurement.tfInference_cfi") -process.tfInference.graphPath = cms.string("__GRAPH_PATH__") -process.tfInference.inputTensorNames = cms.vstring(__INPUT_TENSOR_NAMES__) # noqa -process.tfInference.outputTensorNames = cms.vstring(__OUTPUT_TENSOR_NAMES__) # noqa +process.tfInference.graphPath = cms.string(options.graphPath) +process.tfInference.inputTensorNames = cms.vstring(options.inputTensorNames) +process.tfInference.outputTensorNames = cms.vstring(options.outputTensorNames) process.tfInference.outputFile = cms.string(options.csvFile) -process.tfInference.inputType = cms.string("__INPUT_TYPE__") -process.tfInference.inputRanks = cms.vint32(__INPUT_RANKS__) # noqa -process.tfInference.flatInputSizes = cms.vint32(__FLAT_INPUT_SIZES__) # noqa +process.tfInference.inputType = cms.string(options.inputType) +process.tfInference.inputRanks = cms.vint32(options.inputRanks) +process.tfInference.flatInputSizes = cms.vint32(options.flatInputSizes) process.tfInference.batchSize = cms.int32(options.batchSize) -process.tfInference.nCalls = cms.int32(__N_CALLS__) # noqa +process.tfInference.nCalls = cms.int32(options.nCalls) # define what to run in the path process.p = cms.Path(process.tfInference) diff --git a/cmssw/MLProf/RuntimeMeasurement/test/tfaot_runtime_cfg.py b/cmssw/MLProf/RuntimeMeasurement/test/tfaot_runtime_cfg.py index 2e1768d..f3f9d2a 100644 --- a/cmssw/MLProf/RuntimeMeasurement/test/tfaot_runtime_cfg.py +++ b/cmssw/MLProf/RuntimeMeasurement/test/tfaot_runtime_cfg.py @@ -5,26 +5,42 @@ # setup minimal options options = VarParsing("python") +options.setDefault("maxEvents", 1) +options.setDefault("maxEvents", 1) +options.register( + "csvFile", + "results.csv", + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "path of the csv file to save results", +) options.register( "batchSize", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int, - "Batch size to be tested", + "batch size to be tested", ) options.register( - "batchRules", - [], - VarParsing.multiplicity.list, + "inputType", + "", + VarParsing.multiplicity.singleton, VarParsing.varType.string, - "Batch rules (format 'target_size:size_1,size_2,...') to be configured", + "input type; 'random', 'incremental', 'zeros', or 'ones'", ) options.register( - "csvFile", - "results.csv", + "nCalls", + 100, VarParsing.multiplicity.singleton, + VarParsing.varType.int, + "number of evaluation calls for averaging", +) +options.register( + "batchRules", + [], + VarParsing.multiplicity.list, VarParsing.varType.string, - "The path of the csv file to save results", + "Batch rules (format 'target_size:size_1:size_2:...') to be configured", ) options.parseArguments() @@ -36,11 +52,11 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.maxEvents = cms.untracked.PSet( - input=cms.untracked.int32(__N_EVENTS__), # noqa + input=cms.untracked.int32(options.maxEvents), ) process.source = cms.Source( "PoolSource", - fileNames=cms.untracked.vstring(*__INPUT_FILES__), # noqa + fileNames=cms.untracked.vstring(options.inputFiles), ) # process options @@ -51,16 +67,16 @@ # multi-threading options process.options.numberOfThreads = cms.untracked.uint32(1) -process.options.numberOfStreams = cms.untracked.uint32(0) +process.options.numberOfStreams = cms.untracked.uint32(1) process.options.numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1) # setup the plugin process.load("MLProf.RuntimeMeasurement.tfaotInference_cfi") process.tfaotInference.outputFile = cms.string(options.csvFile) -process.tfaotInference.inputType = cms.string("__INPUT_TYPE__") -process.tfaotInference.batchRules = cms.vstring(options.batchRules) +process.tfaotInference.inputType = cms.string(options.inputType) +process.tfaotInference.batchRules = cms.vstring([r.replace(".", ",") for r in options.batchRules]) process.tfaotInference.batchSize = cms.int32(options.batchSize) -process.tfaotInference.nCalls = cms.int32(__N_CALLS__) # noqa +process.tfaotInference.nCalls = cms.int32(options.nCalls) # define what to run in the path process.p = cms.Path(process.tfaotInference) diff --git a/cmssw/install_sandbox_tfaot.sh b/cmssw/install_sandbox_tfaot.sh index dca85ef..3e00ce2 100644 --- a/cmssw/install_sandbox_tfaot.sh +++ b/cmssw/install_sandbox_tfaot.sh @@ -33,6 +33,12 @@ action() { # remove non-aot specific files rm -rf MLProf/*/plugins/*.{xml,cc} + # move aot files + for d in MLProf/*/plugins; do + [ -d "${d}/aot" ] && mv "${d}/aot"/* "${d}" + rm -rf "${d}/aot" + done + # compile the model local aot_dir="${CMSSW_BASE}/mlprof_aot" rm -rf "${aot_dir}" @@ -47,16 +53,13 @@ action() { # setup the tool scram setup "${aot_dir}/${tool_name}.xml" || return "$?" - # move aot files - for d in MLProf/*/plugins; do - [ -d "${d}/aot" ] && mv "${d}/aot"/* "${d}" - rm -rf "${d}/aot" - done + # extract the model name + local model_name="$( python3 -c "import yaml; print(yaml.safe_load(open('${aot_config}'))['model']['name'])" )" # fill template variables *.cc files local header_file="$( ls -1 "${aot_dir}/include/${tool_name}"/*_bs*.h | head -n 1 )" for f in MLProf/*/plugins/*.cc; do - python3 "${this_dir}/render_aot.py" "${f}" "${header_file}" || return "$?" + python3 "${MLP_BASE}/mlprof/scripts/render_aot.py" "${f}" "${header_file}" "${model_name}" || return "$?" done } action "$@" diff --git a/examples/cnn/model_tf.yaml b/examples/cnn/model_tf.yaml new file mode 100644 index 0000000..1298e90 --- /dev/null +++ b/examples/cnn/model_tf.yaml @@ -0,0 +1,13 @@ +model: + name: cnn + + inference_engine: tf + + file: conv_2d_inputs.pb + + inputs: + - name: input_0_input + shape: [28, 28, 1] + + outputs: + - name: Identity diff --git a/examples/dnn_2_inputs/model_tf.yaml b/examples/dnn_2_inputs/model_tf.yaml new file mode 100644 index 0000000..0bc617c --- /dev/null +++ b/examples/dnn_2_inputs/model_tf.yaml @@ -0,0 +1,15 @@ +model: + name: dnn_2_inputs + + inference_engine: tf + + file: dnn_2_inputs.pb + + inputs: + - name: input_0 + shape: [392] + - name: input_1 + shape: [392] + + outputs: + - name: Identity diff --git a/examples/simple/create.py b/examples/simple/create.py deleted file mode 100644 index 8b1c6da..0000000 --- a/examples/simple/create.py +++ /dev/null @@ -1,55 +0,0 @@ -# coding: utf-8 - -""" -Test script to create a simple model for AOT compilation tests. - -Signature: f32(4) -> f32(2) -""" - -import os - -import cmsml - - -def create_model(model_dir): - # get tensorflow (suppressing the usual device warnings and logs) - tf, _, tf_version = cmsml.tensorflow.import_tf() - print("creating simple model") - print(f"location : {model_dir}") - print(f"TF version: {'.'.join(map(str, tf_version))}") - - # set random seeds to get deterministic results for testing - tf.keras.utils.set_random_seed(1) - - # define architecture - n_in, n_out, n_layers, n_units = 4, 2, 5, 128 - - # define input layer - x = tf.keras.Input(shape=(n_in,), dtype=tf.float32, name="input") - - # model layers - a = tf.keras.layers.BatchNormalization(axis=1, renorm=True)(x) - for _ in range(n_layers): - a = tf.keras.layers.Dense(n_units, activation="tanh")(a) - a = tf.keras.layers.BatchNormalization(axis=1, renorm=True)(a) - - # output layer - y = tf.keras.layers.Dense(n_out, activation="softmax", name="output", dtype=tf.float32)(a) - - # define the model - model = tf.keras.Model(inputs=[x], outputs=[y]) - - # test evaluation - print(model([tf.constant([list(range(n_in))], dtype=tf.float32)])) - - # save it - tf.saved_model.save(model, model_dir) - - -def main(): - this_dir = os.path.dirname(os.path.abspath(__file__)) - create_model(os.path.join(this_dir, "saved_model")) - - -if __name__ == "__main__": - main() diff --git a/examples/simple/saved_model/fingerprint.pb b/examples/simple/saved_model/fingerprint.pb deleted file mode 100644 index 8b6feba..0000000 --- a/examples/simple/saved_model/fingerprint.pb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec83eb3b91f15d9364d83635176e6b630fd7e2f5cc34c1405b45dc99c184fd37 -size 56 diff --git a/examples/simple/saved_model/saved_model.pb b/examples/simple/saved_model/saved_model.pb deleted file mode 100644 index fbc7259..0000000 --- a/examples/simple/saved_model/saved_model.pb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e6a43e7dde42bddff3c4d8a6a904fbd30d57c77b3c270a18a4b0257ebc0217a -size 560366 diff --git a/examples/simple/saved_model/variables/variables.data-00000-of-00001 b/examples/simple/saved_model/variables/variables.data-00000-of-00001 deleted file mode 100644 index 9a3444625276623d409aabcea5c6d51d5f83ef69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302323 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 diff --git a/examples/simple_dnn/create.py b/examples/simple_dnn/create.py new file mode 100644 index 0000000..4d11ed4 --- /dev/null +++ b/examples/simple_dnn/create.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" +Test script to create a simple DNN model. +Best to be executed in a CMSSW environment with TensorFlow and cmsml installed. + +Signature: f32(64) -> f32(8) +""" + +import os + +import cmsml + + +def create_model( + model_dir: str, + postfix: str = r"l{n_layers}u{n_units}", + n_in: int = 64, + n_out: int = 8, + n_layers: int = 10, + n_units: int = 256, + batch_norm: bool = True, +) -> None: + # get tensorflow + tf, _, tf_version = cmsml.tensorflow.import_tf() + print("creating simple model") + print(f"location : {model_dir}") + print(f"TF version: {'.'.join(map(str, tf_version))}") + + # set random seeds to get deterministic results for testing + tf.keras.utils.set_random_seed(1) + + # define input layer + x = tf.keras.Input(shape=(n_in,), dtype=tf.float32, name="input") + + # model layers + a = tf.keras.layers.BatchNormalization(axis=1, renorm=True)(x) if batch_norm else x + for _ in range(n_layers): + a = tf.keras.layers.Dense(n_units, activation="elu")(a) + if batch_norm: + a = tf.keras.layers.BatchNormalization(axis=1, renorm=True)(a) + + # output layer + y = tf.keras.layers.Dense(n_out, activation="softmax", name="output", dtype=tf.float32)(a) + + # define the model + model = tf.keras.Model(inputs=[x], outputs=[y]) + + # test evaluation + print(model([tf.constant([list(range(n_in))], dtype=tf.float32)])) + + # save it as a frozen graph + _postfix = postfix.format(n_in=n_in, n_out=n_out, n_layers=n_layers, n_units=n_units, batch_norm=batch_norm) + cmsml.tensorflow.save_graph( + os.path.join(model_dir, f"frozen_graph_{_postfix}.pb"), + model, + variables_to_constants=True, + ) + + # create a SavedModel + tf.saved_model.save( + model, + os.path.join(model_dir, f"saved_model_{_postfix}"), + ) + + +def main(): + this_dir = os.path.dirname(os.path.abspath(__file__)) + create_model(this_dir, n_layers=10, n_units=128) + create_model(this_dir, n_layers=10, n_units=256) + create_model(this_dir, n_layers=20, n_units=128) + create_model(this_dir, n_layers=20, n_units=256) + + +if __name__ == "__main__": + main() diff --git a/examples/simple_dnn/frozen_graph_l10u128.pb b/examples/simple_dnn/frozen_graph_l10u128.pb new file mode 100644 index 0000000..d3099a7 --- /dev/null +++ b/examples/simple_dnn/frozen_graph_l10u128.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1937f16a9ffeded275e77f1120cd79923b60190e1b23d95d7697de5c6c1c99ff +size 691531 diff --git a/examples/simple_dnn/frozen_graph_l10u256.pb b/examples/simple_dnn/frozen_graph_l10u256.pb new file mode 100644 index 0000000..8c98381 --- /dev/null +++ b/examples/simple_dnn/frozen_graph_l10u256.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e6ff985d10c4db249c88da1c56834833e1f6928f442072e53e991dc3222de5e +size 2525289 diff --git a/examples/simple_dnn/frozen_graph_l20u128.pb b/examples/simple_dnn/frozen_graph_l20u128.pb new file mode 100644 index 0000000..2b8d9e6 --- /dev/null +++ b/examples/simple_dnn/frozen_graph_l20u128.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb2939752b4a5a28e8f69e68a51de97126e61737cc9c91702a1910b69c58628d +size 1410533 diff --git a/examples/simple_dnn/frozen_graph_l20u256.pb b/examples/simple_dnn/frozen_graph_l20u256.pb new file mode 100644 index 0000000..e83d294 --- /dev/null +++ b/examples/simple_dnn/frozen_graph_l20u256.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa5e5ff599fbf96c377ca06568915daf3ef697943f5af9b0d44f264a6a3b0dd +size 5234149 diff --git a/examples/simple_dnn/model_tf_l10u128.yaml b/examples/simple_dnn/model_tf_l10u128.yaml new file mode 100644 index 0000000..bc198a5 --- /dev/null +++ b/examples/simple_dnn/model_tf_l10u128.yaml @@ -0,0 +1,11 @@ +model: + name: simple_tf + label: TF 10x128 + version: "1.0.0" + inference_engine: tf + file: ./frozen_graph_l10u128.pb + inputs: + - name: input + shape: [64] + outputs: + - name: Identity diff --git a/examples/simple_dnn/model_tf_l10u256.yaml b/examples/simple_dnn/model_tf_l10u256.yaml new file mode 100644 index 0000000..ce51be6 --- /dev/null +++ b/examples/simple_dnn/model_tf_l10u256.yaml @@ -0,0 +1,11 @@ +model: + name: simple_tf + label: TF 10x256 + version: "1.0.0" + inference_engine: tf + file: ./frozen_graph_l10u256.pb + inputs: + - name: input + shape: [64] + outputs: + - name: Identity diff --git a/examples/simple_dnn/model_tf_l20u128.yaml b/examples/simple_dnn/model_tf_l20u128.yaml new file mode 100644 index 0000000..cc8498b --- /dev/null +++ b/examples/simple_dnn/model_tf_l20u128.yaml @@ -0,0 +1,11 @@ +model: + name: simple_tf + label: TF 20x128 + version: "1.0.0" + inference_engine: tf + file: ./frozen_graph_l20u128.pb + inputs: + - name: input + shape: [64] + outputs: + - name: Identity diff --git a/examples/simple_dnn/model_tf_l20u256.yaml b/examples/simple_dnn/model_tf_l20u256.yaml new file mode 100644 index 0000000..05bdf73 --- /dev/null +++ b/examples/simple_dnn/model_tf_l20u256.yaml @@ -0,0 +1,11 @@ +model: + name: simple_tf + label: TF 20x256 + version: "1.0.0" + inference_engine: tf + file: ./frozen_graph_l20u256.pb + inputs: + - name: input + shape: [64] + outputs: + - name: Identity diff --git a/examples/simple_dnn/model_tfaot_l10u128.yaml b/examples/simple_dnn/model_tfaot_l10u128.yaml new file mode 100644 index 0000000..e1e6dc4 --- /dev/null +++ b/examples/simple_dnn/model_tfaot_l10u128.yaml @@ -0,0 +1,12 @@ +model: + name: simple_tfaot + label: AOT 10x128 + version: "1.0.0" + inference_engine: tfaot + saved_model: ./saved_model_l10u128 + serving_key: serving_default + +compilation: + batch_sizes: [1] + tf_xla_flags: [] + xla_flags: [] diff --git a/examples/simple_dnn/model_tfaot_l10u256.yaml b/examples/simple_dnn/model_tfaot_l10u256.yaml new file mode 100644 index 0000000..9886f8b --- /dev/null +++ b/examples/simple_dnn/model_tfaot_l10u256.yaml @@ -0,0 +1,12 @@ +model: + name: simple_tfaot + label: AOT 10x256 + version: "1.0.0" + inference_engine: tfaot + saved_model: ./saved_model_l10u256 + serving_key: serving_default + +compilation: + batch_sizes: [1] + tf_xla_flags: [] + xla_flags: [] diff --git a/examples/simple_dnn/model_tfaot_l10u256_bs.yaml b/examples/simple_dnn/model_tfaot_l10u256_bs.yaml new file mode 100644 index 0000000..a0a3dbc --- /dev/null +++ b/examples/simple_dnn/model_tfaot_l10u256_bs.yaml @@ -0,0 +1,12 @@ +model: + name: simple_tfaot + label: AOT 10x256 BS + version: "1.0.0" + inference_engine: tfaot + saved_model: ./saved_model_l10u256 + serving_key: serving_default + +compilation: + batch_sizes: [1, 2, 4, 8, 16, 32, 64, 128, 256] + tf_xla_flags: [] + xla_flags: [] diff --git a/examples/simple_dnn/model_tfaot_l20u128.yaml b/examples/simple_dnn/model_tfaot_l20u128.yaml new file mode 100644 index 0000000..41eec6e --- /dev/null +++ b/examples/simple_dnn/model_tfaot_l20u128.yaml @@ -0,0 +1,12 @@ +model: + name: simple_tfaot + label: AOT 20x128 + version: "1.0.0" + inference_engine: tfaot + saved_model: ./saved_model_l20u128 + serving_key: serving_default + +compilation: + batch_sizes: [1] + tf_xla_flags: [] + xla_flags: [] diff --git a/examples/simple_dnn/model_tfaot_l20u256.yaml b/examples/simple_dnn/model_tfaot_l20u256.yaml new file mode 100644 index 0000000..f308110 --- /dev/null +++ b/examples/simple_dnn/model_tfaot_l20u256.yaml @@ -0,0 +1,12 @@ +model: + name: simple_tfaot + label: AOT 20x256 + version: "1.0.0" + inference_engine: tfaot + saved_model: ./saved_model_l20u256 + serving_key: serving_default + +compilation: + batch_sizes: [1] + tf_xla_flags: [] + xla_flags: [] diff --git a/examples/simple_dnn/saved_model_l10u128/fingerprint.pb b/examples/simple_dnn/saved_model_l10u128/fingerprint.pb new file mode 100644 index 0000000..854342e --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u128/fingerprint.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:014e7666fdebad543cb3fa1b38a64657ec18c93abdcca80a25acc18a48f049c2 +size 56 diff --git a/examples/simple_dnn/saved_model_l10u128/saved_model.pb b/examples/simple_dnn/saved_model_l10u128/saved_model.pb new file mode 100644 index 0000000..a237564 --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u128/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20d7d03a198d93d1ff61473407696c177927619a311db762c4c5d5e05499ffc8 +size 1014430 diff --git a/examples/simple_dnn/saved_model_l10u128/variables/variables.data-00000-of-00001 b/examples/simple_dnn/saved_model_l10u128/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000..49773b9 --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u128/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b1979c8560b5f2a43c2f5a0284eff4a196a3f8ae772cfee78e4e2e56180eeb +size 699520 diff --git a/examples/simple_dnn/saved_model_l10u128/variables/variables.index b/examples/simple_dnn/saved_model_l10u128/variables/variables.index new file mode 100644 index 0000000..6f3561c --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u128/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb1087e1f010ea91822f24cf51449f1baa575d83b18e5ec8590eb7868413baea +size 6152 diff --git a/examples/simple_dnn/saved_model_l10u256/fingerprint.pb b/examples/simple_dnn/saved_model_l10u256/fingerprint.pb new file mode 100644 index 0000000..7bf96cf --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u256/fingerprint.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0f31cb51aaa7c1a18cc895d5804ed9f09d5d18997bbd68df1717cc30e9bceae +size 57 diff --git a/examples/simple_dnn/saved_model_l10u256/saved_model.pb b/examples/simple_dnn/saved_model_l10u256/saved_model.pb new file mode 100644 index 0000000..621b6ed --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u256/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89531ef61a67b62f995a685b3d7b6e3af3b948be568368bc40240c7db914968c +size 1025411 diff --git a/examples/simple_dnn/saved_model_l10u256/variables/variables.data-00000-of-00001 b/examples/simple_dnn/saved_model_l10u256/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000..2cfcd38 --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u256/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:114d06dcd92ac5676aae0215a3927185957ee548161f17cbb1d517d1d7b0d97e +size 2546929 diff --git a/examples/simple_dnn/saved_model_l10u256/variables/variables.index b/examples/simple_dnn/saved_model_l10u256/variables/variables.index new file mode 100644 index 0000000..8d7b5a0 --- /dev/null +++ b/examples/simple_dnn/saved_model_l10u256/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0429253d2ab9515e55964ce2485fd3f2e3757b70b30df454ed7c0bb1920d07a0 +size 6172 diff --git a/examples/simple_dnn/saved_model_l20u128/fingerprint.pb b/examples/simple_dnn/saved_model_l20u128/fingerprint.pb new file mode 100644 index 0000000..7a8e3c1 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u128/fingerprint.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7fe9e94640ff875599c1a0aa9194d9b9ce51f2cf184efddb7ac8f8bc53a5ebe +size 55 diff --git a/examples/simple_dnn/saved_model_l20u128/saved_model.pb b/examples/simple_dnn/saved_model_l20u128/saved_model.pb new file mode 100644 index 0000000..3517a04 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u128/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e99b7a074daf2482066750b09b028452fd2b4c420efbd48d75b7a05d624e51b8 +size 1944110 diff --git a/examples/simple_dnn/saved_model_l20u128/variables/variables.data-00000-of-00001 b/examples/simple_dnn/saved_model_l20u128/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000..3443404 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u128/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a17fa963dd84bb6d5b7d46d3da62556f380e6d2f6756a1bb47f920877995345d +size 1423202 diff --git a/examples/simple_dnn/saved_model_l20u128/variables/variables.index b/examples/simple_dnn/saved_model_l20u128/variables/variables.index new file mode 100644 index 0000000..f26f978 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u128/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aeebaf568723de930bf5d1cb02ccbaff526bb2c95e9422b47d1a8d0fada315e +size 11578 diff --git a/examples/simple_dnn/saved_model_l20u256/fingerprint.pb b/examples/simple_dnn/saved_model_l20u256/fingerprint.pb new file mode 100644 index 0000000..b19973e --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u256/fingerprint.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f601768b6443c38dc4a60ee36f8939b526d95d89c080cbde629324c5789e9153 +size 57 diff --git a/examples/simple_dnn/saved_model_l20u256/saved_model.pb b/examples/simple_dnn/saved_model_l20u256/saved_model.pb new file mode 100644 index 0000000..e291fe7 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u256/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16beb4136bb1d45e7223b7f7f00b1d2bf7d36e5e220bd71d21c8a79183f157cf +size 1944110 diff --git a/examples/simple_dnn/saved_model_l20u256/variables/variables.data-00000-of-00001 b/examples/simple_dnn/saved_model_l20u256/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000..dab9d39 --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u256/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a2b77ab5c085a60dc907bf23f463facec875d0911bbd8b813d7cac35ef9b395 +size 5277538 diff --git a/examples/simple_dnn/saved_model_l20u256/variables/variables.index b/examples/simple_dnn/saved_model_l20u256/variables/variables.index new file mode 100644 index 0000000..dfef63b --- /dev/null +++ b/examples/simple_dnn/saved_model_l20u256/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67a102427cf4196222c9f408b3471d7c3fcecaf01c5f3a295f63b11527ced02d +size 11688 diff --git a/examples/simple_dnn_old/model_onnx.yaml b/examples/simple_dnn_old/model_onnx.yaml new file mode 100644 index 0000000..daaacee --- /dev/null +++ b/examples/simple_dnn_old/model_onnx.yaml @@ -0,0 +1,13 @@ +model: + name: simple_dnn_onnx + + inference_engine: onnx + + file: simple_dnn.onnx + + inputs: + - name: input_0 + shape: [784] + + outputs: + - name: Identity diff --git a/examples/simple_dnn_old/model_tf.yaml b/examples/simple_dnn_old/model_tf.yaml new file mode 100644 index 0000000..78a6ad6 --- /dev/null +++ b/examples/simple_dnn_old/model_tf.yaml @@ -0,0 +1,13 @@ +model: + name: simple_dnn + + inference_engine: tf + + file: simple_dnn.pb + + inputs: + - name: input_0 + shape: [784] + + outputs: + - name: Identity diff --git a/examples/simple_dnn/simple_dnn.onnx b/examples/simple_dnn_old/simple_dnn.onnx similarity index 100% rename from examples/simple_dnn/simple_dnn.onnx rename to examples/simple_dnn_old/simple_dnn.onnx diff --git a/examples/simple_dnn/simple_dnn.pb b/examples/simple_dnn_old/simple_dnn.pb similarity index 100% rename from examples/simple_dnn/simple_dnn.pb rename to examples/simple_dnn_old/simple_dnn.pb diff --git a/mlprof/plotting/plotter.py b/mlprof/plotting/plotter.py index a1819bb..646abe5 100644 --- a/mlprof/plotting/plotter.py +++ b/mlprof/plotting/plotter.py @@ -1,30 +1,26 @@ # coding: utf-8 -colors = {"mpl_standard": ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", - "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"], - "custom_edgecolor": ["#CC4F1B", "#1B2ACC", "#3F7F4C"], - "custom_facecolor": ["#FF9848", "#089FFF", "#7EFF99"], - } +colors = { + "mpl_standard": [ + "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf", + ], + "custom_edgecolor": ["#CC4F1B", "#1B2ACC", "#3F7F4C"], + "custom_facecolor": ["#FF9848", "#089FFF", "#7EFF99"], +} def open_csv_file(path, columns): import pandas as pd - pd_dataset = pd.read_csv(path, delimiter=",", names=columns) - # or with chunking? - """ - tp = pd.read_csv(path, delimiter=",", names=columns, iterator=True, chunksize=2000) - df = pd.concat(tp, ignore_index=True) - """ - return pd_dataset + return pd.read_csv(path, delimiter=",", names=columns) -def calculate_medians_and_errors_per_batch_size(different_batch_sizes, path): +def calculate_medians_and_errors(batch_sizes, path): """ Calculate and plot the medians and errors of the runtime per batch size Args: - different_batch_sizes: list(int). The list of different batch sizes to be plotted + batch_sizes: list(int). The list of different batch sizes to be plotted path: str. The path to the csv file containing the results of the measurement. """ import numpy as np @@ -33,124 +29,144 @@ def calculate_medians_and_errors_per_batch_size(different_batch_sizes, path): pd_dataset = open_csv_file(path, ["batch_size", "runtimes"]) # create the arrays to be plotted with median values and up and down errors - medians = np.empty(len(different_batch_sizes)) - err_down = np.empty(len(different_batch_sizes)) - err_up = np.empty(len(different_batch_sizes)) - - for i, batch_size in enumerate(different_batch_sizes): - runtimes_per_batch_size = pd_dataset.loc[pd_dataset["batch_size"] == batch_size, "runtimes"] - # mean = np.mean(runtimes_per_batch_size) - median = np.percentile(runtimes_per_batch_size, 50) - medians[i] = median - err_down[i] = abs(np.percentile(runtimes_per_batch_size, 16) - median) - err_up[i] = abs(np.percentile(runtimes_per_batch_size, 84) - median) + medians = np.empty(len(batch_sizes)) + err_down = np.empty(len(batch_sizes)) + err_up = np.empty(len(batch_sizes)) + + for i, batch_size in enumerate(batch_sizes): + runtimes = pd_dataset.loc[pd_dataset["batch_size"] == batch_size, "runtimes"].values + medians[i] = np.percentile(runtimes, 50) + err_down[i] = medians[i] - np.percentile(runtimes, 16) + err_up[i] = np.percentile(runtimes, 84) - medians[i] + return medians, err_down, err_up -def apply_individual_customizations(customization_dict, fig, ax): +def apply_customizations(plot_params, fig, ax): """ Apply the remaining customization parameters from the command line Args: - customization_dict: dict. The dictionary containing the customization parameters + plot_params: dict. The dictionary containing the customization parameters fig, ax: the matplotlib object to handle figure and axis. """ - import matplotlib.pyplot as plt - if customization_dict["log_y"]: - plt.yscale("log") - - -def fill_plot(x, y, yerr_d, yerr_u, filling, color): + # x axis + if plot_params.get("x_log"): + ax.set_xscale("log") + + # y axis + if plot_params.get("y_log"): + ax.set_yscale("log") + if plot_params.get("y_min") is not None: + y_min = plot_params["y_min"] + if y_min <= 0 and plot_params.get("y_log"): + y_min = 1e-3 + print(f"when y_log is set, y_min must be strictly positive, setting to {y_min}") + ax.set_ylim(bottom=y_min) + if plot_params.get("y_max") is not None: + ax.set_ylim(top=plot_params["y_max"]) + + +def fill_plot(x, y, y_down, y_up, error_style, color): """ Fill the plots with the measured values and their errors Args: x: array(float). x-axis values y: array(float). y-axis values - yerr_d: array(float). error down on the y-axis - yerr_u: array(float). error up on the y-axis - filling: bool. customizatioon parameter to decide if the errors will be represented as error bars or bands + y_down: array(float). error down on the y-axis + y_up: array(float). error up on the y-axis + error_style: str. either bars and band color: the colors to use for the plotted values """ - import matplotlib.pyplot as plt import numpy as np - if filling: + import matplotlib.pyplot as plt + + # TODO: use fig and ax instead + if error_style == "band": p1 = plt.plot(x, y, "-", color=color) - plt.fill_between(x, y - yerr_d, y + yerr_u, alpha=0.5, facecolor=color) + plt.fill_between(x, y - y_down, y + y_up, alpha=0.5, facecolor=color) p2 = plt.fill(np.NaN, np.NaN, alpha=0.5, color=color) legend = (p1[0], p2[0]) - else: - p = plt.errorbar(x, y, - yerr=(yerr_d, yerr_u), - capsize=12, - marker=".", linestyle="") + else: # bars + p = plt.errorbar(x, y, yerr=(y_down, y_up), capsize=12, marker=".", linestyle="") legend = p[0] + return legend -def plot_batch_size_several_measurements(different_batch_sizes, input_paths, output_path, measurements, - customization_dict): +def plot_batch_size_several_measurements( + batch_sizes, + input_paths, + output_path, + measurements, + plot_params, +): """ General plotting function for runtime plots Args: - different_batch_sizes: list(int). The batch sizes to be used for the x-axis of the plot. + batch_sizes: list(int). The batch sizes to be used for the x-axis of the plot. input_paths: list(str). The paths of the csv files containing the measurement results. output_path: str. The path to be used for saving the plot. measurements: list(str). The labels of the plot. - customization_dict: dict. The dictionary containing the customization parameters. + plot_params: dict. The dictionary containing the customization parameters. """ import matplotlib.pyplot as plt - import mplhep as hep + import mplhep - if type(measurements[0]) == str: - measurements_paths_strs = measurements - measurements_labels_strs = measurements + if isinstance(measurements[0], str): + measurements_labels_strs = list(measurements) else: - measurements_paths_strs = ["_".join(measurement) for measurement in measurements] measurements_labels_strs = [", ".join(measurement) for measurement in measurements] - # get the values to be plotted - plotting_values = {} - for i, input_path in enumerate(input_paths): - medians, err_down, err_up = calculate_medians_and_errors_per_batch_size(different_batch_sizes, input_path) - if customization_dict["bs_normalized"]: - medians = medians / different_batch_sizes - err_down = err_down / different_batch_sizes - err_up = err_up / different_batch_sizes - plotting_values[measurements_paths_strs[i]] = {"medians": medians, "err_down": err_down, "err_up": err_up} + + # get the values to be plotted, in the same order as the measurements + plot_data = [] + for input_path in input_paths: + medians, err_down, err_up = calculate_medians_and_errors(batch_sizes, input_path) + if plot_params["bs_normalized"]: + medians = medians / batch_sizes + err_down = err_down / batch_sizes + err_up = err_up / batch_sizes + plot_data.append({"y": medians, "y_down": err_down, "y_up": err_up}) # set style and add CMS logo - hep.set_style(hep.style.CMS) - - # create plot with curves using a single color for each value-error pair - fig, ax = plt.subplots(1, 1) - to_legend = [] - for i in range(0, len(measurements_paths_strs)): - color = next(ax._get_lines.prop_cycler)["color"] - legend = fill_plot(different_batch_sizes, plotting_values[measurements_paths_strs[i]]["medians"], - plotting_values[measurements_paths_strs[i]]["err_down"], - plotting_values[measurements_paths_strs[i]]["err_up"], customization_dict["filling"], - color) # colors["mpl_standard"][i]) - to_legend += [legend] - # create legend - plt.legend(to_legend, measurements_labels_strs) - - # apply additional parameters and improve plot style - plt.xscale("log") - apply_individual_customizations(customization_dict, fig, ax) - plt.xlabel("Batch size") - if customization_dict["bs_normalized"]: - plt.ylabel("Runtime / batch size [ms]") - else: - plt.ylabel("runtime [ms]") - plt.ylim(bottom=0) - ax.xaxis.set_major_locator(plt.MaxNLocator(len(different_batch_sizes))) - ax.xaxis.set_minor_locator(plt.NullLocator()) - plt.xticks(different_batch_sizes, different_batch_sizes) - - # choose text to add on the top left of the figure - hep.cms.text(text="MLProf", loc=0) # hep.cms.text(text="Simulation, Network test", loc=0) - hep.cms.lumitext(text=customization_dict["top_right_label"]) - # save plot - fig.savefig(output_path, bbox_inches="tight") - plt.close() + with plt.style.context(mplhep.style.CMS): + fig, ax = plt.subplots(1, 1, figsize=(12, 9)) + + # create plot with curves using a single color for each value-error pair + legend_entries = [] + for data in plot_data: + entry = fill_plot( + x=batch_sizes, + y=data["y"], + y_down=data["y_down"], + y_up=data["y_up"], + error_style=plot_params["error_style"], + color=next(ax._get_lines.prop_cycler)["color"], + ) + legend_entries.append(entry) + + # create legend + ax.legend(legend_entries, measurements_labels_strs) + + # x axis + ax.set_xlabel("Batch size") + ax.xaxis.set_major_locator(plt.MaxNLocator(len(batch_sizes))) + ax.xaxis.set_minor_locator(plt.NullLocator()) + plt.xticks(batch_sizes, batch_sizes) # TODO: find corresponding ax call + + # y axis + ax.set_ylabel("Runtime / batch size [ms]" if plot_params["bs_normalized"] else "Runtime [ms]") + if not plot_params.get("y_log"): + ax.set_ylim(bottom=0) + + # additional customizations + apply_customizations(plot_params, fig, ax) + + # texts + mplhep.cms.text(text="Simulation, MLProf", loc=0) + mplhep.cms.lumitext(text=plot_params["top_right_label"]) + + # save plot + fig.savefig(output_path, bbox_inches="tight") diff --git a/mlprof/scripts/__init__.py b/mlprof/scripts/__init__.py new file mode 100644 index 0000000..50fa435 --- /dev/null +++ b/mlprof/scripts/__init__.py @@ -0,0 +1,7 @@ +# coding: utf-8 + +import law + + +# enable contrib packages +law.contrib.load("cms", "tasks") diff --git a/cmssw/render_aot.py b/mlprof/scripts/render_aot.py similarity index 90% rename from cmssw/render_aot.py rename to mlprof/scripts/render_aot.py index 8dc1d0e..30dfcb1 100644 --- a/cmssw/render_aot.py +++ b/mlprof/scripts/render_aot.py @@ -28,7 +28,7 @@ } -def render_aot(plugin_file: str, header_file: str) -> None: +def render_aot(plugin_file: str, header_file: str, model_name: str) -> None: # prepare paths plugin_file = os.path.expandvars(os.path.expanduser(plugin_file)) header_file = os.path.expandvars(os.path.expanduser(header_file)) @@ -47,6 +47,10 @@ def render_aot(plugin_file: str, header_file: str) -> None: output_arrays = [f"tfaot::{outp.array_type}Arrays" for outp in output_signatures] output_names = [f"output{i}" for i in range(len(input_signatures))] + # model member + content["model"] = [ + f"tfaot::Model model_;", + ] # inputs content["inputs"] = [ f"{arr} {name} = create{inp.array_type}Input({inp.shape1});" @@ -88,11 +92,11 @@ def parse_signatures(header_file: str) -> tuple[list[Input], list[Output]]: # build input and output signatures input_signatures = [ Input(type_to_array[t], c) - for t, c in zip(header_data.arg_types, header_data.arg_counts) + for t, c in zip(header_data.arg_types, header_data.arg_counts_no_batch) ] output_signatures = [ Output(type_to_array[t], c) - for t, c in zip(header_data.res_types, header_data.res_counts) + for t, c in zip(header_data.res_types, header_data.res_counts_no_batch) ] return input_signatures, output_signatures @@ -104,9 +108,10 @@ def main() -> int: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("plugin_file", help="path to the plugin file to render in-place") parser.add_argument("header_file", help="path to the header file to read variables from") + parser.add_argument("model_name", help="name of the model class") args = parser.parse_args() - render_aot(args.plugin_file, args.header_file) + render_aot(args.plugin_file, args.header_file, args.model_name) return 0 diff --git a/mlprof/tasks/base.py b/mlprof/tasks/base.py index 64e54e0..b5ac83b 100644 --- a/mlprof/tasks/base.py +++ b/mlprof/tasks/base.py @@ -202,10 +202,14 @@ def touch_output_dirs(self): parent.touch() handled_parent_uris.add(parent.uri()) - def run_command(self, cmd, optional=False, **kwargs): + def run_command(self, cmd, cmd_repr=None, optional=False, **kwargs): # proper command encoding cmd = (law.util.quote_cmd(cmd) if isinstance(cmd, (list, tuple)) else cmd).strip() + # default command representation + if not cmd_repr: + cmd_repr = law.util.colored(cmd, "cyan") + # when no cwd was set and run_command_in_tmp is True, create a tmp dir if "cwd" not in kwargs and self.run_command_in_tmp: tmp_dir = law.LocalDirectoryTarget(is_tmp=True) @@ -214,7 +218,7 @@ def run_command(self, cmd, optional=False, **kwargs): self.publish_message(f"cwd: {kwargs.get('cwd', os.getcwd())}") # call it - with self.publish_step(f"running '{law.util.colored(cmd, 'cyan')}' ..."): + with self.publish_step(f"running '{cmd_repr}' ..."): p, lines = law.util.readable_popen(cmd, shell=True, executable="/bin/bash", **kwargs) for line in lines: print(line) @@ -237,9 +241,12 @@ def run(self, **kwargs): # build the command cmd = self.build_command() + cmd_repr = None + if isinstance(cmd, (list, tuple)) and len(cmd) == 2: + cmd, cmd_repr = cmd # run it - self.run_command(cmd, **kwargs) + self.run_command(cmd, cmd_repr=cmd_repr, **kwargs) self.post_run_command() @@ -250,6 +257,24 @@ def post_run_command(self): return +class CMSRunCommandTask(CommandTask): + + def build_cmsrun_command(self, cfg_file, options=None): + # highlighting helpers + hl1 = lambda s: law.util.colored(s, color="cyan", style="bright") + hl2 = lambda s: law.util.colored(s, color="cyan") + + # build the command and its representation + cmd = ["cmsRun", cfg_file] + cmd_repr = f"{hl1('cmsRun')} {hl2(cfg_file)}" + for key, values in (options or {}).items(): + value = ",".join(map(str, law.util.make_list(values))) + cmd.append(f"{key}={value}") + cmd_repr += f" {hl1(key + '=')}{hl2(value)}" + + return cmd, cmd_repr + + class PlotTask(BaseTask): file_types = law.CSVParameter( diff --git a/mlprof/tasks/parameters.py b/mlprof/tasks/parameters.py index ddfc4bc..d67efd7 100644 --- a/mlprof/tasks/parameters.py +++ b/mlprof/tasks/parameters.py @@ -10,15 +10,15 @@ import law from mlprof.tasks.base import BaseTask +from mlprof.util import expand_path class Model(object): - def __init__(self, model_file: str, name, label, **kwargs): - + def __init__(self, model_file: str, name: str, label: str, **kwargs) -> None: super().__init__(**kwargs) - self.model_file = os.path.abspath(os.path.expandvars(os.path.expanduser(model_file))) + self.model_file = expand_path(model_file, abs=True) self.name = name self.label = label @@ -43,13 +43,18 @@ def full_name(self): # create a hash name = os.path.splitext(os.path.basename(self.model_file))[0] - return f"{name}{law.util.create_hash(self.model_file)}" + return f"{name}_{law.util.create_hash(self.model_file)}" @property def full_model_label(self): if self.label: return self.label + # get the model.label field in the model data + model_label = self.data.get("label") + if model_label: + return model_label + # get the model.name field in the model data model_name = self.data.get("name") if model_name: @@ -65,8 +70,8 @@ class CMSSWParameters(BaseTask): """ cmssw_version = luigi.Parameter( - default="CMSSW_14_1_X_2024-04-01-1100", - description="CMSSW version; default: CMSSW_14_1_X_2024-04-01-1100", + default="CMSSW_14_1_X_2024-04-04-2300", + description="CMSSW version; default: CMSSW_14_1_X_2024-04-04-2300", ) scram_arch = luigi.Parameter( default="slc7_amd64_gcc12", @@ -82,12 +87,26 @@ def store_parts(self): return parts +class MultiCMSSWParameters(BaseTask): + + cmssw_versions = law.CSVParameter( + default=(CMSSWParameters.cmssw_version._default,), + description=f"comma-separated list of CMSSW versions; default: ({CMSSWParameters.cmssw_version._default},)", + brace_expand=True, + ) + scram_archs = law.CSVParameter( + default=(CMSSWParameters.scram_arch._default,), + description=f"comma-separated list of SCRAM architectures; default: ({CMSSWParameters.scram_arch._default},)", + brace_expand=True, + ) + + class RuntimeParameters(BaseTask): """ General parameters for the model definition and the runtime measurement. """ - input_type = luigi.Parameter( + input_data = luigi.Parameter( default="random", description="either 'random', 'incremental', 'zeros', 'ones', or a path to a root file; " "default: random", @@ -100,29 +119,47 @@ class RuntimeParameters(BaseTask): default=100, description="number of evaluation calls for averaging; default: 100", ) + batch_size = luigi.IntParameter( + default=1, + description="the batch size to measure the runtime for; default: 1", + ) + tfaot_batch_rules = law.Parameter( + default=law.NO_STR, + description="dash-separated tfaot batch rules with each being in the format 'target_size:size_1,size_2,...';" + "default: empty", + ) + + default_input_file = "/afs/desy.de/user/r/riegerma/public/testfile.root" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - # verify the input type - self.input_file = None - if self.input_type not in ("random", "incremental", "zeros"): - self.input_file = os.path.abspath(os.path.expandvars(os.path.expanduser(self.input_type))) + # verify the input data + self.input_file = self.default_input_file + known_input_data = {"random", "incremental", "zeros", "ones"} + if self.input_data not in known_input_data: + self.input_file = expand_path(self.input_data, abs=True) if not os.path.exists(self.input_file): raise ValueError( - f"input type '{self.input_type}' is neither 'random' nor 'incremental' nor 'zeros' nor " - f"a path to an existing root file", + f"invalid input data '{self.input_data}', must be a file or any of {','.join(known_input_data)}", ) + self.input_data = "file" def store_parts(self): parts = super().store_parts() # build a combined string that represents the significant parameters + input_str = f"file{law.util.create_hash(self.input_file)}" if self.input_data == "file" else self.input_data params = [ - f"input_{law.util.create_hash(self.input_file) if self.input_file else self.input_type}", + f"input_{input_str}", f"nevents_{self.n_events}", f"ncalls_{self.n_calls}", ] + + # optional parts + if self.tfaot_batch_rules: + params.append(f"tfaotrules_{self.tfaot_batch_rules}") + parts.insert_before("version", "runtime_params", "__".join(params)) return parts @@ -134,14 +171,14 @@ class ModelParameters(BaseTask): """ model_file = luigi.Parameter( - default="$MLP_BASE/examples/simple_dnn/model_tf.json", - description="json file containing information of model to be tested; " - "default: $MLP_BASE/examples/simple_dnn/model_tf.json", + default="$MLP_BASE/examples/simple_dnn/model_tf.yaml", + description="json or yaml file containing information of model to be tested; " + "default: $MLP_BASE/examples/simple_dnn/model_tf.yaml", ) model_name = luigi.Parameter( default=law.NO_STR, - description="when set, use this name for storing outputs instead of a hashed version of " - "--model-file; default: empty", + description="when set, use this name for storing outputs instead of a hashed version of --model-file; " + "default: empty", ) model_label = luigi.Parameter( default=law.NO_STR, @@ -154,7 +191,7 @@ def modify_param_values(cls, params) -> dict: params = super().modify_param_values(params) if params.get("model_file"): - params["model_file"] = os.path.abspath(os.path.expandvars(os.path.expanduser(params["model_file"]))) + params["model_file"] = expand_path(params["model_file"], abs=True) return params @@ -233,17 +270,17 @@ def store_parts(self): parts = super().store_parts() # build a combined string that represents the significant parameters - params = [ - f"model_{model.full_name}" for model in self.models - ] - parts.insert_before("version", "model_params", "__".join(params)) + names = [model.full_name for model in self.models] + if len(names) >= 5: + names = [f"{len(names)}x{law.util.create_hash(names)}"] + parts.insert_before("version", "model_params", f"models__{'__'.join(names)}") return parts class BatchSizesParameters(BaseTask): """ - Parameter to add several batch sizes to perform the measurement on + Parameters to control batch sizes. """ batch_sizes = law.CSVParameter( @@ -260,31 +297,54 @@ def batch_sizes_repr(self): class CustomPlotParameters(BaseTask): """ - Parameters for customization of plotting + Parameters plotting customizations. """ - log_y = luigi.BoolParameter( + x_log = luigi.BoolParameter( + default=True, + significant=False, + description="plot the x-axis logarithmically; default: True", + ) + y_log = luigi.BoolParameter( default=False, - description="plot the y-axis values logarithmically; default: False", + significant=False, + description="plot the y-axis logarithmically; default: False", + ) + y_min = luigi.FloatParameter( + default=law.NO_FLOAT, + significant=False, + description="minimum y-axis value; default: empty", + ) + y_max = luigi.FloatParameter( + default=law.NO_FLOAT, + significant=False, + description="maximum y-axis value; default: empty", ) bs_normalized = luigi.BoolParameter( default=True, + significant=False, description="normalize the measured values with the batch size; default: True", ) - filling = luigi.BoolParameter( - default=True, - description="plot the errors as error bands instead of error bars; default: True", + error_style = luigi.ChoiceParameter( + choices=["bars", "band"], + default="band", + significant=False, + description="style of errors / uncerainties of due to averaging; choices: bars,band; default: band", ) top_right_label = luigi.Parameter( - default="", + default=law.NO_STR, + significant=False, description="stick a label over the top right corner of the plot", ) @property def custom_plot_params(self): return { - "log_y": self.log_y, + "x_log": self.x_log, + "y_log": self.y_log, + "y_min": self.y_min if self.y_min != law.NO_FLOAT else None, + "y_max": self.y_max if self.y_max != law.NO_FLOAT else None, "bs_normalized": self.bs_normalized, - "filling": self.filling, - "top_right_label": self.top_right_label, + "error_style": self.error_style, + "top_right_label": None if self.top_right_label == law.NO_STR else self.top_right_label, } diff --git a/mlprof/tasks/runtime.py b/mlprof/tasks/runtime.py index 2eabd48..7ebafa1 100644 --- a/mlprof/tasks/runtime.py +++ b/mlprof/tasks/runtime.py @@ -7,134 +7,73 @@ import os import itertools -import luigi import law -from mlprof.tasks.base import CommandTask, PlotTask, view_output_plots +from mlprof.tasks.base import CMSRunCommandTask, PlotTask, view_output_plots from mlprof.tasks.parameters import ( - RuntimeParameters, ModelParameters, MultiModelParameters, CMSSWParameters, BatchSizesParameters, - CustomPlotParameters, + RuntimeParameters, ModelParameters, MultiModelParameters, CMSSWParameters, MultiCMSSWParameters, + BatchSizesParameters, CustomPlotParameters, ) from mlprof.tasks.sandboxes import CMSSWSandboxTask from mlprof.plotting.plotter import plot_batch_size_several_measurements +from mlprof.util import expand_path -class CreateRuntimeConfig(RuntimeParameters, ModelParameters, CMSSWParameters): - - default_input_files = { - "CMSSW_*": ["/afs/desy.de/user/r/riegerma/public/testfile.root"], - } - - def find_default_input_files(self): - for version_pattern, files in self.default_input_files.items(): - if law.util.multi_match(self.cmssw_version, version_pattern): - return files - - raise Exception(f"no default input files found for '{self.cmssw_version}'") - - def output(self): - return self.local_target("cfg.py") - - def run(self): - # prepare the output directory - output = self.output() - output.parent.touch() - - # get model data - model_data = self.model.data - - # determine input files - if self.input_file: - input_files = [self.input_file] - input_type = "random" - else: - input_files = self.find_default_input_files() - input_type = self.input_type - - # prepare template variables, depending on the inference engine - template_vars = {} - engine = model_data["inference_engine"] - is_tf_or_onnx = engine in {"tf", "onnx"} - is_tfaot = engine == "tfaot" - if not is_tf_or_onnx and not is_tfaot: - raise Exception(f"unknown inference engine '{engine}'") - - # common variables - template_vars.update({ - "INPUT_FILES": [ - law.target.file.add_scheme(path, "file://") - for path in input_files - ], - "N_EVENTS": self.n_events, - "INPUT_TYPE": input_type, - "N_CALLS": self.n_calls, - }) - - # tf / onnx specific - if is_tf_or_onnx: - # graph path - model_file = os.path.expandvars(os.path.expanduser(self.model_file)) - graph_path = os.path.expandvars(os.path.expanduser(model_data["file"])) - template_vars["GRAPH_PATH"] = os.path.join(os.path.dirname(model_file), graph_path) - - # input tensors - template_vars.update({ - "INPUT_RANKS": [ - len(inp["shape"]) - for inp in model_data["inputs"] - ], - "FLAT_INPUT_SIZES": sum( - (inp["shape"] for inp in model_data["inputs"]), - [], - ), - "INPUT_TENSOR_NAMES": [inp["name"] for inp in model_data["inputs"]], - }) - - # output tensors - template_vars["OUTPUT_TENSOR_NAMES"] = [outp["name"] for outp in model_data["outputs"]] - - # load the template content - template = f"$MLP_BASE/cmssw/MLProf/RuntimeMeasurement/test/{engine}_runtime_cfg.py" - content = law.LocalFileTarget(template).load(formatter="text") - - # replace variables - for key, value in template_vars.items(): - content = content.replace(f"__{key}__", str(value)) - - # write the output - output.dump(content, formatter="text") - - -class MeasureRuntime(CommandTask, RuntimeParameters, ModelParameters, CMSSWSandboxTask): +class MeasureRuntime( + CMSRunCommandTask, + RuntimeParameters, + ModelParameters, + CMSSWSandboxTask, +): """ Task to provide the time measurements of the inference of a network in cmssw, given the input - parameters and a single batch size - - Output is a result_batch_size_{batch_size}.csv file. + parameters and a single batch size. """ - batch_size = luigi.IntParameter( - default=1, - description="the batch size to measure the runtime for; default: 1", - ) - # TODO: add tfaot batch rules - - def requires(self): - return CreateRuntimeConfig.req(self) - def output(self): return self.local_target(f"runtime_bs{self.batch_size}.csv") def build_command(self): - return [ - "cmsRun", - self.input().path, - f"batchSize={self.batch_size}", - f"csvFile={self.output().path}", - ] + # determine the config to run + engine = self.model.data["inference_engine"] + config_file = f"$MLP_BASE/cmssw/MLProf/RuntimeMeasurement/test/{engine}_runtime_cfg.py" + + # build cmsRun command options + options = { + "inputFiles": law.target.file.add_scheme(self.input_file, "file://"), + "batchSize": self.batch_size, + "csvFile": self.output().path, + "inputType": "random" if self.input_data == "file" else self.input_data, + "maxEvents": self.n_events, + "nCalls": self.n_calls, + } + + # engine specific options + if engine in {"tf", "onnx"}: + graph_path = expand_path(self.model.data["file"]) + model_dir = expand_path(self.model_file, dir=True) + options.update({ + "graphPath": os.path.normpath(os.path.join(model_dir, graph_path)), + "inputTensorNames": [inp["name"] for inp in self.model.data["inputs"]], + "outputTensorNames": [outp["name"] for outp in self.model.data["outputs"]], + "inputRanks": [len(inp["shape"]) for inp in self.model.data["inputs"]], + "flatInputSizes": sum((inp["shape"] for inp in self.model.data["inputs"]), []), + }) + elif engine == "tfaot": + if self.tfaot_batch_rules != law.NO_STR: + # the cms option parser does not handle commas, even escaped, so change the format + batch_rules = [r.replace(",", ".") for r in self.tfaot_batch_rules.split("-")] + options["batchRules"] = batch_rules + return self.build_cmsrun_command(expand_path(config_file), options) -class MergeRuntimes(RuntimeParameters, ModelParameters, CMSSWParameters, BatchSizesParameters): + +class MergeRuntimes( + BatchSizesParameters, + RuntimeParameters, + ModelParameters, + CMSSWParameters, +): def requires(self): return [ @@ -163,12 +102,12 @@ def run(self): class PlotRuntimes( + BatchSizesParameters, RuntimeParameters, ModelParameters, CMSSWParameters, - BatchSizesParameters, - PlotTask, CustomPlotParameters, + PlotTask, ): """ Task to plot the results from the runtime measurements depending on the batch sizes given as parameters, @@ -181,7 +120,7 @@ def requires(self): return MergeRuntimes.req(self) def output(self): - return self.local_target(f"runtime_plot_different_batch_sizes_{self.batch_sizes_repr}.pdf") + return self.local_target(f"runtimes_bs{self.batch_sizes_repr}.pdf") @view_output_plots def run(self): @@ -200,12 +139,13 @@ def run(self): print("plot saved") -class PlotRuntimesMultipleParams( +class PlotMultiRuntimes( + BatchSizesParameters, RuntimeParameters, MultiModelParameters, - BatchSizesParameters, - PlotTask, + MultiCMSSWParameters, CustomPlotParameters, + PlotTask, ): """ Task to plot the results from the runtime measurements for several parameters, e.g. networks @@ -234,6 +174,8 @@ def __init__(self, *args, **kwargs): if len(self.model_names) not in (n_models, 0): raise ValueError("the number of model names does not match the number of model files") + # TODO: refactor the combinatorics below + # list of sequences over which the product is performed for the requirements self.product_names_req = ["model_file", "model_name", "cmssw_version", "scram_arch"] self.product_sequences_req = [ @@ -243,9 +185,8 @@ def __init__(self, *args, **kwargs): ] # list of sequences over which the product is performed for the output file name - self.product_names_out = ["model_name", "cmssw_version", "scram_arch"] + self.product_names_out = ["cmssw_version", "scram_arch"] self.product_sequences_out = [ - tuple([model.full_name for model in self.models]), self.cmssw_versions, self.scram_archs, ] @@ -301,18 +242,13 @@ def flatten_tuple(self, value): yield x def requires(self): - flattened_product = [ - tuple(self.flatten_tuple(tuple_of_args)) for tuple_of_args in itertools.product(*self.product_sequences_req) - ] return [ - MergeRuntimes.req(self, **dict(zip(self.product_names_req, values))) - for values in flattened_product + MergeRuntimes.req(self, **dict(zip(self.product_names_req, self.flatten_tuple(values)))) + for values in itertools.product(*self.product_sequences_req) ] def output(self): - return self.local_target( - f"runtime_plot_{self.out_params_repr}_different_batch_sizes_{self.batch_sizes_repr}.pdf", - ) + return self.local_target(f"runtimes_{self.out_params_repr}_bs{self.batch_sizes_repr}.pdf") @view_output_plots def run(self): @@ -323,11 +259,10 @@ def run(self): input_paths = [inp.path for inp in self.input()] # create the plot - plot_batch_size_several_measurements( - self.batch_sizes, - input_paths, - output.path, - self.params_product_params_to_write, - self.custom_plot_params, + batch_sizes=self.batch_sizes, + input_paths=input_paths, + output_path=output.path, + measurements=self.params_product_params_to_write, + plot_params=self.custom_plot_params, ) diff --git a/mlprof/tasks/sandboxes.py b/mlprof/tasks/sandboxes.py index 6fb10e0..9e9f295 100644 --- a/mlprof/tasks/sandboxes.py +++ b/mlprof/tasks/sandboxes.py @@ -29,25 +29,27 @@ def cmssw_setup_args(self): return "" @property - def _cmssw_install_dir_hash(self): - parts = [ + def cmssw_install_dir(self): + # engine representation + engine = self.model.data["inference_engine"] + engine_str = "tfaot" if engine == "tfaot" else "tf_onnx" + + # hash of all signficant values + hash_parts = [ self.cmssw_version, self.scram_arch, self.cmssw_setup_script, self.cmssw_setup_args, ] - if self.model.data["inference_engine"] == "tfaot": + if engine == "tfaot": comp_data = self.model._all_data["compilation"] - parts.append(( + hash_parts.append(( sorted(comp_data["batch_sizes"]), sorted(comp_data.get("tf_xla_flags") or []), sorted(comp_data.get("xla_flags") or []), )) - return parts - @property - def cmssw_install_dir(self): - return f"{self.cmssw_version}_{law.util.create_hash(self._cmssw_install_dir_hash)}" + return f"{self.cmssw_version}_{engine_str}_{law.util.create_hash(hash_parts)}" @property def sandbox(self): diff --git a/mlprof/util.py b/mlprof/util.py new file mode 100644 index 0000000..3687dd6 --- /dev/null +++ b/mlprof/util.py @@ -0,0 +1,14 @@ +# coding: utf-8 + +__all__ = [] + +import os + + +def expand_path(path, abs=False, dir=False): + path = os.path.expandvars(os.path.expanduser(str(path))) + if abs: + path = os.path.abspath(path) + if dir: + path = os.path.dirname(path) + return path