mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 00:21:07 +01:00
More detailed description of benefits can be found at #41001. This is Intel's counterpart of NVidia’s NVTX (https://pytorch.org/docs/stable/autograd.html#torch.autograd.profiler.emit_nvtx). ITT is a functionality for labeling trace data during application execution across different Intel tools. For integrating Intel(R) VTune Profiler into Kineto, ITT needs to be integrated into PyTorch first. It works with both standalone VTune Profiler [(https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html](https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html)) and Kineto-integrated VTune functionality in the future. It works for both Intel CPU and Intel XPU devices. Pitch Add VTune Profiler's ITT API function calls to annotate PyTorch ops, as well as developer customized code scopes on CPU, like NVTX for NVidia GPU. This PR rebases the code changes at https://github.com/pytorch/pytorch/pull/61335 to the latest master branch. Usage example: ``` with torch.autograd.profiler.emit_itt(): for i in range(10): torch.itt.range_push('step_{}'.format(i)) model(input) torch.itt.range_pop() ``` cc @ilia-cher @robieta @chaekit @gdankel @bitfort @ngimel @orionr @nbcsm @guotuofeng @guyang3532 @gaoteng-git Pull Request resolved: https://github.com/pytorch/pytorch/pull/63289 Approved by: https://github.com/malfet
158 lines
5.3 KiB
Bash
Executable File
158 lines
5.3 KiB
Bash
Executable File
#!/bin/bash -xe
|
|
##############################################################################
|
|
# Example command to build the iOS target.
|
|
##############################################################################
|
|
#
|
|
# This script shows how one can build a Caffe2 binary for the iOS platform
|
|
# using ios-cmake. This is very similar to the android-cmake - see
|
|
# build_android.sh for more details.
|
|
|
|
CAFFE2_ROOT="$( cd "$(dirname "$0")"/.. ; pwd -P)"
|
|
|
|
CMAKE_ARGS=()
|
|
|
|
if [ -z "${BUILD_CAFFE2_MOBILE:-}" ]; then
|
|
# Build PyTorch mobile
|
|
CMAKE_ARGS+=("-DCMAKE_PREFIX_PATH=$(python -c 'import sysconfig; print(sysconfig.get_path("purelib"))')")
|
|
CMAKE_ARGS+=("-DPYTHON_EXECUTABLE=$(python -c 'import sys; print(sys.executable)')")
|
|
CMAKE_ARGS+=("-DBUILD_CUSTOM_PROTOBUF=OFF")
|
|
# custom build with selected ops
|
|
if [ -n "${SELECTED_OP_LIST}" ]; then
|
|
SELECTED_OP_LIST="$(cd $(dirname $SELECTED_OP_LIST); pwd -P)/$(basename $SELECTED_OP_LIST)"
|
|
echo "Choose SELECTED_OP_LIST file: $SELECTED_OP_LIST"
|
|
if [ ! -r ${SELECTED_OP_LIST} ]; then
|
|
echo "Error: SELECTED_OP_LIST file ${SELECTED_OP_LIST} not found."
|
|
exit 1
|
|
fi
|
|
CMAKE_ARGS+=("-DSELECTED_OP_LIST=${SELECTED_OP_LIST}")
|
|
fi
|
|
# bitcode
|
|
if [ "${ENABLE_BITCODE:-}" == '1' ]; then
|
|
CMAKE_ARGS+=("-DCMAKE_C_FLAGS=-fembed-bitcode")
|
|
CMAKE_ARGS+=("-DCMAKE_CXX_FLAGS=-fembed-bitcode")
|
|
fi
|
|
else
|
|
# Build Caffe2 mobile
|
|
CMAKE_ARGS+=("-DBUILD_CAFFE2_MOBILE=ON")
|
|
# Build protobuf from third_party so we have a host protoc binary.
|
|
echo "Building protoc"
|
|
BITCODE_FLAGS="-DCMAKE_C_FLAGS=-fembed-bitcode -DCMAKE_CXX_FLAGS=-fembed-bitcode "
|
|
$CAFFE2_ROOT/scripts/build_host_protoc.sh --other-flags $BITCODE_FLAGS
|
|
# Use locally built protoc because we'll build libprotobuf for the
|
|
# target architecture and need an exact version match.
|
|
CMAKE_ARGS+=("-DCAFFE2_CUSTOM_PROTOC_EXECUTABLE=$CAFFE2_ROOT/build_host_protoc/bin/protoc")
|
|
# Bitcode is enabled by default for caffe2
|
|
CMAKE_ARGS+=("-DCMAKE_C_FLAGS=-fembed-bitcode")
|
|
CMAKE_ARGS+=("-DCMAKE_CXX_FLAGS=-fembed-bitcode")
|
|
fi
|
|
|
|
# Use ios-cmake to build iOS project from CMake.
|
|
# This projects sets CMAKE_C_COMPILER to /usr/bin/gcc and
|
|
# CMAKE_CXX_COMPILER to /usr/bin/g++. In order to use ccache (if it is available) we
|
|
# must override these variables via CMake arguments.
|
|
CMAKE_ARGS+=("-DCMAKE_TOOLCHAIN_FILE=$CAFFE2_ROOT/cmake/iOS.cmake")
|
|
if [ -n "${CCACHE_WRAPPER_PATH:-}"]; then
|
|
CCACHE_WRAPPER_PATH=/usr/local/opt/ccache/libexec
|
|
fi
|
|
if [ -d "$CCACHE_WRAPPER_PATH" ]; then
|
|
CMAKE_ARGS+=("-DCMAKE_C_COMPILER=$CCACHE_WRAPPER_PATH/gcc")
|
|
CMAKE_ARGS+=("-DCMAKE_CXX_COMPILER=$CCACHE_WRAPPER_PATH/g++")
|
|
fi
|
|
|
|
# IOS_PLATFORM controls type of iOS platform (see ios-cmake)
|
|
if [ -n "${IOS_PLATFORM:-}" ]; then
|
|
CMAKE_ARGS+=("-DIOS_PLATFORM=${IOS_PLATFORM}")
|
|
if [ "${IOS_PLATFORM}" == "WATCHOS" ]; then
|
|
# enable bitcode by default for watchos
|
|
CMAKE_ARGS+=("-DCMAKE_C_FLAGS=-fembed-bitcode")
|
|
CMAKE_ARGS+=("-DCMAKE_CXX_FLAGS=-fembed-bitcode")
|
|
# disable the QNNPACK
|
|
CMAKE_ARGS+=("-DUSE_PYTORCH_QNNPACK=OFF")
|
|
fi
|
|
else
|
|
# IOS_PLATFORM is not set, default to OS, which builds iOS.
|
|
CMAKE_ARGS+=("-DIOS_PLATFORM=OS")
|
|
fi
|
|
|
|
if [ -n "${IOS_ARCH:-}" ]; then
|
|
CMAKE_ARGS+=("-DIOS_ARCH=${IOS_ARCH}")
|
|
fi
|
|
|
|
if [ "${BUILD_LITE_INTERPRETER}" == 0 ]; then
|
|
CMAKE_ARGS+=("-DBUILD_LITE_INTERPRETER=OFF")
|
|
else
|
|
CMAKE_ARGS+=("-DBUILD_LITE_INTERPRETER=ON")
|
|
fi
|
|
if [ "${TRACING_BASED}" == 1 ]; then
|
|
CMAKE_ARGS+=("-DTRACING_BASED=ON")
|
|
else
|
|
CMAKE_ARGS+=("-DTRACING_BASED=OFF")
|
|
fi
|
|
if [ "${USE_LIGHTWEIGHT_DISPATCH}" == 1 ]; then
|
|
CMAKE_ARGS+=("-DUSE_LIGHTWEIGHT_DISPATCH=ON")
|
|
CMAKE_ARGS+=("-DSTATIC_DISPATCH_BACKEND=CPU")
|
|
else
|
|
CMAKE_ARGS+=("-DUSE_LIGHTWEIGHT_DISPATCH=OFF")
|
|
fi
|
|
|
|
CMAKE_ARGS+=("-DUSE_LITE_INTERPRETER_PROFILER=OFF")
|
|
|
|
# Don't build binaries or tests (only the library)
|
|
CMAKE_ARGS+=("-DBUILD_TEST=OFF")
|
|
CMAKE_ARGS+=("-DBUILD_BINARY=OFF")
|
|
CMAKE_ARGS+=("-DBUILD_PYTHON=OFF")
|
|
|
|
# Disable unused dependencies
|
|
CMAKE_ARGS+=("-DUSE_CUDA=OFF")
|
|
CMAKE_ARGS+=("-DUSE_ITT=OFF")
|
|
CMAKE_ARGS+=("-DUSE_GFLAGS=OFF")
|
|
CMAKE_ARGS+=("-DUSE_OPENCV=OFF")
|
|
CMAKE_ARGS+=("-DUSE_LMDB=OFF")
|
|
CMAKE_ARGS+=("-DUSE_LEVELDB=OFF")
|
|
CMAKE_ARGS+=("-DUSE_MPI=OFF")
|
|
CMAKE_ARGS+=("-DUSE_NUMPY=OFF")
|
|
CMAKE_ARGS+=("-DUSE_NNPACK=OFF")
|
|
CMAKE_ARGS+=("-DUSE_MKLDNN=OFF")
|
|
|
|
# Metal
|
|
if [ "${USE_PYTORCH_METAL:-}" == "1" ]; then
|
|
CMAKE_ARGS+=("-DUSE_PYTORCH_METAL=ON")
|
|
fi
|
|
|
|
# Core ML
|
|
if [ "${USE_COREML_DELEGATE}" == "1" ]; then
|
|
CMAKE_ARGS+=("-DUSE_COREML_DELEGATE=ON")
|
|
fi
|
|
|
|
# pthreads
|
|
CMAKE_ARGS+=("-DCMAKE_THREAD_LIBS_INIT=-lpthread")
|
|
CMAKE_ARGS+=("-DCMAKE_HAVE_THREADS_LIBRARY=1")
|
|
CMAKE_ARGS+=("-DCMAKE_USE_PTHREADS_INIT=1")
|
|
|
|
# Only toggle if VERBOSE=1
|
|
if [ "${VERBOSE:-}" == '1' ]; then
|
|
CMAKE_ARGS+=("-DCMAKE_VERBOSE_MAKEFILE=1")
|
|
fi
|
|
|
|
# enable ARC
|
|
CMAKE_ARGS+=("-DCMAKE_CXX_FLAGS=-fobjc-arc")
|
|
|
|
# Now, actually build the iOS target.
|
|
BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build_ios"}
|
|
INSTALL_PREFIX=${BUILD_ROOT}/install
|
|
mkdir -p $BUILD_ROOT
|
|
cd $BUILD_ROOT
|
|
cmake "$CAFFE2_ROOT" \
|
|
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
|
|
-DCMAKE_BUILD_TYPE=MinSizeRel \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
${CMAKE_ARGS[@]} \
|
|
$@
|
|
|
|
cmake --build . -- "-j$(sysctl -n hw.ncpu)"
|
|
|
|
# copy headers and libs to install directory
|
|
echo "Will install headers and libs to $INSTALL_PREFIX for further Xcode project usage."
|
|
make install
|
|
echo "Installation completed, now you can copy the headers/libs from $INSTALL_PREFIX to your Xcode project directory."
|