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

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

本站已经建立2711天!

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