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

本站现有博文332篇,共被浏览875377

本站已经建立2583天!

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