浅析Base-128编码约定

本文介绍了Base-128编码,一种用于VCDIFF的可变大小编码格式。内容包括Base-128编码原理,如何通过字节的低7位进行编码,并用例子展示了编码过程和解码过程,以及在Xdelta3中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在研究的Xdelta3源码中使用了一种叫做VCDIFF的编码格式,为了可移植性,VCDIFF使用了Base-128的编码约定,下面我们就来简单介绍一下Base-128编码约定。

Base-128

它是一种可移植的、可变大小的编码格式,适用于所有8位字节的系统;所谓Base-128编码就是使用一个字节中的低7位进行编码,因为最高有效位(第7位)的值为128,故而得名Base-128。

编码

打个比方,一个32位的unsigned int类型的数值123456789,它的二进制表示为00000111010110111100110100010101,将其按7个二进制单位来分割,如下所示:

0000 | 0111010 | 1101111 | 0011010 | 0010101

由于第一部分的位数全为0,可以舍弃:

0111010 | 1101111 | 0011010 | 0010101

由上可知,一个32位的数值123456789被分割成了4个部分,将这4个部分分别存入4个字节中的低7位,由于一个字节占8位,还剩余一个最高位(MSB)未使用,将其作为标志位,标志位的作用我们后面会说。

我们用一个char*的数组buff[4]来依次接收这4个字节,每个数组成员就是一个字节,buff[0]中存放数值的第一部分'0111010',其占了一个字节中的低7位,剩余1位默认以0填充——'00111010'。以此类推,最终数组buff中所存的内容如下(加粗部分为自动填充的位数):

  • buff[0]:‘00111010’
  • buff[1]:‘01101111’
  • buff[2]:‘00011010’
  • buff[3]:‘00010101’

由于分割后的每个字节中的最高位(MSB)都被自动填充为0,这破坏了数值的完整性和正确性,我们想要获得原本的数值123456789就需要在拼接时舍去最高位(MSB)以保证拼接后得到正确的数值。
同时还有一个问题,那就是在机器码中,这个数值可能是存在于一连串的二进制码中,就如下所示:

…00111010011011110001101000010101…

那正确判断一个数值是由哪几个字节拼接后得到的呢?这就是将每个字节最高位(MSB)用作标志位的作用了,我们将除了最后一个字节的最高位(MSB)都置为1,修改后的数组buff如下:

  • buff[0]:‘10111010’
  • buff[1]:‘11101111’
  • buff[2]:‘10011010’
  • buff[3]:‘00010101’

《RFC3284》的原文如下:
For example, consider the value 123456789, which can be represented with four 7-bit digits whose values are 58, 111, 26, 21 in order from most to least

### DeepSeek-R1 技术架构详解 #### 架构概述 DeepSeek-R1 是一种融合了监督学习与强化学习的混合模型体系结构,旨在提供更为强大和实用的功能[^1]。该架构的设计目标是在保持高效性能的同时实现更高的灵活性。 #### 数据收集与预训练阶段 为了优化初始状态并提高后续迭代效率,DeepSeek-R1 使用了大量的冷启动数据来调整基础版本——即 DeepSeek-V3-Base 模型参数,以此作为强化学习过程的良好开端[^2]。这些高质量的数据集对于构建稳健可靠的机器学习系统至关重要。 #### 蒸馏技术的应用 通过引入先进的蒸馏方法论,DeepSeek-R1 成功实现了从小型化到大型化的多尺度建模能力转换。具体而言,团队已经发布了多个不同大小(从7B至30B)经过精心压缩但仍保留核心功能特性的轻量化变体供公众下载使用[^3]。这种做法既促进了资源的有效分配也加速了开发周期。 #### 组合优势 结合上述要素,最终形成的 DeepSeek-R1 结构能够有效地平衡计算成本与预测精度之间的关系;同时支持广泛的任务场景需求,包括但不限于自然语言处理、图像识别以及特定行业领域内的复杂挑战解决。 ```python # Python伪代码展示部分关键组件初始化逻辑 class DeepSeekR1: def __init__(self, base_model_path="path/to/deepseek_v3_base"): self.base_model = load_pretrained(base_model_path) self.distilled_models = {} def add_distilled_version(self, size_in_billion_params, model_weights): key = f"{size_in_billion_params}B" distilled_model = create_compact_model(size_in_billion_params) distilled_model.load_state_dict(model_weights) self.distilled_models[key] = distilled_model def main(): deepseek_r1_instance = DeepSeekR1() # 假设我们有一个预先准备好的权重文件路径列表 weight_files = ["weights_7b.pth", "weights_30b.pth"] sizes = [7, 30] for i in range(len(sizes)): deepseek_r1_instance.add_distilled_version(sizes[i], torch.load(weight_files[i])) if __name__ == "__main__": main() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值