使用 MSVC 2019 Build Tools 构建 ONNX Runtime v1.22.2©🌱

运行环境

  1. Enterprise Windows Driver Kit with Microsoft C++ 2019 Build Tools
  2. 独立安装cmake-3.28.6-win32-x86或更高版本
  3. msys2 - 安装python、git、tar、zip、p7z 等工具

启动环境

  1. 启动EWDK-x64x86控制台,在其中执行msys2_shell.cmd(如下操作均在msys2shell中执行)
  2. 检查编译所需开发组件

where cmake python nmake cl ml64 ml nmake -? && cl

  1. 如系统中存在多个易混淆的cmakepython

通过在shell中设置PATH来确保cmake不能用msys2的,
python要用msys2

下载源码

  1. 检出onnxruntime-1.22.2代码

git clone -b rel-1.22.2 –recursive https://github.com/microsoft/onnxruntime.git

  1. 进入onnxruntime代码目录

cd onnxruntime

  1. 检出子模块代码

git submodule update –init –recursive

编译过程

  1. 设置环境变量build_dir为编译工作目录,执行编译脚本
build_dir=./build_cpp_only
python3 ./tools/ci_build/build.py \
    --compile_no_warning_as_error \
    --build_dir $build_dir \
    --config Release \
    --update --build \
    --build_shared_lib \
    --cmake_generator "NMake Makefiles" \
    --cmake_extra_defines onnxruntime_BUILD_UNIT_TESTS=OFF \
    --cmake_extra_defines CMAKE_INSTALL_PREFIX=$build_dir/install/ \
    --skip_tests 
  1. 如需自动安装,请在编译脚本后追加--target install

下述需要干预编译过程,故忽略此步

干预protobuf的编译

  1. 打开$build_dir/Release/_deps/protobuf-build/CMakeFiles/*.dir/flags.make
  2. 修改CXX_FLAGS中的/MT/MD
  3. 执行构建命令

cd $build_dir/Release && nmake

干预onnx的编译(同样适应于Debian版本)

  1. 打开$build_dir/Release/_deps/onnx-build/CMakeFiles/*_proto.dir/build.make
  2. 修改python.exe */onnx-src/onnx/gen_proto.pypython.exe ../onnx-src/onnx/gen_proto.py
  3. 执行构建命令

cd $build_dir/Release && nmake

干预32位(x86)版本mlas(最高支持avx2)的编译

  1. 打开$build_dir/Release/CMakeFiles/onnxruntime_mlas..dir/build.make

删除所有avx512C++编译内容和amd64\*.asm编译内容
添加onnxruntime\core\mlas\lib\i386\*.asm对应的编译内容

  1. 修打开$build_dir/Release/CMakeFiles/onnxruntime_mlas..dir/objects1.rsp

删除所有avx512的内容和amd64\*.asm内容
追加onnxruntime\core\mlas\lib\i386\*.asm对应的内容

  1. 修打开onnxruntime\core\mlas\lib\amx_common.h源码

#ifdef _WIN32#define tile_dpbssd*之间添加如下内容

#if !defined (_M_X64)

// AMX
typedef int __tile;

extern void __cdecl _tile_loadconfig(const void *);
extern void __cdecl _tile_storeconfig(void *);
extern void __cdecl _tile_release(void);

extern void __cdecl _tile_loadd(__tile dst, const void *base, int stride);
extern void __cdecl _tile_stream_loadd(__tile dst, const void *base, int stride);
extern void __cdecl _tile_stored(__tile src, void *base, int stride);
extern void __cdecl _tile_zero(__tile dst);

extern void __cdecl _tile_dpbf16ps(__tile dst, __tile src1, __tile src2);
extern void __cdecl _tile_dpbssd(__tile dst, __tile src1, __tile src2);
extern void __cdecl _tile_dpbsud(__tile dst, __tile src1, __tile src2);
extern void __cdecl _tile_dpbusd(__tile dst, __tile src1, __tile src2);
extern void __cdecl _tile_dpbuud(__tile dst, __tile src1, __tile src2);

#endif  /* defined (_M_X64) */
  1. 执行构建命令

cd $build_dir/Release && nmake

干预onnxruntime_generate_def的编译

  1. 打开$build_dir/Release/CMakeFiles/onnxruntime_generate_def.dir/build.make
  2. 修改python3 */tools/ci_build/gen_def.pypython3 ../../tools/ci_build/gen_def.py
  3. 执行构建命令

cd $build_dir/Release && nmake

安装开发文件

cd $build_dir/Release && nmake install

Debian 版本

  1. 下载cmake-3.28.6-linux-x86_64.tar.gz
  2. 解压后将cmake-3.28.6-linux-x86_64/bin添加到PATH前面
  3. 准备源码,设置环境变量build_dir,执行编译脚本
build_dir=./build_cpp_only
python3 ./tools/ci_build/build.py \
    --compile_no_warning_as_error \
    --build_dir $build_dir \
    --config Release \
    --update --build \
    --build_shared_lib \
    --cmake_generator "Unix Makefiles" \
    --cmake_extra_defines onnxruntime_BUILD_UNIT_TESTS=OFF \
    --cmake_extra_defines CMAKE_INSTALL_PREFIX=$build_dir/install/ \
    --skip_tests 
  1. 干预onnx的编译同msvc2019版本

如有多个python版本,确保运行python3