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

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

本站已经建立2587天!

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