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

本站现有博文338篇,共被浏览969862次

本站已经建立2681天!

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