示例工程大模型人工智能【免费下载链接】LLMs-from-scratchImplement a ChatGPT-like LLM in PyTorch from scratch, step by step项目地址https://gitcode.com/GitHub_Trending/ll/LLMs-from-scratch点击查看免费下载本指南围绕《Build a Large Language Model From Scratch》开源仓库中 appendix-A/01_main-chapter-code/README.md 所编排的附录 APyTorch 入门配套代码展开覆盖张量基础、自动微分、多层神经网络、数据加载、训练循环与 GPU 加速并深入剖析两套多 GPU 分布式训练DDP脚本的实现与运行方式。读完本文你将能够独立运行附录 A 的 Notebook 与脚本理解 DDP 与torchrun两种启动方式的差异并为后续章节从零实现 ChatGPT 类大语言模型打下 PyTorch 基础。一、附录 A 在项目中的定位本仓库LLMs-from-scratch的目标是从零开始、逐步实现一个 ChatGPT 类的大语言模型。附录 A 是整个学习路线的技术前置在进入 ch02 的数据预处理与 ch03 的自注意力机制之前读者需要具备 PyTorch 的基本使用能力。从 appendix-A/README.md 可以看到附录 A 目录分为两部分主章节代码01_main-chapter-code —— 与书中附录 A 章节完全对应的代码补充材料02_setup-recommendations —— Python 安装与环境配置建议指向 setup/README.md。其中主章节代码目录下共包含 5 个文件对应附录 A 的不同学习阶段文件内容运行方式code-part1.ipynb章节 A.1 ~ A.8 的全部代码PyTorch 基础Jupyter Notebookcode-part2.ipynb章节 A.9 的 GPU 代码单卡与多卡训练Jupyter NotebookDDP-script.py多 GPU 演示脚本multiprocessing.spawn启动python DDP-script.pyDDP-script-torchrun.py可选的torchrun版本脚本torchrun --nproc_per_node2 DDP-script-torchrun.pyexercise-solutions.ipynb本章练习题的参考答案Jupyter Notebook之所以多 GPU 部分采用脚本而非 Notebook是因为 Jupyter Notebook 只支持单 GPU 环境无法演示进程级并行这一点在 README 中已明确说明。二、环境准备与依赖安装附录 A 的代码依赖 PyTorch 与 Jupyter。仓库根目录的 requirements.txt 给出了全部依赖其中与附录 A 直接相关的关键条目为torch 2.2.2Intel macOS 上为torch2.2.2,2.6—— 附录 A 所有代码的运行基础jupyterlab 4.0—— 用于运行三个 Notebook 文件。安装方式在仓库根目录执行pip install -r requirements.txt运行环境方面附录 A 的代码设计为可在普通笔记本上运行无需专用硬件。如果机器配有 NVIDIA GPUPyTorch 会自动利用它加速计算。分布式脚本部分则要求机器具备至少 2 块 GPU更多环境配置细节可参考 setup/README.md 及其子目录如 Docker DevContainer 方案见 setup/03_optional-docker-environment。三、Part 1PyTorch 核心基础A.1 ~ A.8code-part1.ipynb 是附录 A 的第一部分完整收录书中 A.1 至 A.8 节的内容。从 Notebook 的章节标记可以梳理出如下学习主线3.1 A.1 什么是 PyTorch开篇先验证运行环境代码以两行核心语句开始import torch print(torch.__version__) # 输出 PyTorch 版本号 print(torch.cuda.is_available()) # 输出 CUDA 是否可用Notebook 中的实际输出示例为2.9.1与FalseCPU 环境而 Part 2 在 GPU 环境Colab2.4.0cu121中该值为True。这一步用于确认后续章节代码可以正常运行。3.2 A.2 理解张量TensorA.2.1 标量、向量、矩阵与张量从一维向量到多维张量的维度概念A.2.2 张量数据类型torch.float32、torch.int64等常用 dtype 及其选择依据这是后续实现 LLM 时关注数值精度的基础A.2.3 常用张量运算包括张量加法如tensor_1 tensor_2结果tensor([5., 7., 9.])、索引、形状变换与广播等基础操作。3.3 A.3 将模型视为计算图本节建立神经网络即计算图的抽象数据沿着图从前向后传播前向传播为 A.4 的自动微分做概念铺垫。理解这一抽象是后续理解大模型前向推理链路如 ch04 中 GPT 模型的层层传递的关键。3.4 A.4 自动微分AutogradPyTorch 通过tensor.backward()自动计算梯度将反向传播的数学推导交给框架完成。附录 A 借此说明我们只需定义前向计算梯度由框架自动累积这正是所有后续章节训练循环能够直接loss.backward()的原因。3.5 A.5 实现多层神经网络本节用torch.nn.Module与torch.nn.Sequential组装多层感知机。仓库的 pkg/llms_from_scratch/appendix_a.py 将该网络抽象为可复用的模块结构与 Notebook 完全一致class NeuralNetwork(torch.nn.Module): def __init__(self, num_inputs, num_outputs): super().__init__() self.layers torch.nn.Sequential( # 1st hidden layer torch.nn.Linear(num_inputs, 30), torch.nn.ReLU(), # 2nd hidden layer torch.nn.Linear(30, 20), torch.nn.ReLU(), # output layer torch.nn.Linear(20, num_outputs), ) def forward(self, x): logits self.layers(x) return logits网络结构为2 → 30 → 20 → 2两个隐藏层各带 ReLU 激活输出层直接返回 logits。附录 A 通过这个小网络演示nn.Module的forward定义方式——该模式在后文 ch04 的GPTModel中被放大到 Transformer 层级。3.6 A.6 设置高效的数据加载器本节引入torch.utils.data.Dataset与DataLoader。同目录下 pkg/llms_from_scratch/appendix_a.py 中对应的ToyDataset实现为class ToyDataset(Dataset): def __init__(self, X, y): self.features X self.labels y def __getitem__(self, index): one_x self.features[index] one_y self.labels[index] return one_x, one_y def __len__(self): return self.labels.shape[0]其配套测试 pkg/llms_from_scratch/tests/test_appendix_a.py 展示了DataLoader的标准用法batch_size2、shuffleTrue、num_workers0。这种 Dataset/DataLoader 二分结构在 ch02 的 GPT 数据加载器中直接延续只是把单个样本从特征向量换成了token 序列。3.7 A.7 典型训练循环标准训练循环的四个步骤在测试 pkg/llms_from_scratch/tests/test_appendix_a.py 中可看到完整实现logits model(features) loss F.cross_entropy(logits, labels) # 1. 前向 计算损失 optimizer.zero_grad() # 2. 清零梯度 loss.backward() # 3. 反向传播 optimizer.step() # 4. 更新参数测试用例中还给出了确定性验证在torch.manual_seed(123)、lr0.5、3 个 epoch 后模型对 5 个训练样本的输出被断言为固定值用于保证附录 A 代码的可复现性。测试中使用的优化器为torch.optim.SGD(model.parameters(), lr0.5)。3.8 A.8 保存与加载模型本节覆盖torch.save/torch.load或 state_dict 方式的模型持久化。这一能力在后续章节反复使用例如 ch05 下载预训练权重、ch06 加载微调后的模型均建立在附录 A 介绍的保存/加载机制之上。四、Part 2GPU 性能优化A.9code-part2.ipynb 收录 A.9 节的 GPU 代码分为三个小节A.9.1 PyTorch 在 GPU 设备上的计算在 GPU 环境中先确认torch.cuda.is_available()为True随后演示张量在 CPU 与 GPU 间的搬运.to()/.cuda()以及 GPU 上的张量运算A.9.2 单 GPU 训练将模型与数据显式搬到 GPUmodel.to(device)、features.to(device)展示单卡训练的标准写法A.9.3 多 GPU 训练进入分布式主题说明为何多卡场景需要独立脚本Notebook 单进程模型无法直接使用多 GPU并引出DDP-script.py与DDP-script-torchrun.py两个脚本。五、多 GPU 训练脚本一DDP-script.pymultiprocessing.spawn 方式DDP-script.py 是附录 A 的分布式训练演示脚本全程使用 PyTorch 原生的DistributedDataParallelDDPAPI由我们自己通过torch.multiprocessing.spawn管理多进程生命周期。5.1 运行方式python DDP-script.py如果你的机器 GPU 数量超过 2 块README 建议通过环境变量限定使用其中 2 块CUDA_VISIBLE_DEVICES0,1 python DDP-script.py注README 原文将该环境变量写作CUDA_VISIBLE_DEVIVES实际生效的标准环境变量名为CUDA_VISIBLE_DEVICES注意末尾的CES。5.2 关键实现剖析1进程组初始化ddp_setupdef ddp_setup(rank, world_size): os.environ[MASTER_ADDR] localhost os.environ[MASTER_PORT] 12345 if platform.system() Windows: os.environ[USE_LIBUV] 0 init_process_group(backendgloo, rankrank, world_sizeworld_size) else: init_process_group(backendnccl, rankrank, world_sizeworld_size) torch.cuda.set_device(rank)要点rank是每个进程的唯一 IDworld_size是参与训练的进程总数这里假设所有 GPU 在同一台机器上故MASTER_ADDR指向localhostMASTER_PORT使用任意空闲端口示例中为12345后端选择因平台而异Linux/macOS 使用 NVIDIA 的nccl后端Windows 使用gloo后端并在 Windows 上关闭 libuv因为 PyTorch Windows 构建未包含其支持torch.cuda.set_device(rank)让每个进程绑定到对应序号的 GPU。2数据集切分DistributedSampler训练DataLoader使用samplerDistributedSampler(train_ds)将 batch 无重叠地切分到各 GPU同时因为采样器接管了顺序shuffle必须设为False。每个 epoch 通过train_loader.sampler.set_epoch(epoch)保证不同 epoch 的洗牌顺序不同。3DDP 包装model DDP(model, device_ids[rank])包装后原始模型可通过model.module访问。前向、反向、优化器更新与单卡完全相同DDP 会在反向传播时自动同步各进程的梯度。4启动入口mp.spawntorch.manual_seed(123) num_epochs 3 world_size torch.cuda.device_count() mp.spawn(main, args(world_size, num_epochs), nprocsworld_size)mp.spawn会为每块 GPU 启动一个进程nprocsworld_size并自动把rank作为main的第一个参数传入。5内置的 GPU 数量保护脚本默认数据集只有 5 个训练样本、batch_size2因此只适用于 2 块 GPU当 GPU 多于 2 块时compute_accuracy中分母为 0 会触发ZeroDivisionError脚本捕获后给出提示要么用CUDA_VISIBLE_DEVICES0,1限定 2 卡要么取消注释第 103~107 行的数据扩充代码factor 4用带噪声的重复样本把数据集扩大 4 倍从而支持最多 8 卡训练。六、多 GPU 训练脚本二DDP-script-torchrun.pytorchrun 方式DDP-script-torchrun.py 是前者的可选替代版通过 PyTorch 官方启动器torchrun运行torchrun --nproc_per_node2 DDP-script-torchrun.pytorchrun的核心优势是自动处理分布式初始化包括多节点协调省去了手动mp.spawn与进程生命周期管理使启动过程更简洁。两者在模型、数据与训练逻辑上完全一致差异集中在两点1初始化更健壮ddp_setup只在环境变量缺失时才设置MASTER_ADDR/MASTER_PORT因为torchrun会自动注入这些变量if MASTER_ADDR not in os.environ: os.environ[MASTER_ADDR] localhost if MASTER_PORT not in os.environ: os.environ[MASTER_PORT] 123452rank/world_size 从环境变量读取脚本不再通过mp.spawn接收参数而是读取torchrun注入的环境变量if WORLD_SIZE in os.environ: world_size int(os.environ[WORLD_SIZE]) else: world_size 1 if LOCAL_RANK in os.environ: rank int(os.environ[LOCAL_RANK]) elif RANK in os.environ: rank int(os.environ[RANK]) else: rank 0并仅在rank 0时打印 PyTorch 版本与 CUDA 信息避免每个 GPU 进程重复输出。相应地ZeroDivisionError提示信息也改为torchrun --nproc_per_node2 DDP-script-torchrun.py。七、两种启动方式的对比与选择维度python DDP-script.pytorchrun --nproc_per_node2 DDP-script-torchrun.py进程管理代码内mp.spawn自行管理torchrun启动器统一管理分布式初始化脚本内手动设置MASTER_ADDR/MASTER_PORT启动器自动注入环境变量多节点支持需自行处理自动协调rank/world_size 来源mp.spawn自动传参读取环境变量WORLD_SIZE/LOCAL_RANK/RANK适用场景理解 DDP 底层原理生产环境与多节点训练的推荐方式从学习角度先跑通DDP-script.py理解一个进程一张卡的底层模型再切换到torchrun体验更简洁的工程化启动是附录 A 推荐的进阶路径。这套 DDP 模式在仓库的 ch05/10_llm-training-speed/02_opt_multi_gpu_ddp.py 中被直接复用用于加速第 5 章的大模型预训练。八、练习与验证资源exercise-solutions.ipynb附录 A 全部练习题的参考答案建议先独立完成再对照pkg/llms_from_scratch/appendix_a.py将NeuralNetwork与ToyDataset封装为可导入模块的版本方便在后续章节中复用pkg/llms_from_scratch/tests/test_appendix_a.py对上述模块的确定性测试验证了训练循环的数值可复现性3 个 epoch 后对 5 个样本的输出与固定期望值逐元素相等可作为训练循环写对了没有的自动化判据。九、小结从附录 A 通往 LLM 实现附录 A 的全部代码围绕一条明确的主线组织张量 → 计算图 → 自动微分 → 神经网络 → 数据加载 → 训练循环 → 模型持久化 → GPU 加速。这条主线中的每一个组件都会在本仓库后续章节中被放大到 LLM 尺度nn.Sequential堆叠线性层 激活函数对应 ch04 中 Transformer block 的堆叠Dataset/DataLoader 模式对应 ch02 的 GPT 数据加载器训练循环四步法贯穿 ch05 的预训练与 ch06、ch07 的微调DDP 多卡训练延伸至 ch05/10_llm-training-speed 的训练加速专题。按照附录 A 的顺序依次运行 code-part1.ipynb、code-part2.ipynb再在两卡机器上跑通 DDP-script.py 与 DDP-script-torchrun.py你就具备了进入正文章节、从零构建大语言模型所需的全部 PyTorch 能力。赞分享示例工程大模型人工智能【免费下载链接】LLMs-from-scratchImplement a ChatGPT-like LLM in PyTorch from scratch, step by step项目地址https://gitcode.com/GitHub_Trending/ll/LLMs-from-scratch点击查看免费下载相关推荐LLMs-from-scratch附录D训练循环增强功能实现LLMs from scratch附录D训练循环增强功能实现 引言训练循环优化的必要性 在大型语言模型LLM训练过程中基础的训练循环往往难以满足实际需示例工程大模型人工智能3步快速上手如何用PakePlus轻松将网页变身为桌面应用3步快速上手如何用PakePlus轻松将网页变身为桌面应用 PakePlus是一款革命性的轻量级打包工具能够帮助开发者在几分钟内将任何网页、HTML、Vue开发工具桌面应用移动开发跨平台PyTorch Vision分布式训练指南多GPU训练的最佳实践PyTorch Vision分布式训练指南多GPU训练的最佳实践 PyTorch Vision 是一个基于 PyTorch 的强大计算机视觉库提供了各种先进计算机视觉深度学习图像处理数据集创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考