Skip to content

Commit

Permalink
Merge pull request GATEOverflow#91 from GATEOverflow/mlperf-inference
Browse files Browse the repository at this point in the history
Merge from go
  • Loading branch information
arjunsuresh committed Jul 1, 2024
2 parents f533592 + 253dd5b commit 3f173cb
Show file tree
Hide file tree
Showing 28 changed files with 530 additions and 52 deletions.
32 changes: 29 additions & 3 deletions .github/workflows/test-mlperf-inference-abtf-poc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
name: MLPerf inference ABTF POC Test

on:
pull_request_target:
pull_request:
branches: [ "main", "mlperf-inference" ]
paths:
- '.github/workflows/test-mlperf-inference-abtf-poc.yml'
Expand Down Expand Up @@ -37,7 +37,7 @@ jobs:
cm pull repo mlcommons@cm4abtf --branch=poc
- name: Test MLPerf Inference ABTF POC using ${{ matrix.backend }} on docker
run: |
cm run script --tags=run-abtf,inference,_poc-demo --adr.compiler.tags=gcc --quiet --docker --docker_it=no -v --gh_token=${{ secrets.ABTF_ACCESS_TOKEN }}
cm run script --tags=run-abtf,inference,_poc-demo --adr.compiler.tags=gcc --quiet -v
build2:
runs-on: ${{ matrix.os }}
Expand Down Expand Up @@ -65,5 +65,31 @@ jobs:
cm pull repo mlcommons@cm4abtf --branch=poc
- name: Test MLPerf Inference ABTF POC using ${{ matrix.backend }} on ${{ matrix.os }}
run: |
cm run script --tags=run-abtf,inference,_poc-demo --adr.compiler.tags=gcc --quiet -v --gh_token=${{ secrets.ABTF_ACCESS_TOKEN }}
cm run script --tags=run-abtf,inference,_poc-demo --adr.compiler.tags=gcc --quiet -v
build3:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
python-version: [ "3.8", "3.12" ]
backend: [ "pytorch" ]
implementation: [ "python" ]
exclude:
- python-version: "3.8"

steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python3 -m pip install cmind
cm pull repo --url=${{ github.event.pull_request.head.repo.html_url }} --checkout=${{ github.event.pull_request.head.ref }}
cm pull repo mlcommons@cm4abtf --branch=poc
- name: Test MLPerf Inference ABTF POC using ${{ matrix.backend }} on ${{ matrix.os }}
run: |
cm run script --tags=run-abtf,inference,_poc-demo --quiet --env.CM_MLPERF_LOADGEN_BUILD_FROM_SRC=off -v
6 changes: 5 additions & 1 deletion automation/script/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -4443,7 +4443,11 @@ def update_env_with_values(env, fail_on_not_found=False):
if tmp_value not in env and fail_on_not_found:
return {'return':1, 'error':'variable {} is not in env'.format(tmp_value)}
if tmp_value in env:
value = value.replace("<<<"+tmp_value+">>>", str(env[tmp_value]))
if type(value) == str:
value = value.replace("<<<"+tmp_value+">>>", str(env[tmp_value]))
elif type(value) == list:
for i,val in enumerate(value):
value[i] = value[i].replace("<<<"+tmp_value+">>>", str(env[tmp_value]))

env[key] = value

Expand Down
139 changes: 134 additions & 5 deletions script/app-mlperf-inference-intel/_cm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,20 +112,22 @@ deps:
########################################################################
# Install OpenImages


- enable_if_env:
CM_MODEL:
- retinanet
tags: compile,intel,model,_retinanet
names:
- retinanet-compiler
- openimages-original
- dataset-original
tags: get,dataset,original,openimages,_validation,_custom-annotations

- enable_if_env:
CM_MODEL:
- retinanet
names:
- openimages-preprocessed
- dataset-preprocessed
tags: get,dataset,preprocessed,openimages,_for.retinanet.onnx,_NCHW,_validation,_custom-annotations
- openimages-calibration
- dataset-calibration
tags: get,dataset,original,openimages,_calibration



Expand Down Expand Up @@ -248,6 +250,10 @@ variations:

deps:
- tags: get,generic-python-lib,_numpy
names:
- pip-package
- numpy
version: "1.23.5"


bert_:
Expand Down Expand Up @@ -410,6 +416,129 @@ variations:
- run-mode
- loadgen-scenario

retinanet,pytorch:
adr:
conda-package:
tags: _name.retinanet-pt
compiler:
tags: gcc
conda-python:
version: "3.9"
deps:
- tags: get,conda,_name.retinanet-pt
- tags: get,python,_conda.retinanet-pt
- names:
- conda-package
- mkl
tags: get,generic,conda-package,_package.mkl,_source.conda-forge
- names:
- conda-package
- libstdcxx-ng
tags: get,generic,conda-package,_package.libstdcxx-ng,_source.conda-forge

- names:
- conda-package
- mkl
tags: get,generic,conda-package,_package.mkl,_source.intel
- names:
- conda-package
- mkl-include
tags: get,generic,conda-package,_package.mkl-include,_source.intel
- names:
- conda-package
- intel-openmp
tags: get,generic,conda-package,_package.intel-openmp,_source.intel
- names:
- conda-package
- llvm-openmp
tags: get,generic,conda-package,_package.llvm-openmp,_source.conda-forge
- names:
- conda-package
- ncurses
tags: get,generic,conda-package,_package.ncurses,_source.conda-forge
- names:
- conda-package
- ncurses
tags: get,generic,conda-package,_package.ncurses,_source.conda-forge
- tags: get,generic-sys-util,_numactl
- tags: get,generic,conda-package,_package.cmake,_source.conda-forge
names:
- conda-package
- cmake
- tags: get,generic,conda-package,_package.jemalloc,_source.conda-forge
names:
- conda-package
- jemalloc
- tags: get,pytorch,from.src,_for-intel-mlperf-inference-retinanet
names:
- pytorch
- tags: get,torchvision,from.src,_sha.8e078971b8aebdeb1746fea58851e3754f103053
update_tags_from_env_with_prefix:
"_python.":
- CM_PYTHON_BIN_WITH_PATH
names:
- torchvision
- tags: install,opencv,from.src,_branch.4.x
env:
"+PATH":
- <<<CM_CONDA_BIN_PATH>>>
names:
- opencv-from-src
- tags: get,git,repo,_repo.https://github.com/Tencent/rapidjson.git,_sha.e4bde977
names:
- rapidjson-src
env:
CM_GIT_CHECKOUT_PATH_ENV_NAME: CM_RAPIDJSON_SRC_REPO_PATH
- tags: install,gflags,from.src
names:
- gflags-from-src
- tags: install,onednn,from.src,_branch.rls-v2.6
names:
- onednn-from-src
- tags: get,generic-python-lib,_package.scikit-learn
names:
- pip-package
- scikit-learn
- tags: get,generic-python-lib,_package.opencv-python
names:
- pip-package
- opencv-python
- tags: get,generic-python-lib,_package.pycocotools
names:
- pip-package
- pycocotools
- tags: install,ipex,from.src,_for-intel-mlperf-inference-v3.1-retinanet
names:
- ipex-from-src
- tags: get,generic,conda-package,_package.ninja
names:
- conda-package
- ninja
- tags: get,mlcommons,inference,src
names:
- inference-src
- tags: get,mlcommons,inference,loadgen,_custom-python,_keep-build
names:
- inference-loadgen


retinanet,build-harness:
deps:
- tags: reproduce,mlperf,inference,intel,_compile-model
inherit_variation_tags: true
force_cache: true
skip_inherit_variation_groups:
- run-mode
- loadgen-scenario
new_env_keys:
- CM_ML_MODEL_RETINANET_INT8_FILE_WITH_PATH

retinanet,compile-model:
deps:
- tags: get,ml-model,retinanet,_pytorch,_fp32
new_env_keys:
- CM_ML_MODEL_RETINANET_INT8_FILE_WITH_PATH


gptj_,pytorch:
adr:
Expand Down
44 changes: 44 additions & 0 deletions script/app-mlperf-inference-intel/build_retinanet_harness.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
export PATH=${CM_CONDA_BIN_PATH}:$PATH

cd ${CM_HARNESS_CODE_ROOT}


export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}

export IPEX_PATH=${CM_IPEX_INSTALLED_PATH}
export TORCH_PATH=`python -c 'import torch;print(torch.utils.cmake_prefix_path)'`

if [[ -z ${TORCH_PATH} ]]; then
echo "Torch not found"
exit 1
fi

export LOADGEN_DIR="${CM_MLPERF_INFERENCE_LOADGEN_INSTALL_PATH}/../"
export OPENCV_DIR=${CM_OPENCV_BUILD_PATH}
export RAPIDJSON_INCLUDE_DIR=${CM_RAPIDJSON_SRC_REPO_PATH}/include
export GFLAGS_DIR=${CM_GFLAGS_BUILD_PATH}
export USE_CUDA=0

BUILD_DIR=${PWD}/build
rm -rf "$BUILD_DIR"

SRC_DIR=${PWD}/src

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OPENCV_DIR}/lib:${ONEDNN_DIR}/build/src
export LIBRARY_PATH=${LIBRARY_PATH}:${CONDA_PREFIX}/lib

cmd="cmake -DCMAKE_PREFIX_PATH=${TORCH_PATH} \
-DLOADGEN_DIR=${LOADGEN_DIR} \
-DOpenCV_DIR=${OPENCV_DIR} \
-DRapidJSON_INCLUDE_DIR=${RAPIDJSON_INCLUDE_DIR} \
-Dgflags_DIR=${GFLAGS_DIR} \
-DINTEL_EXTENSION_FOR_PYTORCH_PATH=${IPEX_PATH} \
-DCMAKE_BUILD_TYPE=Release \
-B${BUILD_DIR} \
-H${SRC_DIR}"
echo "$cmd"
eval "$cmd"
test "$?" -eq 0 || exit "$?"

cmake --build ${BUILD_DIR} --config Release -j$(nproc)
test "$?" -eq 0 || exit "$?"
11 changes: 11 additions & 0 deletions script/app-mlperf-inference-intel/compile_retinanet.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export PATH=${CM_CONDA_BIN_PATH}:$PATH

export CALIBRATION_ANNOTATIONS=${CM_DATASET_CALIBRATION_ANNOTATIONS_FILE_PATH}

export CALIBRATION_DATA_DIR=${CM_CALIBRATION_DATASET_PATH}
export MODEL_CHECKPOINT=${CM_ML_MODEL_FILE_WITH_PATH}

cd ${CM_HARNESS_CODE_ROOT}

bash run_calibration.sh
test "$?" -eq 0 || exit "$?"
14 changes: 13 additions & 1 deletion script/app-mlperf-inference-intel/customize.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,17 +76,23 @@ def preprocess(i):
elif env['CM_LOCAL_MLPERF_INFERENCE_INTEL_RUN_MODE'] == "compilation":
if master_model == "resnet50":
i['run_script_input']['script_name'] = "compile_resnet50"
elif master_model == "retinanet":
i['run_script_input']['script_name'] = "compile_retinanet"
env['CM_ML_MODEL_RETINANET_INT8_FILE_WITH_PATH'] = os.path.join(os.path.dirname(env['CM_ML_MODEL_FILE_WITH_PATH']), 'retinanet-int8-model.pth')

elif env['CM_LOCAL_MLPERF_INFERENCE_INTEL_RUN_MODE'] == "build_harness":
print(f"Harness Root: {harness_root}")
if "bert" in env['CM_MODEL']:
i['run_script_input']['script_name'] = "build_bert_harness"
env['CM_MLPERF_INFERENCE_INTEL_HARNESS_PATH'] = os.path.join(os.getcwd(), "harness", "build", "bert_inference")
env['DATA_PATH'] = os.path.join(os.getcwd(), "harness", "bert")
if "resnet50" in env['CM_MODEL']:
elif "resnet50" in env['CM_MODEL']:
i['run_script_input']['script_name'] = "build_resnet50_harness"
env['CM_MLPERF_INFERENCE_INTEL_HARNESS_PATH'] = os.path.join(os.getcwd(), "harness", "build", "resnet50_inference")
env['DATA_PATH'] = os.path.join(os.getcwd(), "harness", "resnet50")
elif "retinanet" in env['CM_MODEL']:
i['run_script_input']['script_name'] = "build_retinanet_harness"
env['CM_MLPERF_INFERENCE_INTEL_HARNESS_PATH'] = os.path.join(os.getcwd(), "harness", "build", "retinanet_inference")
elif "gpt" in env['CM_MODEL']:
i['run_script_input']['script_name'] = "build_gptj_harness"
env['CM_MLPERF_INFERENCE_INTEL_HARNESS_PATH'] = os.path.join(os.getcwd(), "harness", "build", "gptj_inference")
Expand Down Expand Up @@ -141,6 +147,12 @@ def preprocess(i):
env['CM_RUN_DIR'] = env['CM_MLPERF_OUTPUT_DIR']
env['CM_RUN_CMD'] = f"bash {os.path.join(i['run_script_input']['path'],'run_resnet50_harness.sh')} "

elif 'retinanet' in env['CM_MODEL']:
env['MODEL_PATH'] = env['CM_ML_MODEL_RETINANET_INT8_FILE_WITH_PATH']
env['DATA_DIR'] = env['CM_DATASET_PATH_ROOT']
env['CM_RUN_DIR'] = env['CM_MLPERF_OUTPUT_DIR']
env['CM_RUN_CMD'] = f"bash {os.path.join(i['run_script_input']['path'],'run_retinanet_harness.sh')} "

elif "gptj" in env['CM_MODEL']:
env['CM_RUN_DIR'] = i['run_script_input']['path']
if env.get('CM_MLPERF_INFERENCE_CODE_VERSION', '') == "v3.1":
Expand Down
50 changes: 50 additions & 0 deletions script/app-mlperf-inference-intel/run_retinanet_harness.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

CPUS_PER_INSTANCE=8
number_threads=`nproc --all`
export number_cores=`lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l`
number_sockets=`grep physical.id /proc/cpuinfo | sort -u | wc -l`
cpu_per_socket=$((number_cores/number_sockets))
number_instance=$((number_cores/CPUS_PER_INSTANCE))

WORKERS_PER_PROC=${WORKERS_PER_PROC:-4}
THREADS_PER_INSTANCE=$((( ${WORKERS_PER_PROC} * ${CM_HOST_CPU_THREADS_PER_CORE}) / ${CM_HOST_CPU_SOCKETS}))

export LD_PRELOAD=${CONDA_PREFIX}/lib/libjemalloc.so
export LD_PRELOAD=${CONDA_PREFIX}/lib/libiomp5.so
export MALLOC_CONF="oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000";

KMP_SETTING="KMP_AFFINITY=granularity=fine,compact,1,0"
export KMP_BLOCKTIME=1
export $KMP_SETTING


export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CONDA_PREFIX}/lib

executable="${CM_HARNESS_CODE_ROOT}/build/bin/mlperf_runner"

number_threads=`nproc --all`
export number_cores=`lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l`
num_numa=$(numactl --hardware|grep available|awk -F' ' '{ print $2 }')
num_instance=$(($number_cores / $THREADS_PER_INSTANCE))

scenario=${CM_MLPERF_LOADGEN_SCENARIO}
OUTDIR="${CM_MLPERF_OUTPUT_DIR}"
scenario="Offline"
#python ../../user_config.py

#--warmup_iters 20 \
CONFIG=" --scenario ${scenario} --mode ${LOADGEN_MODE} --model_name retinanet \
--model_path ${MODEL_PATH} \
--data_path ${DATA_DIR} \
--mlperf_conf ${CM_MLPERF_CONF} --user_conf ${CM_MLPERF_USER_CONF} \
--cpus_per_instance $CPUS_PER_INSTANCE \
--num_instance $number_instance \
--total_sample_count 24781 \
--batch_size 1
"

cmd=" ${executable} ${CONFIG}"
echo "$cmd"
eval "$cmd"
test "$?" -eq 0 || exit "$?"
1 change: 0 additions & 1 deletion script/app-mlperf-inference/_cm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,6 @@ variations:
stable-diffusion-xl
default_variations:
precision: float16
backend: pytorch
device: cuda
add_deps_recursive:
mlperf-inference-implementation:
Expand Down
Loading

0 comments on commit 3f173cb

Please sign in to comment.