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

本站现有博文336篇,共被浏览941111

本站已经建立2651天!

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