EADST

Pytorch GPTQ Dequantizing Function

Pytorch GPTQ Dequantizing Function

Here is the Python code optimizing the dequantization of a GPTQ model to torch FP16 format.

import torch

# Function: Dequantize quantized weights
def dequantization(qweight, qzeros, scales, g_idx, bits=4, group_size=128, device='cuda:0'):
    # Create a tensor for bitwise right shift operation
    wf = torch.tensor(list(range(0, 32, bits)), dtype=torch.int32).unsqueeze(0)

    # Apply bitwise right shift and convert qzeros to the appropriate type
    zeros = torch.bitwise_right_shift(torch.unsqueeze(qzeros, 2).expand(-1, -1, 32 // bits), wf.unsqueeze(0)).to(torch.int16 if bits == 8 else torch.int8)
    torch.bitwise_and(zeros, (2 ** bits) - 1, out=zeros)

    # Reshape the zeros tensor
    zeros = zeros + 1
    zeros = zeros.reshape(-1, 1, zeros.shape[1] * zeros.shape[2])

    # Reshape the scales tensor
    scales = scales.reshape(-1, 1, scales.shape[-1])

    # Similar bitwise right shift operation for qweight and reshape
    weight = torch.bitwise_right_shift(torch.unsqueeze(qweight, 1).expand(-1, 32 // bits, -1), wf.unsqueeze(-1)).to(torch.int16 if bits == 8 else torch.int8)
    torch.bitwise_and(weight, (2 ** bits) - 1, out=weight)
    weight = weight.reshape(-1, group_size, weight.shape[2])

    # Apply dequantization formula and reshape the final weight
    weight = (scales * (weight - zeros))
    weight = weight.reshape(weight.shape[0] * weight.shape[1], weight.shape[2])

    # Return the transposed weight
    return weight.transpose(0, 1)

# Function: Load quantized model and perform dequantization
def get_pytorch_bin():
    # Specify model file path
    path = "./your_model_folder/gptq_model-4bit-128g.bin"

    # Dictionary to store processed weights
    tensors = {}

    # Load the model file
    f = torch.load(path, map_location="cpu")

    # Iterate through keys in the model
    for idx, k in enumerate(f.keys()):
        ori_w = f[k]  # Original weight
        keys = k  # Original key name

        # Skip non-weight entries
        if ".qzeros" in k or ".scales" in k or ".g_idx" in k:
            continue
        if "o_proj.bias" in k or "up_proj.bias" in k or "down_proj.bias" in k or "gate_proj.bias" in k:
            continue

        # Process quantized weights
        if ".qweight" in k:
            qweight = f[k]  # Quantized weight
            qzeros = f[k.replace(".qweight", ".qzeros")]  # Zero points
            scales = f[k.replace(".qweight", ".scales")]  # Scales
            g_idx = f[k.replace(".qweight", ".g_idx")]  # Group index
            ori_w = dequantization(qweight, qzeros, scales, g_idx)  # Perform dequantization
            keys = k.replace(".qweight", ".weight")  # Update key name

        # Add processed weight to the dictionary
        tensors[keys] = ori_w

    # Print the number of processed weights and save as a new model file
    print(len(tensors))
    torch.save(tensors, "./your_model_folder/pytorch_model.bin")

# Main program entry point
if __name__ == '__main__':
    get_pytorch_bin()
相关标签
About Me
XD
Goals determine what you are going to be.
Category
标签云
Firewall OpenCV WebCrawler diffusers Data Diagram Quantize FP16 ONNX GGML Harness Hotel 算法题 COCO Shortcut Markdown FP8 hf BTC SQL 自我改进 uwsgi v0.dev RL Video ModelScope Nginx 签证 GPT4 HuggingFace logger AI RAR Git Google Zip Web Claude LLM Color Quantization TTS Proxy PDF 腾讯云 CEIR Disk Freesound Use Logo Bipartite 阿里云 FP64 Hungarian Algorithm TensorFlow VSCode icon CAM NLP Qwen 关于博主 Interview GoogLeNet Excel SAM WAN OpenAI 云服务器 Jetson Jev Vim Attention 净利润 XML 多进程 Bert PIP tar Bin PDB Safetensors CLAP C++ Password Crawler Statistics 证件照 Tracking Linux FP32 第一性原理 DeepSeek Ubuntu Search Qwen2.5 LeetCode MD5 飞书 递归学习法 SVR Llama Permission scipy Review Breakpoint 音频 VGG-16 Animate Website 财报 Pandas Agent Paper HaggingFace Knowledge 图标 CSV RGB Numpy CUDA XGBoost GPTQ Food Card GIT DeepStream FastAPI Pytorch Conda Datetime UNIX Sklearn FlashAttention Miniforge Tensor Django Dataset Image2Text 图形思考法 Heatmap Pickle Transformers printf Augmentation 域名 CC Rebuttal CTC VPN CV Baidu Magnet Gemma ResNet-50 Clash tqdm Random EXCEL 继承 API网关 LLAMA Translation mmap v2ray Tiktoken API PyCharm SQLite Python Hilton 多线程 论文 Ptyhon Anaconda git-lfs 长期记忆 Docker transformers TensorRT Vmess TSV Windows Template QWEN 强化学习 Paddle Math Pillow Streamlit Jupyter BeautifulSoup Michelin JSON 报税 Base64 git Github BF16 顶会 LaTeX 公式 Qwen2 NLTK ms-swift InvalidArgumentError News Land Plotly torchinfo Mixtral 论文速读 NameSilo ChatGPT Plate SPIE Domain IndexTTS2 PyTorch uWSGI YOLO 版权 UI LoRA Distillation llama.cpp 搞笑 Bitcoin Cloudreve Input OCR
站点统计

本站现有博文339篇,共被浏览1000827次

本站已经建立2711天!

热门文章
文章归档
回到顶部