EADST

llama.cpp: Efficient 6-bit Data Packing in an 8-bit Array

This code snippet, adapted from llama.cpp by ggerganov, demonstrates a method for efficiently packing 6-bit values into an 8-bit uint8 array. It involves scaling, clamping, and bitwise manipulation to optimize or compress data, suitable for specific processing or hardware requirements.

// Initialize inverse scale factor with a fixed scaling offset and the maximum scale value.
float iscale = -32.f/max_scale;
// QK_K = 256. Iterate over a subset of the scales array, determined by QK_K divided by 16.
for (int j = 0; j < QK_K/16; ++j) {
    // Scale and round the j-th element of the scales array to the nearest integer.
    int8_t l = nearest_int(iscale * scales[j]);

    // Clamp the value of l to the range [-32, 31] and normalize it to [0, 63].
    l = MAX(-32, MIN(31, l)) + 32;

    // Store the 0-7th scale lower 4 bits of l in y[i].scales if in the first half of the loop.
    if (j < 8) {
        y[i].scales[j] = l & 0xF;
    } 
    // In the second half, store the 8-15th scale lower 4 bits of l into the higher 4 bits of y[i].scales at j-8.
    else {
        y[i].scales[j-8] |= ((l & 0xF) << 4);
    }

    // Shift the higher 4 bits of l to the lower positions.
    l >>= 4;

    // Calculate the index for storing the lower 2 bits(previous l 2 higher bits) of the shifted l and store them in y[i].scales.
    // The specific position in the array is determined by a combination of modulo and division operations.
    y[i].scales[j % 4 + 8] |= (l << (2 * (j / 4)));
}

The key aspects of this code include:

  • Scaling and Normalization: Adjusts the data values to a suitable range for bit manipulation.
  • Bitwise Operations: Utilizes masking (&), shifting (<<, >>), and bitwise OR (|=) to pack data efficiently.
  • Data Optimization: The method packs data into a smaller space, allowing for efficient use of memory and potentially faster processing.

This approach is particularly useful in scenarios where memory optimization is crucial, such as in embedded systems or when dealing with large datasets.

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

本站现有博文339篇,共被浏览1000733次

本站已经建立2711天!

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