LLama 405B 技术报告解读

LLama 405B 技术报告解读

果然传的消息都是真的,meta在24号凌晨发布了llama 3的405B版本,这次还是做一个技术报告解读。

值得一提的是,在技术报告的开头,meta特意强调了一个 Managing complexity,大意是管控复杂度。

为什么没用MoE却弄个405B的dense?为什么没用PPO只用DPO?

meta给的解释是:Managing complexity,大意就是这样简单吧…

评测结果如下,这个结果跟当初网上传的那个版本还是有一定出入的,没有到摁着GPT4o锤的程度。

况且,根据GPT4o的速度来看,参数量要远远小于一个405B的dense,高下立判。不过这个无可厚非,毕竟GPT4也挺慢的

图片虽然如此,但是llama3 405B中间有许多实用的trick还是值得我们学习的,整个的画风有点像打比赛刷榜那种程度,做的很细,抠每一个上分点,那么我们来总结下一些亮点吧。

一、预训练

数据部分

  • PII数据(个人隐私数据)清洗、去重、去黄、做模型洗数据(fasttext),混合代码和推理数据,多语言数据

数据配比-打标签

  • 做模型做细粒度的打标签工作,然后根据标签采样,配不同的量去试,最终敲定了:50% 通用数据, 25% 数理数据, 17% 代码数据, 8% 多语言数据。实际这个过程比这个深入很多,据消息,国内某知名大模型团队能做到上千级别的细粒度标签实验。

数据配比-scalinglaw

  • 探索数据配比的scaling law,作者这里没有展开,大概的方法可以看我之前写过的文章,在不同的小模型上做不同的配比实验,然后用来预测大模型的最优配比。

数据退火

  • 作者发现在大模型训练的最后阶段,用高质量的数据学习能提高性能。于是在最后40B数据上,作者逐渐将学习率衰减到0。并且发现,数据退火方法,可以用来筛数据,量少,效果明显,实验更高效。

二、模型结构

  • GQA,8-kv head,超大参数的常规操作,具体参数如下。

图片

  • 126 层,层数多两层,这是一个训练阶段方便流水线并行切分的技巧。
  • 长文拼接时候,使用attention mask防止不同来源的数据串味。样本间穿越在预训练阶段影响不大,以前大家也不在乎,但作者说,在扩长序列时影响很大。
  • 词表大小为128K,英语语料的压缩率有所提高,同样计算量能够过更多数据,并且增强了非英语的能力。这里面中文水平如何,还等着大家测试,不过根据下面实验部分的case study看,这次中文能力还是不错的。
  • RoPE theta 调到了500000,再次感谢苏神。

三、scalinglaw

作者说了现有的scalinglaw通常只预测loss,而不是特定的benchmark上的表现;(2)scalinglaw可能因基于小资源进行的预训练运行而变得没那么可靠。

对此,作者搞了一个两步走方法。

1.先建立计算最优模型在下游任务上的负对数似然与训练FLOPs之间的相关性。

2.利用scalinglaw模型和使用更高计算FLOPs训练的旧模型,将下游任务上的负对数似然与benchmark的准确率指标关联上。作者在这步用了LLama2系列的模型

作者在ARC上使用这个方法,能看出来拟合的还不错

图片四、infra/硬件/网络

  • GPU资源 16K H100 80GB with NVLink,有钱。
  • 专用集群,不是之前的Meta’s AI Research SuperCluster,船新的Meta’s production clusters,240 PB  SSD,7500 台机器,2TB-7TB/s 吞吐,如此高吞吐的存储集群是为了最小化ckpt的IO耗时。

网络部分,专业的机房看管员可以仔细研究下:

  • RoCE,单口400Gb/s

具体的拓扑结构为

  • 3层网络架构,单体24K GPU
  • 最底层1个ToR下2机器配16卡
  • 1 Pod 配192 ToR
  • 3072 张GPU 1:1 收敛比
  • 往上8 个Pod 1:7 的收敛比
  • 由于跨pod 带宽降低,所以模型并行编排和资源调度均需考虑网络架构

负载均衡

  • 两个GPU 间使用16个流,而不是1个,来降低单流流量,以更好地负载均衡
  • 在网络包的头部增加了特殊区域,通过hash 来使得流的选路更加均衡

拥塞控制

  • 在spine 上使用deep-buffer 交换机以适应集合通信导致的短时拥塞,并能够降低慢节点引发持久的拥塞和反压

整体的吞吐如图

图片别的不说,就这万卡集群的吞吐率,要比国内小作坊的16卡微调个小模型都要高。

模型并行策略:

图片* 4D并行,TP + CP + PP + DP,多了一个上下文并行CP,或者称之为序列并行。

  • 使用了FSDP,但是model weight 只拉取一次,以减少反向梯度计算时的weight allgather 通信

PP并行策略改进

  • Batch Size 限制:当前的流水线并行策略 会限制 micro batch 个数为流水线stage 的整数倍,会导致global batch size 和 流水线 stage 相互制约
  • 显存不均衡:第1个stage 会多出很多显存占用,之后逐stage 降低
  • 计算不均衡:最后一层会额外计算 output layer 和 loss,增加了计算量和延时,首尾stage 做了padding

CP并行策略的改进

  • 和Ring CP 一样的在序列维度切分,切分为2*CP 份以负载均衡,但没有用环状通信来overlap 计算和通信,而是基于allgather 的通信。

网络架构感知的并行策略

  • [TP, CP, PP, DP] 的并行策略是针对网络通信优化做专门设计的
  • 开发了显存预估和性能探查工具,用以平衡显存开销和通信性能

数值稳定性

  • FP32 的梯度累加和通信

集合通信

  • 基于NCCL 开发了 NCCLX,在高延迟网络下显著提升性能
  • [TP, CP, PP, DP]  并行策略可能导致PP 和DP 通信跨Pod:原 allgather 和 reducescatter 实现依赖数据chunk 和拷贝,需要大量的小的控制信息的通信,进行额外的拷贝操作,且占用GPU 资源来做通信。对此,llama团队 优化chunk 策略,提升小的控制包的通信优先级。

可用性

不怎么样,运行54天,崩了419次(预期外训练中断),具体的分布如下:

图片网络问题和GPU问题各占一半。

前面提到了那么多保障和优化措施,还是平均每天挂了8次,大约是90%的可用性。只能说操盘万卡集群不容易呀!

五、预训练

  • 三阶段训练法:(1) 初始训练 initial pre-training, (2) 长文训练 long-context pre-training, and (3) 退火训练 annealing

有点像做菜的感觉…作者特意强调了LLama3增加了非英文部分的比例,增加了数理数据,提高逻辑推理能力。看来这次是铁了心的死磕GPT4了。

初始训练:

  • 余弦调度 8 × 10−5 , 8,000 steps热身, 然后在1,200,000步上降到 8 × 10−7
  • 上下文长度和BS缓慢增加,配4M的bs用4,096长度, 再配8M的bs扩展序列长度为 8,192,这个阶段大约是 252M tokens。最终16M的BS

长上下文训练

  • 从l 8K 逐步增加到 128K

退火训练

  • 最后40M token,用128K长度,逐渐线性缩减学习率到0

五、后训练(对齐)

对话数据格式

  • 多种角色的输入输出的设定和特殊token

RM建模

  • 除了好坏标注之外,增加一路人工编辑,作为最优秀的质量样本 edited > chosen > rejected

SFT

  • 拒绝采样
  • 1e-5 学习率训 8.5K to 9K steps

DPO

  • token屏蔽,一些特殊的字符不参与学习
  • DPO+NLL的loss,在IRPO论文里提到的方法,类似正负样本的精细化调权手段

模型融合

  • 权重平均,RM, SFT, or DPO各个阶段独立融合

迭代式训练

  • 同LLama2,最新的模型采样最新的偏好数据,武当总云梯,左脚踩右脚

数据方面

  • 做的特别细,常用的方法如做细粒度标签采样,做模型打各种角度的分,精细的语义去重等
  • 合成数据
  • “model-as-judge”做模型,去做数据质量筛选

数据部分大体的方法大家都用过,各种角度的数据生产在这篇技术报告中讲的非常细,这里建议大家去看看,不管什么什么O,最终还是洗数据,造数据,选数据。

下面是正文全文的部分,powered by kimi

1 引言

基础模型是设计用来支持大量人工智能(AI)任务的通用模型,它们涵盖了语言、视觉、语音等一个或多个模态。这些模型构成了许多现代AI系统的基础。

现代基础模型的发展包括两个主要阶段:(1) 预训练阶段,在这一阶段,模型通过大规模使用简单任务(如下一个词预测或字幕生成)进行训练;(2) 后续训练阶段,在这一阶段,模型被调整以遵循指令、符合人类偏好,并提高特定能力(例如编码和推理)。

业务背景】 在流程工业(如石油化工、电力、冶金等)中,企业通常会采集大量设备、 35 工艺、质量等生产数据,保存为 CSV 或数据库格式。传统的数据分析依赖专业 工程师进行建模与解释,效率低且门槛高。引入自然语言指令驱动的 AI Agent 系统,可以显著提升数据分析的智能化程度,辅助工程师完成数据统计、相关性 分析、机器学习建模和报告生成等任务。。 5.项目说明 【问题说明】  数据分析存在重复性工作(如相关性分析、数据清洗、建模)。  普通用户缺少数据分析和数据建模的能力,无法完成此类任务。 学生需设计一个基于 LLM(大语言模型)的智能 Agent,能够根据用户的自 然语言指令完成工业数据的分析任务,包括统计分析、建模训练与推理,最终自 动生成分析报告。 【用户期望】 最终系统需满足以下用户需求:  数据文件管理功能: 支持上传、查看、删除本地 CSV 数据文件。  统计分析能力: 支持均值、标准差、最大/最小值统计。  数据分析能力: 相关性分析,时滞分析,异常检测。  建模能力: 支持常见机器学习模型,如线性回归、决策树、随机森林等,支持训 练、评估和模型保存。  自然语言指令驱动的分析流程 用户通过自然语言输入需求(如“请对流量与温度做相关性分析”)  LLM 自动生成并使用外置的python解释器执行 Python 分析代码  报告输出功能:系统将结果反馈给 LLM,由其生成简明的分析结论或 报告,自动生成包含图表与文字描述的分析报告。 6.任务要求 【开发说明】 36 本命题产品要求选手深入理解工业场景中设备数据分析与决策支持的实际 需求,发挥大语言模型(LLM)在自然语言理解的技术优势,打造一个面向工业 数据分析的智能 Agent 平台。该平台应支持用户通过自然语言指令统计分析、 建模推理及分析报告自动生成等任务,实现“用户提问 → 智能执行 → 自动 报告”闭环流程,体现工业智能体在实际业务中的可落地性与实用价值。 【技术要求与指标】 1. 指令解析与代码生成模块 o 接入开源大模型,如 ChatGLM、LLaMA、CodeGeeX、deepseek等 o 根据用户指令生成合法的 Python 代码 2. 代码执行引擎 o 安全执行 Python 脚本(使用 exec() 或沙箱环境) o 捕获执行输出、图表或异常信息 3. 结果解释模块 o 将执行结果传回大模型 o 由大模型生成自然语言报告 4. 前端交互界面 o 提供基础的用户输入框、文件管理页面和报告展示区 o 可使用 Web(如 Flask + Vue) 5. 提供系统原型 【提交材料】 (1)项目概要介绍; (2)项目简介 PPT; (3)项目详细方案; (4)项目演示视频; (5)企业要求提交的材料: ①产品使用手册:包括产品功能架构、使用流程图和典型学习示例; ②产品交互演示:对产品的交互过程进行录制; ③项目的详细分工及过程文档:对团队成员的角色、分工、排期和过程进 行记录。 37 (6)团队自愿提交的其他补充材料。 【任务清单】 包括但不限于以下功能: (1)数据文件管理,csv文件的上传,删除 (2)通过Agent实现指定文件数据的统计分析 (3)通过Agent实现指定文件数据的分析,包括相关性分析,时滞分析, 异常检测等。 (4)通过Agent实现数据建模,建立传统的机器学习模型,模型训练和推 理。 (5)通过Agent实现数据分析报告(最好图文并茂) (6)通过Agent实现模型评估报告(最好图文并茂) (7)Agent分析用户意图,生成Python代码,并执行,获取运行结果的能 力。 【开发工具与数据接口】  Python:pandas, matplotlib, scikit-learn /其它  LLM 接口:DeepSeek API / 本地大模型调用接口 / Ollama/其它  Agent框架:LangChain/LangGraph/其它  前端:Flask/其它 + HTML/CSS/JS /其它  安全执行环境:exec()/subprocess + 沙箱机制/其它。 根据需求设计项目
07-20
<think>我们正在设计一个基于LLM的智能Agent系统,用于工业数据分析。系统需要支持自然语言指令,生成并执行Python代码,然后生成报告。以下是实现该系统的关键步骤和组件: 1. **系统架构**: - 前端:使用Flask(Python Web框架)提供简单的用户界面,支持文件上传、指令输入和报告展示。 - 后端:使用Flask处理HTTP请求,调用LLM生成代码,执行代码并返回结果。 - 大语言模型(LLM):可以选择使用DeepSeek API(或本地部署的模型如ChatGLM)作为核心的指令解析和代码生成引擎。 - Agent框架:可以使用LangChain来构建Agent,因为它提供了与LLM交互、工具调用和链式流程的便捷方式。 2. **功能模块**: a. **数据文件管理**: - 提供上传CSV文件、查看文件列表和删除文件的功能。文件存储在服务器的指定目录(例如`./data`)。 - 后端API: - `POST /upload`:上传文件 - `GET /files`:获取文件列表 - `DELETE /file/<filename>`:删除文件 b. **指令解析与代码生成**: - 用户输入自然语言指令(例如“请计算文件data.csv中温度列的平均值”)。 - 系统将指令与当前可用的数据文件信息(如列名)结合,构造提示词(prompt)发送给LLM。 - LLM生成相应的Python代码(使用pandas进行数据分析,matplotlib绘图,scikit-learn建模等)。 c. **代码执行引擎**: - 使用`exec()`执行生成的代码,但为了安全,需要限制执行环境(沙箱)。可以使用`globals`和`locals`字典来限制可用的模块和函数。 - 或者使用`subprocess`在隔离的进程中运行代码,并设置超时。 - 捕获执行过程中的输出(包括文本和图表)。图表可以保存为图片文件(如PNG),然后将图片路径返回。 d. **结果解释与报告生成**: - 将代码执行的结果(文本输出、图表路径、可能的错误信息)再次发送给LLM,要求其生成自然语言的分析报告。 - LLM根据执行结果生成报告,包括文字描述和嵌入图片(在HTML报告中)。 e. **报告展示**: - 前端展示由LLM生成的HTML格式的报告(包含文字和图片)。 3. **安全考虑**: - 限制代码执行环境,禁止访问敏感系统资源。 - 使用白名单机制,只允许导入特定的安全模块(如pandas, numpy, matplotlib, sklearn等)。 - 对用户上传的文件进行安全检查(如文件大小、类型、内容等)。 4. **开发工具与库**: - 后端:Flask, pandas, numpy, matplotlib, scikit-learn, langchain(可选) - LLM接口:deepseek(使用其API,需要API key) - 前端:HTML/CSS/JS,可以使用Bootstrap快速搭建界面。 5. **实现步骤**: a. 搭建Flask应用框架。 b. 实现文件管理功能(上传、查看、删除)。 c. 设计LLM提示词模板,用于生成代码。例如: ``` 你是一个数据分析助手,请根据用户指令生成Python代码。用户上传的文件路径为:{file_path},文件包含的列有:{columns}。 用户指令:{user_query} 请生成代码,要求使用pandas读取文件,并完成相应操作。代码中不要使用文件路径,直接使用变量df表示数据框(因为文件已经读取到df中)。 注意:生成的代码必须是完整的,并且最后要打印结果或保存图表(图表保存为png文件,路径为&#39;./static/figures/figure_{timestamp}.png&#39;)。 ``` d. 实现代码执行函数,能够捕获输出和异常。 e. 实现结果解释模块,将结果和图表路径传给LLM,生成报告。 f. 前端界面:一个简单的表单用于输入指令,一个文件上传表单,一个区域展示报告。 6. **代码执行示例**: 假设用户指令:“请计算温度列的平均值”,生成的代码可能是: ```python import pandas as pd df = pd.read_csv(&#39;data.csv&#39;) mean_temp = df[&#39;温度&#39;].mean() print(f"温度列的平均值为: {mean_temp}") ``` 执行后,捕获输出字符串,然后将其传给LLM生成报告。 7. **报告生成示例**: 将执行输出(如“温度列的平均值为: 25.6”)和用户指令传给LLM,生成报告: “根据您的指令,我们对数据文件中的温度列进行了平均值计算,结果为25.6摄氏度。” 8. **高级分析(如建模)**: 对于建模任务,用户指令可能是:“使用随机森林预测温度”。 生成代码可能包括:数据预处理、划分训练集测试集、训练模型、评估模型(如计算R2分数)并保存模型,同时绘制特征重要性图等。 执行后,将评估结果和图表传给LLM生成报告。 9. **异常处理**: - 代码生成可能出错:LLM可能生成错误代码,需要捕获异常并反馈给用户。 - 执行超时:设置超时时间,避免长时间运行。 10. **前端界面**: - 主页:文件列表(可删除)、上传按钮、指令输入框、提交按钮。 - 报告展示区域(支持显示图片和文字)。 由于时间限制,我们不会实现所有细节,但会构建一个基本可用的原型。 现在,我们将按照要求设计项目,并准备回答相关问题。 §§相关问题§§ 1. 在工业数据分析场景中,如何确保生成的Python代码的安全性,防止恶意代码执行? 2. 如果用户上传的CSV文件包含缺失值或异常值,系统应如何处理? 3. 如何优化LLM生成的代码以提高执行效率,特别是在处理大规模工业数据时? 4. 系统如何支持用户对同一数据集进行多次分析并保存中间结果(如训练好的模型)? 5. 在自然语言指令解析中,如何提高LLM对复杂工业术语和场景的理解准确性?</think>### 基于LLM的工业数据分析智能Agent系统设计 #### 系统架构设计 1. **前端交互层** - 使用Vue.js + Flask构建Web界面 - 功能模块: - 文件管理(CSV上传/查看/删除) - 自然语言指令输入框 - 报告展示区(支持图文混合输出) - 模型管理面板(训练/推理/评估) 2. **Agent核心引擎** ```mermaid graph LR A[用户指令] --> B(LLM指令解析) B --> C{Python代码生成} C --> D[安全执行环境] D --> E[数据分析/建模] E --> F[结果捕获] F --> G[LLM报告生成] G --> H[前端展示] ``` 3. **关键技术实现** - **指令解析**:使用LangChain框架构建提示模板,示例指令处理流程: ```python from langchain.chains import LLMChain prompt_template = """ 你是一个工业数据分析专家,请根据用户指令生成Python代码: 可用库:pandas, sklearn, matplotlib 当前文件:{file_path} 指令:{user_query} 输出要求:返回可执行代码,包含图表保存路径 """ ``` - **安全执行引擎**: ```python def safe_execute(code: str): restricted_globals = {"__builtins__": None} allowed_modules = ["pandas", "numpy", "sklearn", "matplotlib"] for mod in allowed_modules: restricted_globals[mod] = __import__(mod) try: exec(code, restricted_globals) return {"status": "success", "output": restricted_globals.get(&#39;result&#39;, &#39;&#39;)} except Exception as e: return {"status": "error", "message": str(e)} ``` - **机器学习建模流程**: ```python # LLM生成的示例代码 from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import r2_score df = pd.read_csv(&#39;process_data.csv&#39;) X = df[[&#39;pressure&#39;, &#39;flow_rate&#39;]] y = df[&#39;temperature&#39;] model = RandomForestRegressor(n_estimators=100) model.fit(X_train, y_train) predictions = model.predict(X_test) plt.scatter(y_test, predictions) plt.savefig(&#39;correlation_plot.png&#39;) print(f&#39;R2 Score: {r2_score(y_test, predictions)}&#39;) ``` 4. **报告生成机制** - 执行结果结构化: ```json { "metrics": {"MAE": 0.32, "R2": 0.89}, "figures": ["corr_plot.png", "residuals.png"], "data_summary": "检测到5%异常值" } ``` - LLM报告提示词: ``` 请根据JSON数据分析结果生成中文报告: 1. 包含关键指标解读 2. 解释图表含义 3. 给出生产优化建议 4. 使用Markdown格式 ``` #### 典型工作流程 1. 用户上传`pump_sensor.csv` 2. 输入指令:*"分析进口压力与流量相关性,检测异常值并建立预测模型"* 3. Agent生成代码并执行: - 皮尔逊相关系数计算 - Isolation Forest异常检测 - 随机森林回归建模 4. 输出图文报告: ![](correlation_plot.png) **分析结论**:压力与流量呈强正相关(r=0.82),检测到12个异常工况点... #### 创新点 1. **工业语义增强**:在提示词中嵌入领域术语表(如PID图元件名称) 2. **沙箱双保险**:Docker容器 + 模块白名单机制 3. **动态代码校验**:AST语法树分析禁止危险操作(如`os.system`调用) 4. **缓存优化**:自动复用已训练模型避免重复计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值