大模型参数:temperature, top-p, top-k
是大模型输出文本时用到的三个参数
- temperature控制输出的随机性/创造性,深层是调节概率分布的软性,temperature高时模型的next token的概率分布更柔和均匀,所以生成的结果更多样化、有创造性。反之,较低的temperature分布更尖锐,峰值明显,所以倾向于产生与训练数据类似的结果。
- top-k限制模型在每个步骤中输出最有可能的top-k个标记,减少输出的不连贯、无意义
- top-p根据设定的p值选择一组累计概率超过p的最小单词合集作为输出,使选中的单词数量能够根据下一个单词的概率分布动态的增加或减少
- 这三个参数共同作用,影响模型的行为。例如,当设置Temperature=0.8、Top-K=36以及Top-P=0.7时,模型首先基于上下文计算整个词汇表的完整非规范化对数概率分布。Temperature=0.8意味着每个对数概率除以0.8,这在归一化前有效地增加了模型对其预测的信心。Top-K=36表示选择具有最高频比例对数概率的36个标记。接着,Top-P=0.7在这个Top-K=36集合中应用过滤,按概率从高到低保持排序,直到累积概率达到0.7。最后,将这个过滤后的集合重新归一化,用于后续的采样过程。
- 参考:cloud.tencent.com/developer/a…
base model vs chat model vs instruct model
base模型是在大规模语料上以LM这种形式的预训练任务(预测下一个token)训练得来的,是未经特定任务微调的基础预训练模型,通常用于下一步的微调
chat模型是在base模型上sft+rlhf上微调得来的,专门为了对话系统或聊天机器人设计和优化的,有更好的上下文理解和生成能力。同理,instruct模型是为遵循指令和完成特定任务(回答问题、翻译等)优化的模型,经过指令数据集微调得到。
base模型已经有很强大的能力了,但是需要tuning即sft+强化学习rlhf后得到chat模型,对齐了人类的自然语言解锁base模型的强大能力。
简而言之,base模型很强但是听不懂人话,需要用少量的tuning数据来让它听懂人话,进而和人类对话。instruct模型专为执行具体指令设计,擅长理解和执行用户提供的任务。
ollama vs llama以及llama3的安装
llama是Meta公司的预训练开源语言模型。 large language model applications
Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。支持Run Llama 3.1, Phi 3, Mistral, Gemma 2, and other models。有点像docker?
llama3本地化部署:直接去官网填信息要链接,然后邮件收到下载链接,下载GitHub上的download.sh,在终端运行,就成功了,从huggingface上下载反而被reject,白白等了几天。
模型参数和显存占用
模型参数
- 权重:连接神经元
- 偏置:给神经元响应定基准
- 注意力机制的参数:模型应该关注哪些信息,包括查询矩阵、键矩阵、值矩阵等
- 嵌入矩阵:模型的“字典”,每列代表一个词汇,用一个数来表示这个词
- 隐藏状态初始化参数:初始化时的隐藏状态
参数的存储格式:Float(32bit浮点,4字节)、Half/BF16(16bit浮点,2字节)、int8(8bit整数,1字节)、int4(4bit整数,0.5字节)
大模型对内存的需求
在训练的任何时候,对于每个模型参数,总是需要有足够的 GPU 内存来存储:
- 模型参数复制的字节数x
- 梯度复制的字节数y
- 优化器状态一般为12个字节,主要是参数、方差等的拷贝,会将所有优化器状态保存在 FP32中,以保持稳定训练并避免数值异常。
这意味着,训练时需要如下内存来存储所有的模型状态和过程数据:
(x+y+12 ) * model_size
推理阶段
推理主要的影响因素:
- 有限的上下文: 推理通常处理较短的输入序列,需要较少的内存来存储与较小的文本块相关的激活。
- 无反向传播: 在推理过程中,LLM 不需要保留反向传播的中间值,这是一种用于训练调整参数的技术。这消除了大量的内存开销。
推理阶段所需的内存不会高于相同参数计数和类型的训练阶段所需内存的四分之一。例如,对于一个7B的模型而言,大体上,使用浮点精度需要28GB内存,使用BF16精度需要14GB内存,使用int8精度需要7GB内存。
微调
微调通常包括更长的训练序列来捕捉目标任务的细微差别。当 LLM 处理更多的文本数据时,这将导致更大的激活。反向传播过程需要存储用于梯度计算的中间值,这些中间值用于在训练期间更新模型的权重。与推理相比,这增加了大量的内存负担。
大模型对GPU数量的需求
- 推理 训练阶段的1/8
- 微调
- 预训练 GPU = 模型参数in billions * 18 * 1.25 / GPU size in GB
Scaling law
2020年openai提出来的LLM的scaling law,是大模型的“摩尔定律”,不过24年的今天有一些文章在挑战这个观点。
大模型的最终性能主要与计算量(训练时长)、模型参数量和训练数据量三者的大小相关,而与模型的具体结构(层数/深度/宽度)基本无关。
现在大家遵循的应该是DeepMind在22年提出的Chinchilla Scaling Laws(Chinchilla Scaling Laws:为了使模型达到最佳性能,模型参数量应与训练集的大小成等比例扩张)。
Scaling Law代表的趋势是,如果想要做最好的模型,就得增加数据量和模型规模。因为当数据量和参数量增加,训练和推理成本也会增加;MoE相对Dense模型的优势是训练和推理成本非常低,所以当模型规模特别大的时候,出于成本考虑,你不得不选择MoE。
参考:甲子光年大佬采访 www.jazzyear.com/article_inf…
微软CTO采访 wallstreetcn.com/articles/37…