LlaMA 3 系列博客
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (五)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (六)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (七)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (八)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (九)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (十)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(一)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(二)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(三)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(四)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(五)
你好 GPT-4o!
大模型标记器之Tokenizer可视化(GPT-4o)
大模型标记器 Tokenizer之Byte Pair Encoding (BPE) 算法详解与示例
大模型标记器 Tokenizer之Byte Pair Encoding (BPE)源码分析
大模型之自注意力机制Self-Attention(一)
大模型之自注意力机制Self-Attention(二)
大模型之自注意力机制Self-Attention(三)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (十一)
Llama 3 模型家族构建安全可信赖企业级AI应用之 Code Llama (一)
Llama 3 模型家族构建安全可信赖企业级AI应用之 Code Llama (二)
Llama 3 模型家族构建安全可信赖企业级AI应用之 Code Llama (三)
Llama 3 模型家族构建安全可信赖企业级AI应用之 Code Llama (四)
Llama 3 模型家族构建安全可信赖企业级AI应用之 Code Llama (五)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话(一)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话(二)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话(三)
大模型之深入理解Transformer位置编码(Positional Embedding)
大模型之深入理解Transformer Layer Normalization(一)
大模型之深入理解Transformer Layer Normalization(二)
大模型之深入理解Transformer Layer Normalization(三)
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(一)初学者的起点
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(二)矩阵操作的演练
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(三)初始化一个嵌入层
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(四)预先计算 RoPE 频率
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(五)预先计算因果掩码
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(六)首次归一化:均方根归一化(RMSNorm)
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(七) 初始化多查询注意力
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(八)旋转位置嵌入
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(九) 计算自注意力
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(十) 残差连接及SwiGLU FFN
大模型之一步一步使用PyTorch编写Meta的Llama 3代码(十一)输出概率分布 及损失函数计算
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(一)加载简化分词器及设置参数
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(二)RoPE 及注意力机制
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(三) FeedForward 及 Residual Layers
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(四) 构建 Llama3 类模型本身
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(五)训练并测试你自己的 minLlama3
大模型之使用PyTorch编写Meta的Llama 3实际功能代码(六)加载已经训练好的miniLlama3模型
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (四)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (五)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (六)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (七)
Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (八)
Llama 3 模型家族构建安全可信赖企业级AI应用之 CyberSecEval 2:量化 LLM 安全和能力的基准(一)
Llama 3 模型家族构建安全可信赖企业级AI应用之 CyberSecEval 2:量化 LLM 安全和能力的基准(二)
Llama 3 模型家族构建安全可信赖企业级AI应用之 CyberSecEval 2:量化 LLM 安全和能力的基准(三)
Llama 3 模型家族构建安全可信赖企业级AI应用之 CyberSecEval 2:量化 LLM 安全和能力的基准(四)
Llama 3 模型家族构建安全可信赖企业级AI应用之code shield(一)Code Shield简介
Llama 3 模型家族构建安全可信赖企业级AI应用之code shield(二)防止 LLM 生成不安全代码
Llama 3 模型家族构建安全可信赖企业级AI应用之code shield(三)Code Shield代码示例
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(一) LLaMA-Factory简介
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(二) LLaMA-Factory训练方法及数据集
大模型之Ollama:在本地机器上释放大型语言模型的强大功能
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(三)通过Web UI微调
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(四)通过命令方式微调
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(五) 基于已训练好的模型进行推理
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(六)Llama 3 已训练的大模型合并LoRA权重参数
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(七) 使用 LoRA 微调 LLM 的实用技巧
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(八) 使用 LoRA 微调 LLM 的实用技巧
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(九) 使用 LoRA 微调常见问题答疑
Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(十) 使用 LoRA 微调常见问题答疑
Q5: 如何避免过拟合?
通常,较大的 r 值可能导致更多的过拟合,因为它决定了可训练参数的数量。如果模型出现过度拟合,减小 r 值或增加数据集大小是首先需要探索的选项。此外,你可以尝试增加AdamW或SGD优化器中的权重衰减率,并且可以考虑增加LoRA层的丢弃值dropout 。
尚未在实验中探索的LoRA丢弃dropout 参数(使用了固定的0.05丢弃率),这是未来研究的一个有趣话题。
Q6:其他优化器怎么样?
其他有趣的 LLM 优化器值得未来探索。其中一个优化器是5 月份发布的Sophia:用于语言模型预训练的可扩展随机二阶优化器。
Sophia 是一种二阶优化算法,有望对 LLM 特别有吸引力,因为在 LLM 中 Adam 和 AdamW 通常占主导地位。据该论文称,与 Adam 相比,Sophia 的速度快了 2 倍,使用 Sophia 训练的模型可以获得更好的建模性能。简而言之,Sophia 通过梯度曲率而不是像 Adam 那样通过梯度方差来规范梯度。
Q7:还有哪些因素影响内存使用?
除了精度和量化设置、模型大小、批量大小和可训练的 LoRA 参数数量之外,数据集也会影响内存使用情况。
请注意,Llama 2 的块大小为 4048。例如,如果 LLM 的块大小为 4048 个 token,则它可以一次处理最多 4048 个 token 的序列。但是,较短的训练序列可以节省大量内存,因为可以屏蔽未来的 token。
例如,Alpaca 数据集相对较小,最大长度为 1304 个标记。
当 尝试长度高达 2048 个标记的其他数据集时, 注意到内存使用量从 17.86 GB 增加到了 26.96 GB。
Q8:与完全微调和 RLHF 相比如何?
没有进行任何 RLHF 实验(对于那些好奇的人,在这里介绍了 RLHF ),但确实考虑过完全微调。完全微调至少需要 2 个 GPU,并在 3.5 小时内完成,每个 GPU 使用 36.66 GB。然而,基准测试结果不是很好,可能是由于过度拟合或超参数不理想。
Llama 2 中的RLHF
RLHF 替代方案
问题 9:LoRA 权重可以合并吗?
是的,可以组合多组 LoRA 权重。在训练期间, 将 LoRA 权重与预训练权重分开,并在每次前向传递期间添加它们。
但是,如果 实际应用程序包含多组 LoRA 权重,例如,每个应用程序客户一组,则最好单独存储这些权重以节省磁盘空间。但是,可以在训练后将预训练权重与 LoRA 权重合并以创建单个模型。这样, 就不必在每次前向传递中应用 LoRA 权重:
weight += (lora_B @ lora_A) * scaling
所示的权重更新并保存合并(添加)的权重。
类似地, 可以继续添加多个 LoRA 权重集:
weight += (lora_B_set1 @ lora_A_set1) * scaling_set1
weight += (lora_B_set2 @ lora_A_set2) * scaling_set2
weight += (lora_B_set3 @ lora_A_set3) * scaling_set3
...
还没有做过实验来评估这种方法的性能,但从技术上讲,这已经可以通过Lit-GPT 中提供的scripts/merge_lora.py脚本来实现。
# Copyright Lightning AI. Licensed under the Apache License 2.0, see LICENSE file.
"""This script merges the LoRA weights with the base model"""
from pathlib import Path
from typing import Any, Dict, Optional, Tuple
import lightning as L
import torch
import yaml
from litgpt.lora import GPT, Config, lora_filter, merge_lora_weights
from litgpt.utils import CLI, check_valid_checkpoint_dir
def merge_lora(
checkpoint_dir: Path, pretrained_checkpoint_dir: Optional[Path] = None, precision: Optional[str] = None
) -> None:
"""Merges the LoRA weights with the base model. See ``litgpt finetune lora``.
Creates a new ``lit_model.pth`` file by merging the LoRA weights (``lit_model.pth.lora``)
with the original checkpoint weights.
Args:
checkpoint_dir: Path to the checkpoint directory with trained LoRA weights, which is the output of
``litgpt finetune lora``.
pretrained_checkpoint_dir: Optional path to the checkpoint directory with the weights of the base model
corresponding to the LoRA checkpoint. By default, this will automatically be inferred from the metadata
in the given `checkpoint_dir` directory. Only set this if the base model's checkpoint directory
has moved or was renamed.
precision: Optional precision setting to instantiate the model weights in. By default, this will
automatically be inferred from the metadata in the given ``checkpoint_dir`` directory.
"""
check_valid_checkpoint_dir(checkpoint_dir, model_filename="lit_model.pth.lora")
if pretrained_checkpoint_dir is not None:
check_valid_checkpoint_dir(pretrained_checkpoint_dir)
if (checkpoint_dir / "lit_model.pth").is_file():
print("LoRA weights have already been merged in this checkpoint.")
return
lora_params, pretrained_checkpoint_dir, lora_precision = load_lora_metadata(checkpoint_dir)
precision = precision if precision is not None else lora_precision
fabric = L.Fabric(devices=1, precision=precision, accelerator="cpu")
config = Config.from_file(checkpoint_dir / "model_config.yaml", **lora_params)
with fabric.init_module(), torch.device("meta"):
model = GPT(config)
# we don't care about these to perform merging
model.cos = None
model.sin = None
lora_path = checkpoint_dir / "lit_model.pth.lora"
pretrained_checkpoint = torch.load(str(pretrained_checkpoint_dir / "lit_model.pth"), mmap=True)
lora_checkpoint = torch.load(str(lora_path), mmap=True)
lora_checkpoint = lora_checkpoint.get("model", lora_checkpoint)
# Merge LoRA weights into the base model
pretrained_checkpoint.update(lora_checkpoint)
model.load_state_dict(pretrained_checkpoint, assign=True)
# since LoRA finetuning only saves the LoRA weights, we treat the lora weights dtype as the expected dtype
lora_dtype = next(iter(lora_checkpoint.values())).dtype
model.to(dtype=lora_dtype, device="cpu")
merge_lora_weights(model)
# Remove LoRA parameters and the LoRA linear substring
state_dict = {k.replace("linear.", ""): v for k, v in model.state_dict().items() if not lora_filter(k, v)}
save_path = checkpoint_dir / "lit_model.pth"
torch.save(state_dict, save_path)
fabric.print(f"Saved merged weights to {str(checkpoint_dir / 'lit_model.pth')!r}")
def load_lora_metadata(checkpoint_dir: Path) -> Tuple[Dict[str, Any], Path, Optional[str]]:
hparams_file = checkpoint_dir / "hyperparameters.yaml"
if not hparams_file.is_file():
raise FileNotFoundError(
f"The path {str(hparams_file)!r} is not a valid checkpoint directory. It is missing a"
f" `hyperparameters.yaml` file. Please point to the checkpoint directory that was produced by"
f" the `litgpt/finetune/lora.py` script."
)
with open(hparams_file, "r", encoding="utf-8") as file:
hparams = yaml.safe_load(file)
lora_params = {k: v for k, v in hparams.items() if k.startswith("lora_")}
pretrained_checkpoint_dir = Path(hparams["checkpoint_dir"])
precision = hparams.get("precision")
return lora_params, pretrained_checkpoint_dir, precision
这段代码是一个Python脚本,用于将LoRA(Low-Rank Adaptation)权重与基础模型合并。以下是代码的详细说明:
导入必要的库:
pathlib.Path
用于文件路径操作。
typing
中的 Any
, Dict
, Optional
, Tuple
用于类型注解。
lightning as L
是一个用于简化PyTorch模型训练的库。
torch
是PyTorch库,用于深度学习。
yaml
用于读取YAML配置文件。
litgpt.lora
中包含LoRA相关的类和函数。
litgpt.utils
中包含一些实用工具。
定义 merge_lora
函数:
checkpoint_dir
:包含训练好的LoRA权重的目录路径。
pretrained_checkpoint_dir
:可选参数,基础模型权重的目录路径。
precision
:可选参数,用于指定模型权重的精度。
功能:合并LoRA权重与基础模型权重,创建新的 lit_model.pth
文件。
检查目录有效性:
使用check_valid_checkpoint_dir
函数检查 checkpoint_dir
是否包含 lit_model.pth.lora
文件。
加载LoRA元数据:
调用load_lora_metadata
函数,从 hyperparameters.yaml
文件中加载LoRA参数、预训练模型的目录和精度设置。
初始化模型:
使用L.Fabric
初始化模型训练环境。
从 model_config.yaml
文件加载模型配置,并创建 GPT
模型实例。
加载权重:
加载预训练模型权重和LoRA权重。合并权重:
将LoRA权重合并到预训练模型权重中。更新模型状态字典:
移除LoRA参数和线性子字符串,更新模型的状态字典。保存合并后的权重:
将更新后的模型状态字典保存为lit_model.pth
文件。
定义 load_lora_metadata
函数:
checkpoint_dir
。
功能:从 hyperparameters.yaml
文件中加载LoRA参数、预训练模型的目录和精度设置。
返回值:一个包含LoRA参数、预训练模型目录和精度设置的元组。
整体来看,这段代码是一个自动化脚本,用于将LoRA权重与基础模型权重合并,以便在微调后使用。它通过读取配置文件、加载权重、合并权重和保存新模型权重的步骤来实现这一过程。
Q10:逐层最优秩自适应怎么样?
为了简单起见,我们通常训练深度神经网络时,每一层都使用相同的学习率,而学习率就是我们需要优化的超参数。更进一步说,我们还可以为每个层选择不同的学习率(在 PyTorch 中,这并不太复杂)。然而,在实践中很少这样做,因为它会增加额外的开销,而且在训练深度神经网络时通常已经有太多的参数需要调整。
类似于为不同的层选择不同的学习率, 也可以为不同的层选择不同的 LoRA 等级。我还没有找到任何关于此的实验,但详细介绍此方法的文档是“逐层最佳等级自适应”(也缩写为 LORA)。从理论上讲,这在实践中听起来是个好主意。然而,它也增加了优化超参数时的大量选择。
这本杂志是个人热情项目,不提供直接报酬。但是,对于那些希望支持作者的人,请考虑购买作者的一本书。如果您发现它们有见地且有益,请随时将它们推荐给您的朋友和同事。
如果大家感兴趣,也欢迎购买Gavin大咖的系列新书。
大模型技术分享
《企业级生成式人工智能LLM大模型技术、算法及案例实战》线上高级研修讲座
模块一:Generative AI 原理本质、技术内核及工程实践周期详解
模块二:工业级 Prompting 技术内幕及端到端的基于LLM 的会议助理实战
模块三:三大 Llama 2 模型详解及实战构建安全可靠的智能对话系统
模块四:生产环境下 GenAI/LLMs 的五大核心问题及构建健壮的应用实战
模块五:大模型应用开发技术:Agentic-based 应用技术及案例实战
模块六:LLM 大模型微调及模型 Quantization 技术及案例实战
模块七:大模型高效微调 PEFT 算法、技术、流程及代码实战进阶
模块八:LLM 模型对齐技术、流程及进行文本Toxicity 分析实战
模块九:构建安全的 GenAI/LLMs 核心技术Red Teaming 解密实战
模块十:构建可信赖的企业私有安全大模型Responsible AI 实战
Llama3关键技术深度解析与构建Responsible AI、算法及开发落地实战
1、Llama开源模型家族大模型技术、工具和多模态详解:学员将深入了解Meta Llama 3的创新之处,比如其在语言模型技术上的突破,并学习到如何在Llama 3中构建trust and safety AI。他们将详细了解Llama 3的五大技术分支及工具,以及如何在AWS上实战Llama指令微调的案例。
2、解密Llama 3 Foundation Model模型结构特色技术及代码实现:深入了解Llama 3中的各种技术,比如Tiktokenizer、KV Cache、Grouped Multi-Query Attention等。通过项目二逐行剖析Llama 3的源码,加深对技术的理解。
3、解密Llama 3 Foundation Model模型结构核心技术及代码实现:SwiGLU Activation Function、FeedForward Block、Encoder Block等。通过项目三学习Llama 3的推理及Inferencing代码,加强对技术的实践理解。
4、基于LangGraph on Llama 3构建Responsible AI实战体验:通过项目四在Llama 3上实战基于LangGraph的Responsible AI项目。他们将了解到LangGraph的三大核心组件、运行机制和流程步骤,从而加强对Responsible AI的实践能力。
5、Llama模型家族构建技术构建安全可信赖企业级AI应用内幕详解:深入了解构建安全可靠的企业级AI应用所需的关键技术,比如Code Llama、Llama Guard等。项目五实战构建安全可靠的对话智能项目升级版,加强对安全性的实践理解。
6、Llama模型家族Fine-tuning技术与算法实战:学员将学习Fine-tuning技术与算法,比如Supervised Fine-Tuning(SFT)、Reward Model技术、PPO算法、DPO算法等。项目六动手实现PPO及DPO算法,加强对算法的理解和应用能力。
7、Llama模型家族基于AI反馈的强化学习技术解密:深入学习Llama模型家族基于AI反馈的强化学习技术,比如RLAIF和RLHF。项目七实战基于RLAIF的Constitutional AI。
8、Llama 3中的DPO原理、算法、组件及具体实现及算法进阶:学习Llama 3中结合使用PPO和DPO算法,剖析DPO的原理和工作机制,详细解析DPO中的关键算法组件,并通过综合项目八从零开始动手实现和测试DPO算法,同时课程将解密DPO进阶技术Iterative DPO及IPO算法。
9、Llama模型家族Safety设计与实现:在这个模块中,学员将学习Llama模型家族的Safety设计与实现,比如Safety in Pretraining、Safety Fine-Tuning等。构建安全可靠的GenAI/LLMs项目开发。
10、Llama 3构建可信赖的企业私有安全大模型Responsible AI系统:构建可信赖的企业私有安全大模型Responsible AI系统,掌握Llama 3的Constitutional AI、Red Teaming。
解码Sora架构、技术及应用
一、为何Sora通往AGI道路的里程碑?
1,探索从大规模语言模型(LLM)到大规模视觉模型(LVM)的关键转变,揭示其在实现通用人工智能(AGI)中的作用。
2,展示Visual Data和Text Data结合的成功案例,解析Sora在此过程中扮演的关键角色。
3,详细介绍Sora如何依据文本指令生成具有三维一致性(3D consistency)的视频内容。 4,解析Sora如何根据图像或视频生成高保真内容的技术路径。
5,探讨Sora在不同应用场景中的实践价值及其面临的挑战和局限性。
二、解码Sora架构原理
1,DiT (Diffusion Transformer)架构详解
2,DiT是如何帮助Sora实现Consistent、Realistic、Imaginative视频内容的?
3,探讨为何选用Transformer作为Diffusion的核心网络,而非技术如U-Net。
4,DiT的Patchification原理及流程,揭示其在处理视频和图像数据中的重要性。
5,Conditional Diffusion过程详解,及其在内容生成过程中的作用。
三、解码Sora关键技术解密
1,Sora如何利用Transformer和Diffusion技术理解物体间的互动,及其对模拟复杂互动场景的重要性。
2,为何说Space-time patches是Sora技术的核心,及其对视频生成能力的提升作用。
3,Spacetime latent patches详解,探讨其在视频压缩和生成中的关键角色。
4,Sora Simulator如何利用Space-time patches构建digital和physical世界,及其对模拟真实世界变化的能力。
5,Sora如何实现faithfully按照用户输入文本而生成内容,探讨背后的技术与创新。
6,Sora为何依据abstract concept而不是依据具体的pixels进行内容生成,及其对模型生成质量与多样性的影响。