字节推1.58位量化FLUX模型 内存减少7.7倍,性能不减反增!

人工智能(AI)驱动的文本到图像(T2I)生成模型,如DALLE3、Adobe Firefly3等,展现出卓越的生成能力,在现实应用中潜力无限。然而,这些模型通常拥有数十亿的参数,对内存要求极高,这给在移动设备等资源受限的平台上部署带来了巨大挑战。

为了解决这些难题,ByteDance和POSTECH的研究人员探索了对T2I模型进行极低位量化的技术。在众多先进模型中,FLUX.1-dev因其公开可用性和出色的性能成为研究目标。

研究人员通过一种名为1.58位量化的方法,对FLUX模型中的视觉转换器权重进行压缩,使其仅采用 {-1,0, +1} 三个数值。这种量化方法无需访问图像数据,仅依靠FLUX.1-dev模型的自监督即可完成。与BitNet b1.58方法不同,该方法不是从头训练大型语言模型,而是作为一种针对T2I模型的后训练量化解决方案。

在这里插入图片描述
通过这种方法,模型存储空间减少了7.7倍,因为1.58位权重使用2位有符号整数存储,实现了从16位精度的压缩。为了进一步提高推理效率,研究人员还开发了一个为低位计算优化的定制内核。该内核使 推理内存使用量减少了超过5.1倍,并提高了推理延迟。

在GenEval和T2I Compbench基准测试中的评估表明,1.58位FLUX在保持与全精度FLUX模型相当的生成质量的同时,显著提高了计算效率。

具体来说,研究人员将FLUX模型中99.5%的视觉转换器参数(总计119亿)量化为1.58位,从而大幅降低了存储需求。

实验结果表明,1.58位FLUX在T2I CompBench和GenEval数据集上的性能与原始FLUX模型相当。在推理速度方面,1.58位FLUX在低性能GPU(如L20和A10)上表现出更显著的改进。

在这里插入图片描述
总而言之,1.58位FLUX的出现,标志着在使高质量T2I模型能够在内存和延迟受限的设备上实际部署方面迈出了重要一步。

尽管1.58位FLUX在速度改进和高分辨率图像细节渲染方面仍存在一些局限性,但其在提高模型效率和降低资源消耗方面的巨大潜力,有望为未来的研究提供新的思路。

主要改进总结:

模型压缩: 模型存储空间减少了7.7倍。

内存优化: 推理内存使用量减少了5.1倍以上。

性能保持: 在GenEval和T2I Compbench基准测试中,1.58位FLUX保持了与全精度FLUX模型相当的性能。

无需图像数据: 量化过程无需访问任何图像数据,仅依赖模型自身的自监督。

定制内核: 采用了为低位计算优化的定制内核,提升了推理效率。

项目页:https://chenglin-yang.github.io/1.58bit.flux.github.io/

论文地址:https://arxiv.org/pdf/2412.18653

模型地址:https://huggingface.co/papers/2412.18653

### Flux 中的量化模型与实现方法 #### 什么是机器学习模型量化? 机器学习模型量化是指通过降低数值精度来减少模型的存储空间和计算资源消耗的一种优化技术。这种技术可以显著提高理速度并节省内存占用,尤其是在边缘设备上部署大型模型时尤为重要。 在 Flux 的上下文中,支持多种量化方案以适应不同的应用场景。以下是关于 Flux 支持的主要量化模型和技术的具体说明: --- #### Flux 支持的量化模型类别 Flux 提供了三种主要的量化模型格式,每种都有其特定的应用场景和优势[^2]: 1. **FP (Floating Point)** 这是最常见的量化方式之一,允许将高精度浮点数(如 FP32)转换为较低精度的表示形式(如 FP16)。这种方式能够在保持较高精度的同时大幅减小模型体积。 2. **GGUF (General GPU Unoptimized Format)** GGUF 是一种通用化的非优化格式,适用于需要跨平台兼容性的场合。它不依赖于任何特定硬件架构,因此适合用于开发阶段或测试环境下的快速验证。 3. **NF4 (Normal Float 4-bit)** NF4 是一种极端压缩策略,利用仅需四个比特即可表达单个权重的方式极大地减少了数据规模。尽管如此,在某些情况下仍可维持合理的性能水平。 --- #### 如何在 Flux 中应用这些量化技术? 要实现在 Flux 上面加载或者创建经过量化的神经网络结构,则可以根据具体需求选择合适的工具链以及接口函数来进行操作: - 对于已经预训练完成的大规模深度学习框架所导出的标准文件格式(例如 ONNX),可以直接借助官方提供的 API 完成导入过程之后再调用相应的方法对其进行进一步处理; ```python from flux import load_model, quantize model_path = 'path/to/model.onnx' loaded_model = load_model(model_path) quantized_model_fp16 = quantize(loaded_model, target_dtype='fp16') # 转换至半精度浮点数 ``` - 如果是从零构建自定义拓扑结构的话,则可以在设计初期就考虑加入动态固定范围整型运算单元作为替代品从而避免后期复杂的迁移工作;与此同时还可以结合自动微分引擎所提供的梯度裁剪机制共同作用以便更好地控制累积误差传播路径上的长趋势。 --- #### 注意事项 当采用低精度算术逻辑单元(ALU)执行断任务期间可能会引入额外噪声干扰最终预测质量,所以建议针对目标领域仔细评估不同配置组合下所产生的影响程度后再做决策。 --- ### 示例代码片段 下面给出一段简单的 Python 实现示例,演示如何使用 Flux 将一个全连接层网络转化为更紧凑的形式: ```python import jax.numpy as jnp from flux import Sequential, Dense, save_quantized_model # 构建原始未压缩模型 model = Sequential([ Dense(units=128, activation='relu', input_shape=(None, 784)), Dense(units=10, activation='softmax') ]) # 假设我们有一个训练好的权重矩阵 w 和偏置 b w = jnp.array([...]) # 替换为实际值 b = jnp.array([...]) # 替换为实际值 # 应用量化到指定层 quantized_weights = jnp.round(w * 127).astype(jnp.int8) / 127 # 简化版 INT8 表达 save_quantized_model('quantized_model.flux', {'weights': quantized_weights, 'bias': b}) ``` 上述脚本展示了基本流程:先正常搭建前向传播管道图谱,接着提取关键参数并通过适当缩放因子映射回较小区间范围内最后持久化保存下来便于后续重复利用. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值