跳到主要内容

EsQuant 模型量换工具

EsQuant 工具介绍

EsQuant 工具提供 python 接口供用户使用,使用 python 接口形式量化模型的优势是用户可以自定 义预处理函数,同时预先提供了 imagenet 和 yolo 的预处理函数,方便分类模型和检测模型的量化工作。

EsQuant 可以方便地完成以下工作:

  • 量化功能:支持将浮点数模型量化成定点化模型,支持对称量化,不同层支持混合精度量化。

  • 量化精度分析:该功能将给出模型量化后每一层推理结果与浮点数推理结果的余弦相似度,包 含累计误差分析和重置误差分析,根据累计误差分析可以便于分析量化误差是如何出现的,为 提高量化模型的精度提供思路。

EsQuant 安装

提示

此文档在 x86 ubuntu22.04 Linux 6.8.0-52-generic 上测试通过

EsQuant 以 docker 形式发布, 请用户在 X86 Linux 平台工作站安装好 docker

  • 获取 EsQuant

    请按照 ENNP SDK 下载 下载 nn-tools

  • 加载 EsQuant docker 镜像

    cd nn-tools/EIC7x_Release_20241230
    sudo docker load -i esquant_docker.tar
  • 查看 EsQuant docker 镜像

    $sudo docker images
    esquant v0.7 a0c9432b21c5 4 months ago 18.4GB
  • 创建容器 host 端准备 workspace 文件夹

    mkdir workspace && cd workspace
    • 使用 GPU

      提示

      使用 GPU 启动 Docker 需要提前安装 NVIDIA Container Toolkit

      sudo docker run --name [gpu_container_name] -it --runtime=nvidia --privileged=true --gpus all -v $(pwd):/workspace esquant:v0.7 /bin/bash
    • 使用 CPU

      sudo docker run --name [cpu_container_name] -it -v $(pwd):/workspace esquant:v0.7 /bin/bash
  • 安装 EsQuant Python 包 将 nn-tools 里的 esquant-1.0-py3-none-any.whl 复制到 host 上的 workspace 文件夹中

    pip3 install ./esquant-1.0-py3-none-any.whl
  • 确认 EsQuant 安装成功

    查看版本信息和 git-hash 信息以确认是否部署成

    root@be488f694803:/workspace# python3
    Python 3.10.14 (main, May 6 2024, 19:42:50) [GCC 11.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import esquant
    Read SHA from /opt/conda/lib/python3.10/site-packages/esquant/core/sha.txt

    .----------------. .----------------. .----------------. .----------------. .----------------. .-----------------. .----------------.
    | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
    | | _________ | || | _______ | || | ___ | || | _____ _____ | || | __ | || | ____ _____ | || | _________ | |
    | | |_ ___ | | || | / ___ | | || | .' '. | || ||_ _||_ _|| || | / \ | || ||_ \|_ _| | || | | _ _ | | |
    | | | |_ \_| | || | | (__ \_| | || | / .-. \ | || | | | | | | || | / /\ \ | || | | \ | | | || | |_/ | | \_| | |
    | | | _| _ | || | '.___`-. | || | | | | | | || | | ' ' | | || | / ____ \ | || | | |\ \| | | || | | | | |
    | | _| |___/ | | || | |`\____) | | || | \ `-' \_ | || | \ `--' / | || | _/ / \ \_ | || | _| |_\ |_ | || | _| |_ | |
    | | |_________| | || | |_______.' | || | `.___.\__| | || | `.__.' | || ||____| |____|| || ||_____|\____| | || | |_____| | |
    | | | || | | || | | || | | || | | || | | || | | |
    | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
    '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'

    >>> esquant.version()
    version: 1.0
    sha id: af6da07d5c205583f1a71cfee12339ed10623d08
    >>>

  • ZIFENG278