{ "cells": [ { "cell_type": "markdown", "id": "19e284d2-74ad-4b0c-86d4-8279fcd69e8e", "metadata": {}, "source": [ "# 探究非对称量化和对称量化 - INT8\n", "\n", "> 指导文章:[17. 浅谈 RTN 模型量化:非对称 vs 对称](https://github.com/Hoper-J/AI-Guide-and-Demos-zh_CN/blob/master/Guide/17.%20浅谈%20RTN%20模型量化:非对称%20vs%20对称.md)\n", "\n", "在线链接:[Kaggle](https://www.kaggle.com/code/aidemos/15-int8) | [Colab](https://colab.research.google.com/drive/1jssltiV0avGynLPHKbRrKypy9W223fm-?usp=sharing)" ] }, { "cell_type": "markdown", "id": "1a8ce26a-af40-4356-9752-e8440b6973ae", "metadata": {}, "source": [ "## 安装库" ] }, { "cell_type": "code", "execution_count": 1, "id": "b2059734-fbe3-412d-8b73-2d94a96af741", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Looking in indexes: http://mirrors.aliyun.com/pypi/simple\n", "Requirement already satisfied: bitsandbytes in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (0.49.2)\n", "Requirement already satisfied: torch<3,>=2.3 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from bitsandbytes) (2.7.1)\n", "Requirement already satisfied: numpy>=1.17 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from bitsandbytes) (2.4.4)\n", "Requirement already satisfied: packaging>=20.9 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from bitsandbytes) (26.1)\n", "Requirement already satisfied: filelock in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (3.29.0)\n", "Requirement already satisfied: typing-extensions>=4.10.0 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (4.15.0)\n", "Requirement already satisfied: setuptools in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (82.0.1)\n", "Requirement already satisfied: sympy>=1.13.3 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (1.14.0)\n", "Requirement already satisfied: networkx in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (3.6.1)\n", "Requirement already satisfied: jinja2 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (3.1.6)\n", "Requirement already satisfied: fsspec in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (2025.3.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.80)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.5.1.17 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (9.5.1.17)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.4.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (11.3.0.4)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (10.3.7.77)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (11.7.1.2)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.5.4.2)\n", "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.3 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (0.6.3)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.26.2 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (2.26.2)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.77)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (12.6.85)\n", "Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (1.11.1.6)\n", "Requirement already satisfied: triton==3.3.1 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from torch<3,>=2.3->bitsandbytes) (3.3.1)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from sympy>=1.13.3->torch<3,>=2.3->bitsandbytes) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages (from jinja2->torch<3,>=2.3->bitsandbytes) (3.0.3)\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install bitsandbytes" ] }, { "cell_type": "markdown", "id": "d5e0797e-dd3e-4df3-82df-5eeaeeb084f9", "metadata": {}, "source": [ "## 应用 INT8 量化并打印模型参数\n", "\n", "观察 `transformer.h.0` 的模块。" ] }, { "cell_type": "code", "execution_count": 2, "id": "e8f450da-f688-423c-abaa-b76b1b2188b9", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GPT2LMHeadModel(\n", " (transformer): GPT2Model(\n", " (wte): Embedding(50257, 1280)\n", " (wpe): Embedding(1024, 1280)\n", " (drop): Dropout(p=0.1, inplace=False)\n", " (h): ModuleList(\n", " (0-35): 36 x GPT2Block(\n", " (ln_1): LayerNorm((1280,), eps=1e-05, elementwise_affine=True)\n", " (attn): GPT2Attention(\n", " (c_attn): Linear8bitLt(in_features=1280, out_features=3840, bias=True)\n", " (c_proj): Linear8bitLt(in_features=1280, out_features=1280, bias=True)\n", " (attn_dropout): Dropout(p=0.1, inplace=False)\n", " (resid_dropout): Dropout(p=0.1, inplace=False)\n", " )\n", " (ln_2): LayerNorm((1280,), eps=1e-05, elementwise_affine=True)\n", " (mlp): GPT2MLP(\n", " (c_fc): Linear8bitLt(in_features=1280, out_features=5120, bias=True)\n", " (c_proj): Linear8bitLt(in_features=5120, out_features=1280, bias=True)\n", " (act): NewGELUActivation()\n", " (dropout): Dropout(p=0.1, inplace=False)\n", " )\n", " )\n", " )\n", " (ln_f): LayerNorm((1280,), eps=1e-05, elementwise_affine=True)\n", " )\n", " (lm_head): Linear(in_features=1280, out_features=50257, bias=False)\n", ")\n", "\n", "打印模型 gpt2-large 的参数信息:\n", "\n", "参数名称: transformer.wte.weight, 数据类型: torch.float16\n", "参数名称: transformer.wpe.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.0.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.0.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.0.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.0.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.0.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.0.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.0.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.0.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.0.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.0.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.0.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.0.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.1.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.1.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.1.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.1.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.1.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.1.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.1.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.2.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.2.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.2.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.2.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.2.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.2.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.2.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.3.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.3.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.3.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.3.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.3.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.3.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.3.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.4.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.4.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.4.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.4.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.4.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.4.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.4.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.5.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.5.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.5.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.5.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.5.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.5.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.5.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.6.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.6.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.6.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.6.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.6.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.6.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.6.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.7.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.7.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.7.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.7.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.7.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.7.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.7.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.8.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.8.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.8.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.8.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.8.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.8.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.8.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.9.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.9.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.9.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.9.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.9.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.9.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.9.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.10.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.10.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.10.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.10.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.10.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.10.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.10.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.11.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.11.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.11.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.11.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.11.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.11.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.11.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.12.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.12.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.12.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.12.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.12.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.12.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.12.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.13.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.13.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.13.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.13.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.13.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.13.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.13.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.14.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.14.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.14.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.14.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.14.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.14.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.14.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.15.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.15.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.15.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.15.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.15.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.15.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.15.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.16.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.16.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.16.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.16.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.16.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.16.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.16.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.17.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.17.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.17.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.17.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.17.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.17.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.17.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.18.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.18.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.18.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.18.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.18.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.18.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.18.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.19.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.19.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.19.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.19.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.19.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.19.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.19.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.20.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.20.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.20.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.20.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.20.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.20.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.20.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.21.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.21.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.21.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.21.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.21.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.21.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.21.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.22.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.22.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.22.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.22.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.22.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.22.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.22.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.23.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.23.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.23.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.23.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.23.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.23.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.23.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.24.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.24.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.24.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.24.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.24.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.24.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.24.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.25.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.25.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.25.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.25.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.25.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.25.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.25.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.26.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.26.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.26.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.26.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.26.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.26.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.26.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.27.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.27.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.27.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.27.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.27.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.27.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.27.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.28.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.28.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.28.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.28.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.28.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.28.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.28.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.29.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.29.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.29.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.29.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.29.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.29.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.29.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.30.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.30.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.30.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.30.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.30.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.30.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.30.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.31.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.31.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.31.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.31.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.31.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.31.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.31.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.32.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.32.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.32.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.32.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.32.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.32.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.32.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.33.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.33.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.33.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.33.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.33.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.33.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.33.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.34.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.34.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.34.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.34.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.34.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.34.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.34.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.ln_1.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.35.ln_1.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.attn.c_attn.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.35.attn.c_attn.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.attn.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.35.attn.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.ln_2.weight, 数据类型: torch.float16\n", "参数名称: transformer.h.35.ln_2.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.mlp.c_fc.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.35.mlp.c_fc.bias, 数据类型: torch.float16\n", "参数名称: transformer.h.35.mlp.c_proj.weight, 数据类型: torch.int8\n", "参数名称: transformer.h.35.mlp.c_proj.bias, 数据类型: torch.float16\n", "参数名称: transformer.ln_f.weight, 数据类型: torch.float16\n", "参数名称: transformer.ln_f.bias, 数据类型: torch.float16\n" ] } ], "source": [ "import os\n", "# 设置模型下载镜像(注意,需要在导入 transformers 等模块前进行设置才能起效)\n", "os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'\n", "\n", "\n", "from transformers import AutoModelForCausalLM, BitsAndBytesConfig\n", "import torch.nn as nn\n", "\n", "model_name = 'gpt2-large'\n", "\n", "# 将模型配置为以 8-bit 量化的方式加载\n", "bnb_config = BitsAndBytesConfig(load_in_8bit=True)\n", "\n", "# 加载模型,并根据设备自动分配\n", "model = AutoModelForCausalLM.from_pretrained(\n", " model_name,\n", " quantization_config=bnb_config,\n", " device_map='auto'\n", ")\n", "\n", "# 打印模型的架构\n", "print(model)\n", "\n", "# 打印模型的参数名称和数据类型\n", "print(f\"\\n打印模型 {model_name} 的参数信息:\\n\")\n", "for name, param in model.named_parameters():\n", " print(f\"参数名称: {name}, 数据类型: {param.dtype}\")" ] }, { "cell_type": "markdown", "id": "936ada0a-9a06-44a1-a8eb-17c17d053861", "metadata": {}, "source": [ "## 代码示例\n", "\n", "尝试运行三种不同的 `fp32_values`。\n", "```python\n", "# 0\n", "fp32_values = torch.tensor([3.0, -5.5, 0.0, 6.0, -6.0, 2.5], dtype=torch.float32)\n", "# 1\n", "fp32_values = torch.tensor([3.0, -5.5, 0.0, 4.0, -6.0, 2.5], dtype=torch.float32)\n", "# 2\n", "fp32_values = torch.tensor([3.0, -5.5, 0.0, 8.0, -6.0, 2.5], dtype=torch.float32)\n", "```" ] }, { "cell_type": "code", "execution_count": 3, "id": "3ffeba75-da11-494d-98f5-268dde4df385", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FP32 的示例张量: tensor([ 3.0000, -5.5000, 0.0000, 6.0000, -6.0000, 2.5000])\n", "\n", "PyTorch 量化后的 INT8 数值: tensor([ 64, -117, 0, 127, -128, 53], dtype=torch.int8)\n", "PyTorch 使用的 scale: 0.0470588244497776 zero_point: tensor([0], dtype=torch.int32)\n", "PyTorch 反量化恢复后的 FP32 数值: tensor([ 3.0118, -5.5059, 0.0000, 5.9765, -6.0235, 2.4941])\n", "\n", "=====================\n", "\n", "自定义计算的 scale: 0.047058823529411764 zero_point: 0\n", "自定义量化后的 INT8 数值: tensor([ 64, -117, 0, 127, -128, 53], dtype=torch.int8)\n", "自定义反量化恢复后的 FP32 数值: tensor([ 3.0118, -5.5059, 0.0000, 5.9765, -6.0235, 2.4941])\n", "\n", "=====================\n", "\n", "FP32 模型的权重:\n", " Parameter containing:\n", "tensor([[ 3.0000, -5.5000, 0.0000, 6.0000, -6.0000, 2.5000]],\n", " requires_grad=True)\n", "量化后的 INT8 模型的权重:\n", " tensor([[ 3.0118, -5.5059, 0.0000, 5.9765, -6.0235, 2.4941]], size=(1, 6),\n", " dtype=torch.qint8, quantization_scheme=torch.per_channel_affine,\n", " scale=tensor([0.0471], dtype=torch.float64), zero_point=tensor([0]),\n", " axis=0)\n", "量化权重的 scale: tensor([0.0471], dtype=torch.float64)\n", "量化权重的 zero_point: tensor([0])\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/root/autodl-tmp/AI-Guide-and-Demos-zh_CN/.venv/lib/python3.12/site-packages/torch/ao/quantization/observer.py:244: UserWarning: Please use quant_min and quant_max to specify the range for observers. reduce_range will be deprecated in a future release of PyTorch.\n", " warnings.warn(\n" ] } ], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.quantization\n", "\n", "# 假设 FP32 的张量\n", "fp32_values = torch.tensor([3.0, -5.5, 0.0, 6.0, -6.0, 2.5], dtype=torch.float32)\n", "print(f\"FP32 的示例张量: {fp32_values}\\n\")\n", "\n", "# 定义 PyTorch 的量化和反量化函数\n", "def pytorch_quantize(fp32_tensor):\n", " # 使用 min-max 范围计算缩放因子,指定 dtype 为 torch.qint8\n", " q_params = torch.quantization.MinMaxObserver(dtype=torch.qint8)\n", " q_params(fp32_tensor)\n", " scale, zero_point = q_params.calculate_qparams()\n", "\n", " # 量化\n", " int8_tensor = torch.quantize_per_tensor(fp32_tensor, scale.item(), zero_point.item(), dtype=torch.qint8)\n", " return int8_tensor, scale.item(), zero_point\n", "\n", "def pytorch_dequantize(int8_tensor):\n", " # 反量化\n", " fp32_tensor = int8_tensor.dequantize()\n", " return fp32_tensor\n", "\n", "# 量化并获取 PyTorch 结果\n", "int8_tensor, scale, zero_point = pytorch_quantize(fp32_values)\n", "print(\"PyTorch 量化后的 INT8 数值:\", int8_tensor.int_repr())\n", "print(\"PyTorch 使用的 scale:\", scale, \"zero_point:\", zero_point)\n", "\n", "# 反量化\n", "recovered_fp32_pytorch = pytorch_dequantize(int8_tensor)\n", "print(\"PyTorch 反量化恢复后的 FP32 数值:\", recovered_fp32_pytorch)\n", "\n", "print(\"\\n=====================\\n\")\n", "\n", "# 对比与自定义的量化方式\n", "def custom_quantize_compare(fp32_values):\n", " # 获取张量数值的最小值和最大值\n", " x_min, x_max = fp32_values.min().item(), fp32_values.max().item()\n", " \n", " # 定义量化后整数数值的范围\n", " qmin, qmax = -128, 127 # 对应 torch.qint8\n", " \n", " # 计算 scale\n", " scale_custom = (x_max - x_min) / (qmax - qmin)\n", " \n", " # 非对称量化\n", " initial_zero_point = qmin - x_min / scale_custom\n", " zero_point_custom = int(round(initial_zero_point))\n", " \n", " # 将 zero_point 限制在 [qmin, qmax] 范围内\n", " zero_point_custom = max(qmin, min(qmax, zero_point_custom))\n", " \n", " print(\"自定义计算的 scale:\", scale_custom, \"zero_point:\", zero_point_custom)\n", " \n", " def quantize(fp32_tensor, scale, zero_point):\n", " # 计算量化值\n", " int8_tensor = torch.round(fp32_tensor / scale) + zero_point\n", " # 限制在 [qmin, qmax] 范围内\n", " int8_tensor = torch.clamp(int8_tensor, qmin, qmax)\n", " return int8_tensor.to(torch.int8)\n", " \n", " def dequantize(int8_tensor, scale, zero_point):\n", " # 反量化\n", " fp32_tensor = (int8_tensor.float() - zero_point) * scale\n", " return fp32_tensor\n", " \n", " # 量化\n", " int8_values_custom = quantize(fp32_values, scale_custom, zero_point_custom)\n", " print(\"自定义量化后的 INT8 数值:\", int8_values_custom)\n", " \n", " # 反量化\n", " recovered_fp32_custom = dequantize(int8_values_custom, scale_custom, zero_point_custom)\n", " print(\"自定义反量化恢复后的 FP32 数值:\", recovered_fp32_custom)\n", "\n", "# 运行自定义量化并比较\n", "custom_quantize_compare(fp32_values)\n", "\n", "print(\"\\n=====================\\n\")\n", "\n", "# 使用 fp32_values 作为线性层参数\n", "\n", "# 定义一个简单的线性模型\n", "class SimpleLinearModel(nn.Module):\n", " def __init__(self, weights, bias=None):\n", " super(SimpleLinearModel, self).__init__()\n", " # 假设输入特征数为6,输出特征数为1,用于匹配之前定义的张量,你也可以试试 (1, 6),记得对应修改 weights.view(6, 1)\n", " self.linear = nn.Linear(6, 1, bias=False)\n", " # 初始化权重\n", " self.linear.weight = nn.Parameter(weights.view(1, 6)) # 权重形状为 [out_features, in_features]\n", " \n", " def forward(self, x):\n", " return self.linear(x)\n", "\n", "# 创建 FP32 模型\n", "fp32_weights = fp32_values # [6]\n", "model_fp32 = SimpleLinearModel(fp32_weights)\n", "\n", "# 打印 FP32 模型的权重\n", "print(\"FP32 模型的权重:\\n\", model_fp32.linear.weight)\n", "\n", "# 使用默认量化配置\n", "model_fp32.qconfig = torch.quantization.get_default_qconfig('fbgemm')\n", "\n", "# 准备量化\n", "torch.quantization.prepare(model_fp32, inplace=True)\n", "\n", "# 校准:用示例数据跑一次前向,让 activation observer 统计到激活范围\n", "# 不做会触发 UserWarning: must run observer before calling calculate_qparams\n", "model_fp32(fp32_values.view(1, 6))\n", "\n", "# 量化权重\n", "torch.quantization.convert(model_fp32, inplace=True)\n", "\n", "# 打印量化后的权重\n", "print(\"量化后的 INT8 模型的权重:\\n\", model_fp32.linear.weight())\n", "\n", "# 获取量化参数\n", "weight_observer = model_fp32.linear.weight().q_per_channel_scales()\n", "weight_zero_points = model_fp32.linear.weight().q_per_channel_zero_points()\n", "print(\"量化权重的 scale:\", weight_observer)\n", "print(\"量化权重的 zero_point:\", weight_zero_points)" ] }, { "cell_type": "markdown", "id": "84d27d79-424a-404c-b076-58545107fe00", "metadata": {}, "source": [ "### 非对称量化\n", "\n", "模型量化方式修改为非对称量化。" ] }, { "cell_type": "code", "execution_count": 4, "id": "64256bcf-3e75-4b46-957f-ffdf8a5fdac4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FP32 模型的权重:\n", " Parameter containing:\n", "tensor([[ 3.0000, -5.5000, 0.0000, 6.0000, -6.0000, 2.5000]],\n", " requires_grad=True)\n", "量化后的 INT8 模型的权重(int_repr):\n", " tensor([[ 64, -117, 0, 127, -128, 53]], dtype=torch.int8)\n", "量化权重的 scale: 0.0470588244497776\n", "量化权重的 zero_point: 0\n" ] } ], "source": [ "model_fp32 = SimpleLinearModel(fp32_weights)\n", "\n", "# 打印 FP32 模型的权重\n", "print(\"FP32 模型的权重:\\n\", model_fp32.linear.weight)\n", "\n", "# ------------------------ 修改部分开始 ------------------------\n", "\n", "import torch.quantization as quant\n", "\n", "# 自定义的 qconfig,使用非对称量化\n", "custom_qconfig = quant.QConfig(\n", " activation=quant.MinMaxObserver.with_args(dtype=torch.quint8, qscheme=torch.per_tensor_affine),\n", " weight=quant.MinMaxObserver.with_args(dtype=torch.qint8, qscheme=torch.per_tensor_affine)\n", ")\n", "\n", "# 应用自定义的 qconfig 到模型\n", "model_fp32.qconfig = custom_qconfig\n", "\n", "# 插入量化准备步骤\n", "quant.prepare(model_fp32, inplace=True)\n", "\n", "# 校准:用示例数据跑一次前向,让 activation observer 统计到激活范围\n", "# 不做会触发 UserWarning: must run observer before calling calculate_qparams\n", "model_fp32(fp32_values.view(1, 6))\n", "\n", "# 量化权重\n", "quant.convert(model_fp32, inplace=True)\n", "\n", "# 打印量化后的权重\n", "quantized_weight = model_fp32.linear.weight()\n", "print(\"量化后的 INT8 模型的权重(int_repr):\\n\", quantized_weight.int_repr())\n", "print(\"量化权重的 scale:\", quantized_weight.q_scale())\n", "print(\"量化权重的 zero_point:\", quantized_weight.q_zero_point())" ] }, { "cell_type": "markdown", "id": "f266a2fb-a305-468e-9d27-795e898ab0a8", "metadata": {}, "source": [ "### 对称量化\n", "\n", "所有方法修改为对称量化。" ] }, { "cell_type": "code", "execution_count": 5, "id": "26be6efc-3c53-4c0c-89ad-f9452cc28882", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FP32 的示例张量: tensor([ 3.0000, -5.5000, 0.0000, 6.0000, -6.0000, 2.5000])\n", "\n", "PyTorch 对称量化后的 INT8 数值: tensor([ 64, -117, 0, 127, -128, 53], dtype=torch.int8)\n", "PyTorch 使用的 scale: 0.0470588244497776 zero_point: tensor([0])\n", "PyTorch 反量化恢复后的 FP32 数值: tensor([ 3.0118, -5.5059, 0.0000, 5.9765, -6.0235, 2.4941])\n", "\n", "=====================\n", "\n", "运行自定义对称量化并比较:\n", "自定义计算的 scale: 0.047058823529411764 zero_point: 0\n", "自定义对称量化后的 INT8 数值: tensor([ 64, -117, 0, 127, -128, 53], dtype=torch.int8)\n", "自定义对称反量化恢复后的 FP32 数值: tensor([ 3.0118, -5.5059, 0.0000, 5.9765, -6.0235, 2.4941])\n", "\n", "=====================\n", "\n", "FP32 模型的权重:\n", " Parameter containing:\n", "tensor([[ 3.0000, -5.5000, 0.0000, 6.0000, -6.0000, 2.5000]],\n", " requires_grad=True)\n", "量化后的 INT8 模型的权重(int_repr):\n", " tensor([[ 64, -117, 0, 127, -128, 53]], dtype=torch.int8)\n", "量化权重的 scale: 0.0470588244497776\n", "量化权重的 zero_point: 0\n" ] } ], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.quantization\n", "\n", "# 假设 FP32 的张量\n", "fp32_values = torch.tensor([3.0, -5.5, 0.0, 6.0, -6.0, 2.5], dtype=torch.float32)\n", "print(f\"FP32 的示例张量: {fp32_values}\\n\")\n", "\n", "# 定义 PyTorch 的量化和反量化函数(对称量化)\n", "def pytorch_quantize_symmetric(fp32_tensor):\n", " # 使用 MinMaxObserver 计算缩放因子,指定 dtype 为 torch.qint8,使用对称量化\n", " q_params = torch.quantization.MinMaxObserver(\n", " dtype=torch.qint8, qscheme=torch.per_tensor_symmetric\n", " )\n", " q_params(fp32_tensor)\n", " scale, zero_point = q_params.calculate_qparams()\n", "\n", " # 量化\n", " int8_tensor = torch.quantize_per_tensor(fp32_tensor, scale.item(), zero_point.item(), dtype=torch.qint8)\n", " return int8_tensor, scale.item(), zero_point\n", "\n", "def pytorch_dequantize(int8_tensor):\n", " # 反量化\n", " fp32_tensor = int8_tensor.dequantize()\n", " return fp32_tensor\n", "\n", "# 量化并获取 PyTorch 结果(对称量化)\n", "int8_tensor, scale, zero_point = pytorch_quantize_symmetric(fp32_values)\n", "print(\"PyTorch 对称量化后的 INT8 数值:\", int8_tensor.int_repr())\n", "print(\"PyTorch 使用的 scale:\", scale, \"zero_point:\", zero_point)\n", "\n", "# 反量化\n", "recovered_fp32_pytorch = pytorch_dequantize(int8_tensor)\n", "print(\"PyTorch 反量化恢复后的 FP32 数值:\", recovered_fp32_pytorch)\n", "\n", "print(\"\\n=====================\\n\")\n", "\n", "# 对比与自定义的量化方式(对称量化)\n", "def custom_quantize_compare_symmetric(fp32_values):\n", " # 获取张量的绝对最大值\n", " x_max = fp32_values.abs().max().item()\n", " \n", " # 定义量化后整数数值的范围\n", " qmin, qmax = -128, 127 # 对应 torch.qint8\n", " \n", " # 使用 PyTorch 的方式计算 scale\n", " scale_custom = x_max / 127.5 # PyTorch源码:scale = max_val_pos / (float(quant_max - quant_min) / 2)\n", " \n", " # 对称量化时,zero_point 固定为 0\n", " zero_point_custom = 0\n", " \n", " print(\"自定义计算的 scale:\", scale_custom, \"zero_point:\", zero_point_custom)\n", " \n", " # 使用 torch 的 round 函数以匹配 PyTorch 的量化行为\n", " def quantize(fp32_tensor, scale, zero_point):\n", " # 计算量化值\n", " int8_tensor = torch.round(fp32_tensor / scale) + zero_point\n", " # 限制在 [qmin, qmax] 范围内\n", " int8_tensor = torch.clamp(int8_tensor, qmin, qmax)\n", " return int8_tensor.to(torch.int8)\n", " \n", " def dequantize(int8_tensor, scale, zero_point):\n", " # 反量化\n", " fp32_tensor = (int8_tensor.float() - zero_point) * scale\n", " return fp32_tensor\n", " \n", " # 量化\n", " int8_values_custom = quantize(fp32_values, scale_custom, zero_point_custom)\n", " print(\"自定义对称量化后的 INT8 数值:\", int8_values_custom)\n", " \n", " # 反量化\n", " recovered_fp32_custom = dequantize(int8_values_custom, scale_custom, zero_point_custom)\n", " print(\"自定义对称反量化恢复后的 FP32 数值:\", recovered_fp32_custom)\n", " \n", " return recovered_fp32_custom # 返回以便后续使用\n", "\n", "# 运行自定义对称量化并比较\n", "print(\"运行自定义对称量化并比较:\")\n", "recovered_fp32_custom = custom_quantize_compare_symmetric(fp32_values)\n", "\n", "print(\"\\n=====================\\n\")\n", "\n", "# 使用 fp32_values 作为线性层参数\n", "\n", "# 定义一个简单的线性模型\n", "class SimpleLinearModel(nn.Module):\n", " def __init__(self, weights, bias=None):\n", " super(SimpleLinearModel, self).__init__()\n", " # 假设输入特征数为6,输出特征数为1\n", " self.linear = nn.Linear(6, 1, bias=False)\n", " # 初始化权重\n", " with torch.no_grad():\n", " self.linear.weight = nn.Parameter(weights.view(1, 6)) # 权重形状为 [out_features, in_features]\n", " \n", " def forward(self, x):\n", " return self.linear(x)\n", "\n", "# 创建 FP32 模型\n", "fp32_weights = fp32_values # [6]\n", "model_fp32 = SimpleLinearModel(fp32_weights)\n", "\n", "# 打印 FP32 模型的权重\n", "print(\"FP32 模型的权重:\\n\", model_fp32.linear.weight)\n", "\n", "# 和之前非对称保持一致方便对比\n", "\n", "import torch.quantization as quant\n", "\n", "# 自定义的 qconfig,使用对称量化\n", "custom_qconfig = quant.QConfig(\n", " activation=quant.MinMaxObserver.with_args(\n", " dtype=torch.quint8, qscheme=torch.per_tensor_symmetric\n", " ),\n", " weight=quant.MinMaxObserver.with_args(\n", " dtype=torch.qint8, qscheme=torch.per_tensor_symmetric\n", " )\n", ")\n", "\n", "# 应用自定义的 qconfig 到模型,结果和model_fp32.qconfig = torch.quantization.get_default_qconfig('fbgemm')一致\n", "model_fp32.qconfig = custom_qconfig\n", "\n", "# 准备量化\n", "quant.prepare(model_fp32, inplace=True)\n", "\n", "# 校准:用示例数据跑一次前向,让 activation observer 统计到激活范围\n", "# 不做会触发 UserWarning: must run observer before calling calculate_qparams\n", "model_fp32(fp32_values.view(1, 6))\n", "\n", "# 量化权重\n", "quant.convert(model_fp32, inplace=True)\n", "\n", "# 打印量化后的权重\n", "quantized_weight = model_fp32.linear.weight()\n", "print(\"量化后的 INT8 模型的权重(int_repr):\\n\", quantized_weight.int_repr())\n", "print(\"量化权重的 scale:\", quantized_weight.q_scale())\n", "print(\"量化权重的 zero_point:\", quantized_weight.q_zero_point())" ] }, { "cell_type": "code", "execution_count": null, "id": "2e89242a-deda-48eb-819b-ea62b2ab40dd", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "ai", "language": "python", "name": "ai" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.12" } }, "nbformat": 4, "nbformat_minor": 5 }