大模型也是有大有小的,它們的大小靠參數數來度量。 GPT-3就有175億個參數,而Grok-1更是不得了,有314億個參數。當然,也有像Llama這樣身材苗條一點的,參數數量只有70億到700億之間。
這裡說的70B可能不是指訓練資料的數量,而是指模型中那些密密麻麻的參數。這些參數就像是一個小小的“腦細胞”,越多就能讓模型更聰明,更能理解數據中那些錯綜複雜的關係。有了這些“腦細胞”,模型在處理任務時可能會表現得更好。 然而,很多時候這些參數,尤其是在大規模的模型中,會帶來一些問題。這些「腦細胞」在處理任務時可能會互相影響,導致模型難以理解資料中那些複雜的關係。有了這些“腦細胞”,模型在處理任務時可能會表現得更好。 因此,在處理任務時,我們需要找到一種方式來管理這些參數之間的關係。常用的方法是透過正則化
這些大模型的參數就像是模型內部的“建築師”,透過複雜的演算法和訓練過程,一點一滴地搭建這個龐大的語言世界。每個參數都有它的作用,它們共同協作,讓模型更準確地理解我們的語言,並給出更合適的答案。
那麼,大模型中的參數是怎麼構成的呢?
大模型參數是其“內部零件”,這些零件各有各的用途,通常包括但不限於以下幾類:
這些參數一般會使用4種表達和儲存的格式:
一般來說,參數的數量是影響大模型效能的主要因素。例如,13B-int8模型通常優於同一體系結構的7B-BF16模型。
對於工程師而言,面對的是大模型訓練或推理時會使用多少的記憶體資源。儘管V100(具備32GB的GPU記憶體)或A100(具備40GB的GPU記憶體)非常強大,大模型仍無法在單一GPU上進行訓練,例如使用Tensorflow或PyTorch。
在模型訓練期間,主要體現為模型狀態和活動過程對記憶體的儲存需求。模型狀態包括由優化器狀態、梯度和參數組成的張量。活動過程中包含在正向通道中創建的任何張量,這些張量是在反向通道中梯度計算所必需的。 為了優化記憶體使用,可以考慮以下幾個方面: 1. 減少模型參數的數量:可以透過減少模型規模或使用稀疏矩陣等技術來減少參數的數量,並降低記憶體使用。 2. 優化器狀態的儲存:可以選擇只儲存必要的優化器狀態,而不是儲存全部狀態。可根據需要選擇性地更新和儲存優化器狀態。 3. 修改張量的資料類型:
在訓練的任何時候,對於每個模型參數,總是需要有足夠的 GPU 記憶體來儲存:
這意味著,訓練時需要如下記憶體來儲存所有的模型狀態和過程資料:(x+y+12 ) * model_size
推理階段利用預先訓練好的LLM 完成文字產生或翻譯等任務。在這裡,記憶體需求通常較低,主要的影響因素:
推理階段所需的記憶體不會高於相同參數計數和類型的訓練階段所需記憶體的四分之一。例如,對於一個7B的模型而言,大體上,使用浮點精度需要28GB內存,使用BF16精度需要14GB內存,使用int8精度需要7GB內存。這個粗略的估計方式可以相應地應用到其他版本的模型。
另外,當根據特定任務調整 LLM 時,微調需要更高的記憶體佔用。微調通常包括更長的訓練序列來捕捉目標任務的細微差別。當 LLM 處理更多的文字資料時,這將導致更大的啟動。反向傳播過程需要儲存用於梯度計算的中間值,這些中間值用於在訓練期間更新模型的權重。與推理相比,這增加了大量的記憶體負擔。
具體而言, 對應基於Transformer的大模型,嘗試計算訓練時所需的內存,其中設:
圖片
其中,对于推理而言, 可以简化为训练阶段的1/8~1/9 , 当然,这些只是一般意义的粗略估计。
理解大模型参数的组成及其对内存和GPU的需求,有助于深入掌握分布式训练在工程实践中所面临的挑战。
采用专为分布式训练设计的框架,例如TensorFlow或PyTorch,可以显著简化分布式训练策略的实施过程,这些框架提供了丰富的工具和API。通过运用梯度累积等技术在更新模型前,或利用梯度压缩等技术减少节点间的数据交换量,可以有效降低通信成本。确定分布式训练的最佳批次大小(即前文提到的参数b)至关重要;b值过小可能增加通信开销,而过大则可能导致内存不足。
LLMOps的重要性日益凸显。定期监控为分布式训练配置的性能指标,调整超参数、分区策略和通信设置以优化性能,是提升训练效率的关键。实施模型的检查点机制并在发生故障时进行有效的恢复,可以确保训练过程在无需从头开始的情况下继续进行。
换句话说,大模型的训练/推理本质上是一个复杂的分布式系统架构工程挑战,例如:
然而,实际上大多数工程师可能并不直接参与具体的训练工作,而是关注在构建应用时可以如何利用大模型的参数。
图片
这里主要关注在使用大模型输出文本时,可以配置的三个参数:Temperature、Top-K和Top-P。
Temperature参数通常被误解为仅控制模型创造性的开关,但其实它更深层的作用是调节概率分布的“软性”。当Temperature值设置较高时,概率分布变得更柔和、均匀,这促使模型生成更多样化、具创造性的输出。反之,较低的Temperature值会使分布更尖锐,峰值更明显,从而倾向于产生与训练数据类似的输出。
Top-K参数用于限制模型在每个步骤中输出最可能的Top-K个标记,通过这种方式可以减少输出中的不连贯或无意义内容。这种策略在维持输出的最有可能的一致性与允许一定程度的创造性抽样之间形成平衡。
Top-P是另一种解码方法,它根据设定的P值(0≤P≤1)来选择一组累积概率超过P值的最小单词集合作为输出。这种方法使得选中的单词数量能够根据下一个单词的概率分布动态地增加或减少。特别地,当P值为1时,Top-P会选择所有单词,相当于从整个分布中抽样,从而产生更加多样的输出;而当P值为0时,Top-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。最后,将这个过滤后的集合重新归一化,用于后续的采样过程。
在工程实践中,理解大模型的参数是有意义的。参数在大模型中起着决定性的作用,它们定义了大模型的行为、性能、实现的成本以及对资源的需求。在工程上理解大模型的参数,就是要把握模型的复杂度、性能和能力之间的关系。从存储和计算的视角合理配置和优化这些参数,可以在实际应用中更好地选择和优化模型,以适应不同的任务需求和资源限制。
【参考资料】
以上是7B? 13B? 175B?解讀大模型的參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!