T-MAC 論文筆記

  • paper: T-MAC: CPU Renaissance via Table Lookup for Low-Bit LLM Deployment on Edge
  • 研究背景與問題核心
    • 在不依賴 GPU 的情況下高效推理 e.g. 手機晶片
    • 過去:權重量化 e.g. 4-bit、2-bit、甚至 1-bit
      • 問題:
        • 推理時需反量化(dequantization)
          • 低位元權重轉回高精度格式(如 int8、float16)以進行矩陣乘法,會抵銷原本低位元帶來的加速與節能效果。
        • 硬體不支援混合精度運算
          • 硬體多為固定對稱精度,無法直接處理這類「低權重、高激活」的不對稱計算。
  • T-MAC 的核心創新與貢獻
    • 查找表(LUT)取代乘法運算
      • T-MAC(Table-based Mixed-Precision Acceleration Core)徹底捨棄反量化與乘法運算,透過將矩陣乘法轉換為按位(bit-wise)查表 + 加法,極大地提升效率並降低功耗。
    • 技術細節摘要:
      • 查表代替乘法:對激活向量與可能的 1-bit 權重組合做乘法,並將結果存入查找表。
      • 查表駐留快取記憶體
        • 查找表存放於寄存器或快取記憶體中(on-chip memory)。
        • 實作了 軸重排(axis reordering) 和 記憶體交錯(interleaving),提升記憶體存取效率。
      • 查找表壓縮(LUT Compression)
        • 鏡像壓縮(mirror consolidation):僅儲存正值,負值可直接對應為其相反數。
        • 表格量化(table quantization):對表格內資料再量化,進一步減少空間需求。

跑 T-MAC 程式

export TMAC_ROOT=$(pwd)
cd 3rdparty/tvm
export TVM_SRC=$(pwd)
export BUILD_DIR="$TVM_SRC/build"
sudo apt update -y
sudo apt install -y \
  build-essential clang llvm-dev cmake ninja-build \
  libzstd-dev libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
  libsqlite3-dev libffi-dev libxml2-dev liblzma-dev libgdbm-dev \
  uuid-dev libnss3-dev

STATIC_ZSTD=/usr/lib/x86_64-linux-gnu/libzstd.a
if [[ -f "$STATIC_ZSTD" ]]; then
  echo "[info] Temporarily renaming libzstd.a → libzstd.a.bak to force dynamic linking"
  sudo mv "$STATIC_ZSTD" "${STATIC_ZSTD}.bak"
fi
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
ZSTD_SO=$(ldconfig -p | grep libzstd.so | head -n1 | awk '{print $4}')

cmake -G Ninja .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DUSE_LLVM=llvm-config \
  -DUSE_GRAPH_EXECUTOR=ON \
  -DUSE_AUTO_SCHEDULER=ON \
  -DZSTD_LIBRARY="$ZSTD_SO" \
  -DZSTD_INCLUDE_DIR=/usr/include
  
  • ninja -j$(nproc)

  • export PYTHONPATH=$TVM_SRC/python:\$PYTHONPATH

  • export PATH=/home/alanhc/workspace/T-MAC/build/clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04/bin:$PATH

    ​​​​export PATH=${TMAC_ROOT}/build/clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04/bin:$PATH
    ​​​​ export PYTHONPATH=${TMAC_ROOT}/3rdparty/tvm/python:$PYTHONPATH
    

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

https://hackmd.io/@sysprog/linux-zerocopy

T-MAC 載入模型的機制