1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

解题思路

本题实现一种常见的线性层 INT8 量化推理流程:对输入矩阵 X 做 per-token(按行)量化,对权重矩阵 W 做 per-channel(按列)量化,然后在 INT32 累加域中完成矩阵乘法,最后用缩放因子反量化回 FP32 输出。

核心算法分为 4 步:

  1. 计算缩放因子(scale)

    • 对 X 的每一行 i(一个 token):

P4548.第3题-模型INT8量化计算

    1000ms Tried: 463 Accepted: 145 Difficulty: 7 所属公司 : 华为
    算法与标签>机器学习算法

题目内容

在深度学习模型部署中,为降低内存占用与计算延迟,常采用量化技术将FP32FP32FP32参数转换为低精度格式(如INT8INT8INT8)。本题要求实现一种INT8INT8INT8量化策略,对输入矩阵XXX与权重矩阵WWW分别进行per−tokenper-tokenper−token(按行)和per−channelper-channelper−channel(按列)量化,计算量化后矩阵相乘(带scalesscalesscales)的结果并输出。

原始矩阵:

  • 输入矩阵X∈RM×KX \in \mathbb{R}^{M \times K}X∈RM×K(按行视为MMM个TokenTokenToken)

  • 权重矩阵W∈RK×NW \in \mathbb{R}^{K \times N}W∈RK×N(按列视为NNN个ChannelChannelChannel)

量化参数:

  • sX(i)s_{X}^{(i)}sX(i)​:第iii个TokenTokenToken的缩放因子(per−tokenper-tokenper−token)
  • sW(j)s_{W}^{(j)}sW(j)​:第jjj个ChannelChannelChannel的缩放因子(per−channelper-channelper−channel)

2. 量化公式

(1) Per-Token 量化(输入矩阵 XXX)

  • 缩放因子计算:

    sX(i)=max⁡k∈[1,K]∣Xi,k∣127,∀i∈[1,M]s_{X}^{(i)}=\frac{\max_{k \in [1, K]} \left| X_{i,k} \right|}{127}, \quad \forall i \in [1, M] sX(i)​=127maxk∈[1,K]​∣Xi,k​∣​,∀i∈[1,M]
  • 量化公式:

    QX(i,k)=clip⁡(round⁡(Xi,ksX(i)),−127,127)Q_{X}^{(i,k)}=\operatorname{clip}\left( \operatorname{round}\left( \frac{X_{i,k}}{s_{X}^{(i)}} \right), -127, 127 \right) QX(i,k)​=clip(round(sX(i)​Xi,k​​),−127,127)
  • 反量化恢复:

    X^i,k=QX(i,k)⋅sX(i)\hat{X}_{i,k}=Q_{X}^{(i,k)} \cdot s_{X}^{(i)} X^i,k​=QX(i,k)​⋅sX(i)​

注意:

  • round:四舍五入取整函数【按Python round()函数处理逻辑,奇进偶弃舍入法。即非0.50.50.5的情况:遵循常规的四舍五入规则。0.50.50.5情况:舍入到最接近的偶数。】
  • clip(x,−127,127)(x, -127, 127)(x,−127,127):将超过区间的值截断到[−127,127][-127, 127][−127,127]范围内,超过127则为127,小于−127-127−127同理。

(2) Per−ChannelPer-ChannelPer−Channel 量化(权重矩阵 WWW)

  • 缩放因子计算:
sW(j)=max⁡k∈[1,K]∣Wk,j∣127,∀j∈[1,N]s_{W}^{(j)} = \frac{\max_{k \in [1,K]} |W_{k,j}|}{127}, \quad \forall j \in [1, N] sW(j)​=127maxk∈[1,K]​∣Wk,j​∣​,∀j∈[1,N]
  • 量化公式:
QW(k,j)=clip⁡(round⁡(Wk,jsW(j)),−127,127)Q_{W}^{(k,j)} = \operatorname{clip}\left(\operatorname{round}\left(\frac{W_{k,j}}{s_{W}^{(j)}}\right), -127, 127\right) QW(k,j)​=clip(round(sW(j)​Wk,j​​),−127,127)
  • 反量化恢复:
W^k,j=QW(k,j)⋅sW(j)\hat{W}_{k,j} = Q_{W}^{(k,j)} \cdot s_{W}^{(j)} W^k,j​=QW(k,j)​⋅sW(j)​

3.量化矩阵乘法

(1) INT8 矩阵乘法(量化后计算)

Yint32(i,j)=∑k=1KQX(i,k)⋅QW(k,j)Y_{\text{int}32}^{(i,j)}=\sum_{k=1}^{K} Q_{X}^{(i,k)} \cdot Q_{W}^{(k,j)}Yint32(i,j)​=∑k=1K​QX(i,k)​⋅QW(k,j)​

  • 输出为 INT32 矩阵(避免溢出)。

(2) 反量化到 FP32

Yfp32(i,j)=Yint32(i,j)⋅sX(i)⋅sW(j)Y_{\text{fp}32}^{(i,j)}=Y_{\text{int}32}^{(i,j)} \cdot s_{X}^{(i)} \cdot s_{W}^{(j)}Yfp32(i,j)​=Yint32(i,j)​⋅sX(i)​⋅sW(j)​

  • 组合缩放因子:每个元素的缩放因子为 sX(i)⋅sW(j)s_{X}^{(i)} \cdot s_{W}^{(j)}sX(i)​⋅sW(j)​。

输入描述

输入为矩阵

X∈RM×K X \in \mathbb{R}^{M \times K} X∈RM×K 输入矩阵

W∈RK×N W \in \mathbb{R}^{K \times N} W∈RK×N 权重矩阵

其中

0<M,K,N<=128 0 < M, K, N <= 128 0<M,K,N<=128

−1000000.0<= -1000000.0 <= −1000000.0<= 矩阵元素值 <=1000000.0 <= 1000000.0 <=1000000.0

标准输入方式读入,按照XXX、WWW顺序读入,前两个数字为矩阵大小。

输出描述

输出量化后矩阵相乘结果(带scalescalescale计算),并四舍五入到小数点后两位小数【建议使用Python format(num, '.2f')处理】。注意:每行结果以单个空格间隔,头尾不要有多余空格。

样例1

输入

2 2
1.0 0.5
-0.5 2.0
2 2
0.8 -0.3
1.2 1.5

输出

1.41 0.46
2.00 3.15

说明

样例2

输入

2 3
1.2 -2.3 3.4
-4.5 5.6 -6.7
3 2
0.8 -1.9
2.0 -2.1
3.2 3.3

输出

7.27 13.78
-13.92 -25.37

说明

以上输入对应如下矩阵内容:

输入矩阵 X(2∗3,M=2 Tokens)X(2 * 3, M=2\ \text{Tokens})X(2∗3,M=2 Tokens)

X=[1.2−2.33.4−4.55.6−6.7]X=\begin{bmatrix}1.2&-2.3&3.4\\-4.5&5.6&-6.7\end{bmatrix} X=[1.2−4.5​−2.35.6​3.4−6.7​]

权重矩阵 W(3∗2,N=2 Channels)W(3 * 2, N=2\ \text{Channels})W(3∗2,N=2 Channels)

W=[0.8−1.92.0−2.13.23.3]W=\begin{bmatrix}0.8&-1.9\\2.0&-2.1\\3.2&3.3\end{bmatrix} W=​0.82.03.2​−1.9−2.13.3​​

对应如下矩阵结果:

outfp32=[7.2713.78−13.92−25.37]out_{\text{fp}32}=\begin{bmatrix}7.27&13.78\\-13.92&-25.37\end{bmatrix} outfp32​=[7.27−13.92​13.78−25.37​]

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 0, 194ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?