大模型系统优化:怎么计算模型所需的算力、内存带宽、内存容量和通信数据量?
?
需要的总算力 = 6 ? * ? 模型的参数量 ? * ? 训练数据的 token 数
我们可以把神经网络想象成由左边一组神经元和右边一组神经元组成的完全二分图。
选出其中任意一个左边的神经元 l l l 和右边的神经元 r r r:
总共涉及到 3 3 3 次乘法和 3 3 3 次加法的计算操作。
大模型是数据的压缩版本:
区别:
openai提出最优训练数据和模型参数配比:
比如模型参数 1 B(1B = 10亿参数),最优的训练数据量是 20.2 B 的 token。
采用前沿对齐,低资源收集技术:
论文地址:https://arxiv.org/pdf/2305.13230.pdf
在CNN、Vit 这样的模型中,模型训练的epochs可高达300次,而大语言模型的训练 epochs 通常都是 1-4 次。
用重复的tokens训练大语言模型会让模型降低性能。
模型参数规模的增长与模型需要的tokens数量基本是呈线性:
训练需要存储模型参数、存储梯度、优化器状态、正向传播每一层的中间状态,后面几个比参数更大,对模型内存的需求量也更大。
推理的各个输入数据之间并没有关系,不需要存储梯度和优化器状态,正向传播每一层的中间状态也不需要保存下来。
大模型的训练用 4090 是不行的,但推理用 4090 不仅可行,在性价比上还能比 H100 稍高。
4090 如果极致优化,性价比甚至可以达到 H100 的 2 倍。
H100 和 4090 最大的区别就在通信和内存上,算力差距不大。
计算通信数据量的目标是确定在多GPU环境中,数据在不同GPU之间传输时的总量。
在分布式训练或使用多GPU训练时,需要考虑通信开销。通信数据量依赖于:
例如,在数据并行中,每次同步时,每个GPU需要发送其梯度到其他GPU或参数服务器,所以通信数据量大约为 梯度大小乘以GPU数量。
例如,在张量并行中,分布式计算场景,其中包含了多个注意力头,每个头处理一部分数据,并且有必要在GPU之间交换信息以合成最终的结果。
以下是一个简化的方法来估算通信数据量:
首先,我们需要确定每个GPU需要发送或接收的数据量。
这通常涉及到输入和输出矩阵的大小,以及模型的结构。
假设我们有:
在多头注意力机制中,每个头计算得到一个输出矩阵 ( Z h e a d ) ( Z_{head} ) (Zhead?),大小为 ( B × T × E H ) ( B \times T \times \frac{E}{H} ) (B×T×HE?)。
对于所有头,输出矩阵 ( Z ) ( Z ) (Z) 的大小是所有 ( Z h e a d ) ( Z_{head} ) (Zhead?) 拼接起来的,因此大小为 ( B × T × E ) ( B \times T \times E ) (B×T×E)。
如果每个GPU处理 ( H G ) ( \frac{H}{G} ) (GH?) 个头,那么每个GPU计算得到的 ( Z h e a d ) ( Z_{head} ) (Zhead?) 的总大小将是:
[ Z_{GPU} = B \times T \times \frac{E}{H} \times \frac{H}{G} = B \times T \times \frac{E}{G} ]
通信发生在每个GPU需要汇总所有其他GPU上计算的 ( Z h e a d ) ( Z_{head} ) (Zhead?)时。
假设每个GPU都需要从其他 ( G ? 1 ) ( G - 1 ) (G?1) 个GPU接收数据以构建完整的输出矩阵( Z )。
那么每个GPU需要接收的数据量大概是:
[ D a t a r e c v = Z G P U × ( G ? 1 ) = B × T × E G × ( G ? 1 ) ] [ Data_{recv} = Z_{GPU} \times (G - 1) = B \times T \times \frac{E}{G} \times (G - 1) ] [Datarecv?=ZGPU?×(G?1)=B×T×GE?×(G?1)]
同样,每个GPU需要发送它计算的 ( Z G P U ) ( Z_{GPU} ) (ZGPU?) 给其他( G - 1 )个GPU:
[ D a t a s e n d = Z G P U × ( G ? 1 ) = B × T × E G × ( G ? 1 ) ] [ Data_{send} = Z_{GPU} \times (G - 1) = B \times T \times \frac{E}{G} \times (G - 1) ] [Datasend?=ZGPU?×(G?1)=B×T×GE?×(G?1)]
因此,每个GPU的总通信量(发送加接收)将是:
[ D a t a t o t a l = D a t a r e c v + D a t a s e n d = 2 × Z G P U × ( G ? 1 ) ] [ Data_{total} = Data_{recv} + Data_{send} = 2 \times Z_{GPU} \times (G - 1) ] [Datatotal?=Datarecv?+Datasend?=2×ZGPU?×(G?1)]
把 ( Z G P U ) ( Z_{GPU} ) (ZGPU?) 代入:
[ D a t a t o t a l = 2 × B × T × E G × ( G ? 1 ) ] [ Data_{total} = 2 \times B \times T \times \frac{E}{G} \times (G - 1) ] [Datatotal?=2×B×T×GE?×(G?1)]
最后,我们需要把每个参数的大小也考虑进去,所以总的通信数据量(以字节为单位)是:
[ D a t a b y t e s = D a t a t o t a l × b y t e s p a r a m = 2 × B × T × E G × ( G ? 1 ) × b y t e s p a r a m ] [ Data_{bytes} = Data_{total} \times bytes_{param} = 2 \times B \times T \times \frac{E}{G} \times (G - 1) \times bytes_{param} ] [Databytes?=Datatotal?×bytesparam?=2×B×T×GE?×(G?1)×bytesparam?]
这就是在所有GPU之间总共需要传输的数据量。
如果你想要单向通信的数据量,只需要使用 ( D a t a r e c v ) ( Data_{recv} ) (Datarecv?) 或 ( D a t a s e n d ) ( Data_{send} ) (Datasend?) 的值乘以 ( b y t e s p a r a m ) ( bytes_{param} ) (bytesparam?) 即可。
RedPajama开源的复刻llama的预训练数据集,1.21万亿Token
news-commentary 中英平行语料,用于中英间知识迁移: https://data.statmt.org/news-commentary/v15/training/
MNBVC 对标ChatGPT的40T:https://github.com/esbatmop/MNBVC
Pile 基于RedPajama进行清洗去重后得到的高质量数据集 6270亿Token:https://huggingface.co/datasets/cerebras/SlimPajama-627B/tree/main/train
CSL 首个中文科学文献数据集CSL,也有多种NLP任务数据:https://github.com/ydli-ai/CSL
问答偏好数据集:https://huggingface.co/datasets/liyucheng/zhihu_rlhf_3k
OpenAssistant Conversations:https://huggingface.co/datasets/OpenAssistant/oasst1
河狸开源RLHF:https://huggingface.co/datasets/PKU-Alignment/PKU-SafeRLHF-10K
Anthropic hh-rlhf:https://huggingface.co/datasets/Anthropic/hh-rlhf
Facebook Bot Adversarial Dialogues:https://github.com/facebookresearch/ParlAI
AllenAI Real Toxicity prompts:https://github.com/facebookresearch/ParlAI
Stack-exchange:https://huggingface.co/datasets/HuggingFaceH4/stack-exchange-preferences/tree/main
hh-rlhf:https://huggingface.co/datasets/liswei/rm-static-zhTW
AMC竞赛数学题:https://huggingface.co/datasets/competition_math
猿辅导开源小学应用题:https://github.com/SCNU203/Math23k/tree/main
APE210k腾讯爬取的数学问题:https://github.com/Chenny0808/ape210k
线性代数等纯数学计算题:https://huggingface.co/datasets/math_dataset
有推理过程和多项选择的数学问答数据集:https://huggingface.co/datasets/math_qa/viewer/default/test?row=2
高中数学题2-8步推理过程:https://huggingface.co/datasets/qwedsacf/grade-school-math-instructions
Conala来自StackOverflow问题:https://opendatalab.org.cn/CoNaLa/download
code-alpacaGPT生成:https://github.com/sahil280114/codealpaca.git
APPS编程网站收集:https://opendatalab.org.cn/APPS
Lyra Python操作数据库:https://opendatalab.org.cn/Lyra
LAION:https://github.com/LAION-AI/Open-Instruction-Generalist
Ultra Chat 俩个gpt对话:https://github.com/thunlp/UltraChat
Baize:https://github.com/project-baize/baize-chatbot/tree/main/data
InstructDial:https://github.com/prakharguptaz/Instructdial
BlenderBot:https://huggingface.co/datasets/blended_skill_talk
Awesome Open-domain Dialogue Models:https://github.com/cingtiye/Awesome-Open-domain-Dialogue-Models#%E4%B8%AD%E6%96%87%E5%BC%80%E6%94%BE%E5%9F%9F%E5%AF%B9%E8%AF%9D%E6%95%B0%E6%8D%AE%E9%9B%86
SODA:https://realtoxicityprompts.apps.allenai.org/
以下是整理后的中文和英文医疗、对话以及Reward数据集列表,包括数据集的名称、链接和数据条目数:
self-instruct:https://github.com/yizhongw/self-instruct
Standford Alpaca:https://github.com/tatsu-lab/stanford_alpaca
GPT4-for-LLM:https://github.com/Instruction-Tuning-with-GPT-4/GPT-4-LLM
中文翻译Alpaca:https://github.com/hikariming/alpaca_chinese_dataset https://github.com/carbonz0/alpaca-chinese-dataset
Guanaco数据:https://huggingface.co/datasets/JosephusCheung/GuanacoDataset
Vicuna:https://github.com/domeccleston/sharegpt https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/tree/main
MOSS:https://huggingface.co/datasets/Hello-SimpleAI/HC3-Chinese/tree/main
PromptCLUE:https://github.com/CLUEbenchmark/pCLUE
P3:https://huggingface.co/datasets/bigscience/P3
alpaca COT:https://github.com/PhoebusSi/Alpaca-CoT
中文写作:https://github.com/yangjianxin1/Firefly
CSL:https://github.com/ydli-ai/CSL
GPTTeacher:https://github.com/teknium1/GPTeacher/tree/main
alpaca:https://github.com/Instruction-Tuning-with-GPT-4/GPT-4-LLM/tree/main
OIG:https://github.com/BAAI-Zlab/COIG
HC3:https://huggingface.co/datasets/Hello-SimpleAI/HC3-Chinese/tree/main
InstructWild:https://github.com/XueFuzhao/InstructionWild/tree/main/data
BELLE:https://github.com/LianjiaTech/BELLE
TK-Instruct:https://instructions.apps.allenai.org/
Unnatural Instruction:https://github.com/orhonovich/unnatural-instructions
xmtf:https://github.com/bigscience-workshop/xmtf
Amazon COT:https://github.com/amazon-science/auto-cot
alpaca code 20K:https://github.com/sahil280114/codealpaca#data-release
GPT4指令+角色扮演+代码指令:https://github.com/teknium1/GPTeacher
Mol-Instructions 2043K :https://github.com/zjunlp/Mol-Instructions
根据功能和用途,以下是各类基准测试和评估方法的分类整理,包括它们的简介和相关链接:
MMLU (Measuring Massive Multitask Language Understanding): 测试模型在涵盖数百个任务的广泛领域的理解能力。
Link
C-MMLU (Measuring massive multitask language understanding in Chinese): MMLU的中文版本,评估中文大型语言模型在多任务上的理解。
Link
C-Eval (A Multi-Level Multi-Discipline Chinese Evaluation Suite for Foundation Models): 专注于中文的多级别、多学科评估套件,旨在测试基础模型的能力。
Link
KoLA (Carefully Benchmarking World Knowledge of Large Language Models): 旨在详尽测试大型语言模型对世界知识的理解和记忆。
Link
M3KE (A Massive Multi-Level Multi-Subject Knowledge Evaluation Benchmark for Chinese Large Language Models): 用于评估中文大型语言模型在多个层次和科目上的知识。
Link
AGIEval (A Human-Centric Benchmark for Evaluating Foundation Models): 以人为中心的评估基准,用于检验基础模型在多个维度上的性能。
Link
GSM8K (Training Verifiers to Solve Math Word Problems): 包含8000个数学问题,测试模型的问题解决能力。
Link
Maths (Measuring Mathematical Problem Solving With the MATH Dataset): 使用MATH数据集来测量数学问题解决能力。
Link
CSQA (COMMONSENSEQA: A Question Answering Challenge Targeting Commonsense Knowledge): 测试模型在常识知识方面的问答能力。
Link
StrategyQA (Did Aristotle Use a Laptop? A Question Answering Benchmark with Implicit Reasoning Strategies): 测试模型在处理需要隐式推理策略的问题的能力。
Link
MBPP (Program Synthesis with Large Language Models): 用于测试大型语言模型在程序合成方面的能力。
Link
DS-1000 (A Natural and Reliable Benchmark for Data Science Code Generation): 为数据科学代码生成提供一个自然且可靠的基准。
Link
HumanEval (Evaluating Large Language Models Trained on Code): 评估在代码上训练的大型语言模型。
Link
Safety-Prompts: 评估中文大型语言模型的安全性。
Link
CValues (Measuring the Values of Chinese Large Language Models from Safety to Responsibility): 从安全性到责任性,测量中文大型语言模型的价值观。
Link
Vicuna-80 (Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality)*: 一个开源的聊天机器人,其质量接近GPT-4级别。
Link
Open-Assistant-953 (OpenAssistant Conversations – Democratizing Large Language Model Alignment): 旨在民主化大型语言模型校准过程的对话数据集。
Link
LLMs Bias in Evaluation: 探讨大型语言模型在评估过程中的偏见问题。
Link
Multi-Elo (Evaluation Biases for Large Language Models): 分析大型语言模型评估中的偏差。
Link
Reference-Free Evaluation: 不依赖参考答案的评估方法,更多依赖模型的自我评估。
Link
请注意,以上链接和介绍是根据您提供的信息整理的,并且可能包含一些重复的链接。此外,由于我的知识截止日期是2023年4月,一些链接或信息可能已经有所更新或更改。