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

本站现有博文333篇,共被浏览913684

本站已经建立2616天!

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