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

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

本站已经建立2591天!

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