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

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

本站已经建立2628天!

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