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

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

本站已经建立2621天!

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