快捷方式

构建说明

注意: 最新的构建说明已嵌入在 FBGEMM 仓库下的脚本集中,位于 setup_env.bash

构建 FBGEMM_GPU 的一般步骤如下

  1. 建立一个隔离的构建环境。

  2. 设置工具链。

  3. 运行构建脚本。

FBGEMM 要求

硬件要求

构建和运行 FBGEMM 需要支持 AVX2 指令集或更高版本的 CPU。

通常,FBGEMM 不依赖于 Intel MKL。然而,为进行性能比较,某些基准测试会使用 MKL 函数。如果找到 MKL 或通过 INTEL_MKL_DIR 环境变量提供了 MKL 路径,则基准测试将使用 MKL 构建,并报告 MKL 函数的性能数据。否则,此部分基准测试将不会构建。

软件依赖

所有三个依赖项都通过 FBGEMM 仓库的 git 子模块提供。但是,如果您想要自定义版本,可以在构建中使用环境变量 ASMJIT_SRC_DIRCPUINFO_SRC_DIRGOOGLETEST_SOURCE_DIR 进行设置。

asmjit

对于内部内核,FBGEMM 采用“一刀切不适合”的方法,因此实现会使用一个名为 asmjit 的第三方库,动态生成针对不同矩阵形状的高效矢量化代码。

cpuinfo

FBGEMM 在运行时使用 PyTorch 项目提供的 cpuinfo 库检测 CPU 指令集支持,并为检测到的指令集分派优化内核。

GoogleTest

构建和运行 FBGEMM 的测试需要 GoogleTest。但是,如果您不想运行 FBGEMM 测试,则不需要 GoogleTest。默认情况下,测试与库一起构建;要关闭此功能,只需将 FBGEMM_BUILD_TESTS=0 设置为 0。

建立一个隔离的构建环境

请按照 设置隔离的构建环境 中的说明设置 Conda 环境。

安装构建工具

C/C++ 编译器

对于 Linux 和 macOS 平台,请按照 C/C++ 编译器 (GCC) 中的说明安装 GCC 工具链。对于基于 Clang 的构建,请按照 C/C++ 编译器 (Clang) 中的说明安装 Clang 工具链。

对于 Windows 机器上的构建,建议使用 Microsoft Visual Studio 2019 或更高版本。请在此处 按照 Microsoft 提供的安装说明 进行操作。

其他构建工具

安装其他必要的构建工具,例如 ninjacmake 等。

conda install -n ${env_name} -c conda-forge --override-channels -y \
    bazel \
    cmake \
    doxygen \
    make \
    ninja \
    openblas

请注意,bazel 包仅在进行 Bazel 构建时需要,而 ninja 包仅在 Windows 构建时需要。

构建 FBGEMM 库

准备构建

克隆仓库及其子模块

# !! Run inside the Conda environment !!

# Clone the repo and its submodules
git clone --recurse-submodules https://github.com/pytorch/FBGEMM.git
cd FBGEMM

在 Linux 和 macOS 上构建 (CMake + GCC)

假设 Conda 环境已安装所有工具,CMake 构建过程将非常简单。

# !! Run inside the Conda environment !!

# Create a build directory
mkdir build
cd build

# Set CMake build arguments
build_args=(
  -DFBGEMM_USE_SANITIZER=address
  -DFBGEMM_LIBRARY_TYPE=shared
  -DPYTHON_EXECUTABLE=`which python3`

  # OPTIONAL: Set to generate Doxygen documentation
  -DFBGEMM_BUILD_DOCS=ON
)

# Set up the build
cmake ${build_args[@]} ..

# Build the library
make -j VERBOSE=1

# Run all tests
make test

# Install the library
make install

GCC 12+ 的构建问题

在撰写本文时,在 GCC 12+ 上编译 FBGEMM 会因 已知的编译器回归 而失败。为了解决此问题,请在运行 CMake 之前添加以下导出命令。

# !! Run inside the Conda environment !!

export CFLAGS+=" -Wno-error=maybe-uninitialized -Wno-error=uninitialized -Wno-error=restrict"
export CXXFLAGS+=" -Wno-error=maybe-uninitialized -Wno-error=uninitialized -Wno-error=restrict"

有关更多详细信息,请参阅 GitHub issue 7793910941666

在 Linux 和 macOS 上构建 (CMake + Clang)

使用 Clang 构建 FBGEMM 的步骤与使用 GCC 构建的步骤完全相同。但是,需要在 CMake 调用中添加额外的构建参数来指定 Clang 路径、基于 LLVM 的 C++ 标准库 (libc++) 和基于 LLVM 的 OpenMP 实现 (libomp)。

# !! Run inside the Conda environment !!

# Locate Clang
cc_path=$(which clang)
cxx_path=$(which clang++)

# Append to the CMake build arguments
build_args+=(
  -DCMAKE_C_COMPILER="${cc_path}"
  -DCMAKE_CXX_COMPILER="${cxx_path}"
  -DCMAKE_C_FLAGS=\"-fopenmp=libomp -stdlib=libc++ -I $CONDA_PREFIX/include\"
  -DCMAKE_CXX_FLAGS=\"-fopenmp=libomp -stdlib=libc++ -I $CONDA_PREFIX/include\"
)

在 Linux 上构建 (Bazel)

同样,Bazel 构建也非常简单。

# !! Run inside the Conda environment !!

# Build the library
bazel build -s :*

# Run all tests
bazel test -s :*

在 Windows 上构建

# Specify the target architecture to bc x64
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64

# Create a build directory
mkdir %BUILD_DIR%
cd %BUILD_DIR%

cmake -G Ninja -DFBGEMM_BUILD_BENCHMARKS=OFF -DFBGEMM_LIBRARY_TYPE=${{ matrix.library-type }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" ..
ninja -v all

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源