2024.8.13-算法学习(原创+转载)

一、什么是张量并行(Tensor Parallelism) ?

张量并行(Tensor Parallelism) 是一种分布式矩阵算法。

随着模型越来越大,模型内的矩阵也越来越大。一个大矩阵的乘法可以拆分成多个小矩阵的运算,这个些运算就可以充分利用 GPU 的多核还有多 GPU 来进行分布式计算,从而提高运算速度。

1.1 1D Tensor Parallelism 两种矩阵切分方法

1、使用第一种方法:

这样的切分方法需要一个 Reduce 操作,因为要把各部分的结果求和得到最终结果。

2、使用第二种方法:

这样的切分方法需要一个结果 Concat 拼接起来。但是由于每一部分的计算结果都是最终结果的一部分,所以可以不着急 Reduce 结果,可以直接作为下一次并行计算的输入。

组合切分方法:

如果有多个矩阵进行相乘,相邻之间的矩阵可以一个横切,一个纵切,然后放到不同的 device 上。从而达到并行计算的目的。

分割成多个也是类似的结论。所以对于矩阵相乘来说,如果有 N 个 GPU,完全可以将参数平分到 N 个GPU上,每个 GPU 只负责计算  1/N   的参数。

1.2 举例:FFN 的 Tensor Parallelism

Transformers 的 FFN 层涉及两次矩阵乘法。

其中   g   是激活函数 Gelu。激活函数的非线性导致:

由于有这个激活函数的存在,我们最好按照切分方法2 来进行。因为如果采用第一种,那么需要先进行 Reduce 之后才能执行 Gelu 操作。然后再拆分,再 Reduce。这里有2步 Reduce 操作。

如果采用第二种,则仅需要最后一步进行 Reduce 即可,少了中间的 Reduce 再拆分的工作。

原文地址:京东面试官:“ 什么是张量并行(Tensor Parallelism) ?”

 

二、量化模型格式GPTQ、GGUF

首先介绍一下量化的概念:

        大型语言模型由一堆权重和激活表示。这些值通常由通常的32位浮点(float32)数据类型表示。比特的数量告诉你它可以表示多少个值。量化是指将LLM从其原始Float32表示转换为更小的表示。

        如果我们选择较低的位大小,那么模型就会变得不那么准确,但它表示更少的值,从而降低其大小和内存需求。

tips:对哪些值可以进行量化:

可以对模型参数(weight)、激活值(activation)或者梯度(gradient)做量化。

2.1 GPTQ

GPTQ是一种4位量化的训练后量化(PTQ)方法,主要关注GPU推理和性能。

该方法背后的思想是,尝试通过最小化该权重的均方误差将所有权重压缩到4位。

在推理过程中,它将动态地将其权重去量化为float16,以提高性能,同时保持低内存。

所以一般情况下,我们经常使用一种名为4bit-NormalFloat (NF4)的新格式来实现这一点。

这个数据类型做了一些特殊的技巧,以便有效地表示更大的位数据类型。它包括三个步骤:

①归一化:将模型的权重归一化,以便我们期望权重落在一定范围内。这允许更有效地表示更常见的值。

②量化:将权重量化为4位。在NF4中,量化级别相对于归一化权重是均匀间隔的,从而有效地表示原始的32位权重。

③去量化:虽然权重以4位存储,但它们在计算期间被去量化,从而在推理期间提高性能。

2.2 GGUF

如果你的GPU无法处理如此大的模型,那么可使用针对于使用CPU对模型进行量化的方法。典型的就是GGUF。

参考文章:

[1] A Visual Guide to Quantization - Maarten Grootendorst

[2] Which Quantization Method Works Best for You?

[3] https://zhuanlan.zhihu.com/p/667109491

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值