Megatron-LM训练GPT2模型

bert源码(pytorch)超详细解读!!! modeling.py 此文章是对transformers的bert源码的解读 # coding=utf-8 from __future__ import absolute_import, division, print_function, unicode_literals import copy import json import logging import math import os import shutil import tarfile import tempfile import sys 阅读详情
AI摘要

本文记录了基于Megatron - LM从0到1完成GPT2模型预训练、评估及推理的过程。包括配置环境时遇到的cuda和torch版本不匹配、编译问题等;准备数据集时出现的类型错误、找不到tokenizer等报错;以及模型训练时单机单卡和分布式训练的情况,还尝试训练llama7B模型。

基于Megatron-LM从0到1完成GPT2模型预训练、模型评估及推理 - 知乎 (zhihu.com)

1、配置环境(太遭罪了)

先讲结论,踩坑太漫长了:

GPU:tesla P100

cuda11.8(可换其他,低点好)

pytorch2.1.0(可换其他2.1还是有点小坑)

 Megatron-LM(tag2.5),最新的transformer_engine用不了,对GPU框架有要求

pytorch镜像选好版本(别用太高,gpu不行,多踩了很多坑),有apex的就行

首先进入到Megatron-LM目录,安装一下依赖,pip install -r requirements.txt

不需要tensorflow

pytorch和cuda要匹配

 安装apex遇到的各种问题:

1、cuda和torch版本不匹配

原来时cuda11.4,torch版本1.12+cu113(torch没有114就离谱)

修改setup.py文件,删除验证匹配的地方即可

或者重下cuda和torch

我都做了但我卡住的地方不是这个原因

2、编译不了c++文件!为什么!(放弃了,没解决)

 from /root/yjy/Megatron-LM/apex/csrc/flatten_unflatten.cpp:1:
  /usr/include/c++/9/cwchar:44:10: fatal error: wchar.h: No such file or directory

gpt让我下载

sudo apt-get update
sudo apt-get install libc6-dev

但是又报错,这个linux-headers-5.4.0-165我不敢乱删 

  放弃了,转而使用镜像!

使用镜像配置环境:(又是曲折的换版本)

 PyTorch Release 21.05 - NVIDIA Docs

下载镜像 ,选好版本(别用太高,不适配,多踩了很多坑),有apex的就行

docker run -dt --name pytorch_yjy --restart=always --gpus all \
--network=host \
--shm-size 8G \
-v /mnt/VMSTORE/yjy/Megatron-LM-GPT:/Megatron-LM-GPT \
-w /Megatron-LM-GPT \
nvcr.io/nvidia/pytorch:23.04-py3 \
/bin/bash
docker exec -it pytorch_yjy bash
缺少amp_C

在这里安装apex成功了,但是模型训练使用的时候又报错了!!!缺少amp_C!!!

解决办法一:(别用,后面还会报错)

用这个版本的apex成功了

NVIDIA/apex at 3303b3e7174383312a3468ef390060c26e640cb1 (github.com)

Megatron-LLaMA/megatron/model/fused_layer_norm.py

NVIDIA/apex at 3303b3e7174383312a3468ef390060c26e640cb1 (github.com)

但是会报没有_six等错误 ,没有inf的错误,这些修改一下就好

解决办法二:

 用 python setup.py install,别用pip

 其他报错:

RuntimeError: ColumnParallelLinear was called with gradient_accumulation_fusion set to True but the custom CUDA extension fused_weight_gradient_mlp_cuda module is not found. To use gradient_accumulation_fusion you must install APEX with --cpp_ext and --cuda_ext. For example: pip install --global-option="--cpp_ext" --global-option="--cuda_ext ." Note that the extension requires CUDA>=11. Otherwise, you must turn off gradient accumulation fusion.RuntimeError
: ColumnParallelLinear was called with gradient_accumulation_fusion set to True but the custom CUDA extension fused_weight_gradient_mlp_cuda module is not found. To use gradient_accumulation_fusion you must install APEX with --cpp_ext and --cuda_ext. For example: pip install --global-option="--cpp_ext" --global-option="--cuda_ext ." Note that the extension requires CUDA>=11. Otherwise, you must turn off gradient accumulation fusion.

 【精选】安装apex报错_install the apex with cuda support (https://github-优快云博客ModuleNotFoundError: No module named ‘fused_layer_norm_cuda‘_我用k-bert的时候报错no module named 'layer_norm,但我是有这个组件的-优快云博客

 增加cuda环境变量:

export CUDA_HOME=/usr/local/cuda-11.3
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH

 报错:21.05没有transformer_engine

 然后完全不知道为什么会报段错误

 又换了22.10,没有段错误但是,缺少te.pytorch.DotProductAttention!!!!安装transformer_engine又是各种报错,是我没看文档,transformer_engine0.6以上才有这个API

23.04环境运行报错:原因就是cuda和gpu和torch版本不匹配

#cuda是否可用;
torch.cuda.is_available()
# 返回gpu数量;
torch.cuda.device_count()
# 返回gpu名字,设备索引默认从0开始;
torch.cuda.get_device_name(0)
# 返回当前设备索引;
torch.cuda.current_device()

尝试1:卸载torch然后重新下载,但是transformer_engine损坏了,链接不到了

尝试2:不要 transformer_engine

vim megatron/core/transformer/custom_layers/transformer_engine.py

不行还是需要用到的,删掉容器重来吧,回到原点的错误

WARNING: Setting args.overlap_p2p_comm to False since non-interleaved schedule does not support overlapping p2p communication

查看算力: 查看NVIDIA显卡计算能力-优快云博客

 

加载预训练模型遇到transformers的问题 问题1: urllib.error.URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] 这是由于ssl验证的问题,在.py 文件的开头导入ssl包,创建默认验证: import ssl ssl._create_default_https_context = ssl._create_unverified_context 问题2: ImportError: cannot import name ‘AutoModelWithHeads’ from ‘ 阅读详情

相关推荐

Llama3本地部署与高效微调入门

为了保持公司在AI(人工智能)开源大模型领域的地位,社交巨头Meta推出了旗下最新开源模型。当地时间4月18日,Meta在官网上宣布公布了旗下最新大模型Llama 3。目前,Llama 3已经开放了80亿(8B)和700亿(70B)两个小参数版本,上下文窗口为8k。Meta表示,通过使用更高质量的训练数据和指令微调,Llama 3比前代Llama 2有了“显著提升”。未来,Meta将推出Llama 3的更大参数版本,其将拥有超过4000亿参数。

水工鸟的专栏 6171

1张2080ti用一天训练GPT2-small效果如何?

1张2080ti用一天训练GPT2-small效果如何?

algorithm learning blog 1456

Megatron-LM GPT2

例如,与在通过 40 Gbps Infiniband 互连连接的四节点集群上使用模型并行相比,使用 ZeRO 驱动的数据并行可以训练 GPT-2 模型快近 4 倍,其中每个节点有四个 NVIDIA 16GB V100 GPU 与 PCI-E 连接. 因此,随着这种性能提升,大型模型训练不再局限于具有超快速互连的 GPU 集群,也可以在带宽有限的适度集群上进行。:ZeRO-2 使模型科学家能够有效地训练多达 130 亿个参数的模型,而无需任何通常需要模型重构的模型并行性(图 2,右下角)。

具身机器人和通用AI 1341

深度学习训练框架(三):Megatron-LM

论文题目:Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism论文机构:NVIDIA近期的研究表明,训练大型transformer模型推动了自然语言处理技术的发展。但由于显存的约束,大模型的训练非常困难。这篇文章提出了一个训练大规模transformer语言模型的技术,实现了一个简单有效的层内模型并行(目前并行训练的方法命名尚未统一,为了避免歧义,业界习惯把GPipe的层间模型并行称为流水线

u013250861的博客 846

C#计算八字

private string[] jq = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };private string[] dz = { "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子" };

m0_72939038的博客 828

高等数学/概率论/数理统计/线性代数/离散数学面试-核心概念-问题理解

特征值与特征向量是线性代数中的概念,它们与线性变换有关。在线性变换中,如果存在非零向量 v ,使得当该向量通过变换后,其方向不变,只是长度发生了变化,那么这个向量 v 就是特征向量。而这个长度变化的比例因子,即变换前后向量长度的比值,称为特征值。数学公式表示:通俗易懂的解释:想象一下,你有一个可以伸缩的橡皮筋,这个橡皮筋可以代表一个向量。现在,你有一个特殊的机器,它可以改变橡皮筋的形状,但不会改变它延伸的方向。当你把橡皮筋放入机器中,机器会拉伸或压缩橡皮筋,但橡皮筋的方向保持不变。

m0_64198455的博客 2292

染色体外环状DNA:肿瘤研究新方向

染色体外环状DNA(ecDNA)是癌症中活化原癌基因扩增的主要方式。区别于常染色体,这类生物大分子主要以环状的形式存在于细胞核当中,长度分布在103-106数量级,无中心粒。ecDNA序列中包含一个或者多个基因与调控元件,结构开放,转录活性强,相比于在棒状染色体结构基因,ecDNA的生物功能活性更强。癌症中,成环的基因区域拷贝数往往增高,而超过一半的高拷贝数事件是ecDNA驱动生成。...

blackjimmy的博客 765

MPU6050运动中断唤醒STM32低功耗休眠模式实战

本文详细介绍了如何使用MPU6050运动中断唤醒STM32低功耗休眠模式的实战方案。通过配置MPU6050的运动检测中断作为STM32的唤醒源,实现设备在静止时进入低功耗Stop模式,运动时快速唤醒,大幅延长电池续航。涵盖硬件连接、软件配置、参数调试等关键步骤,并提供实际应用案例和优化建议。

rgv23456789的博客 703

从谱峰搜索到多项式求根:Root-MUSIC算法原理与MATLAB实践

本文深入解析Root-MUSIC算法在阵列信号处理中的原理与应用,通过多项式求根替代传统MUSIC算法的谱峰搜索,显著提升计算效率和精度。文章详细介绍了算法核心思想、MATLAB实现步骤及工程优化技巧,帮助读者掌握这一高效的DOA估计方法。

weixin_30832143的博客 80

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1026

STM32入门教程:车牌识别

在本文中,我们介绍了如何使用STM32实现车牌识别功能,并提供了详细的代码案例。通过以上步骤,你可以开始开发自己的车牌识别系统了。希望本文对你有所帮助!

2401_85258012的博客 874

YOLOv5 模型剪枝与量化实战:从训练到部署,轻量化模型性能不减(2026终极指南)

YOLOv5 轻量化三部曲稀疏训练:让模型学会“偷懒”,把不用的神经元权重压到 0。手术剪枝:切掉那些权重为 0 的神经元,物理减小模型体积。量化压缩:把剩下的神经元从“高精度浮点”变成“低精度整数”,进一步压榨速度。这套组合拳是 2026 年边缘 AI 部署的标准工业流程。虽然 YOLOv8/v10 原生支持更好的导出,但 YOLOv5 的这套手动控制流程能让你更深刻地理解模型结构,并在极端资源受限的场景下(如 MCU、超低端手机)挖掘出最后的性能潜力。最后建议如果你的项目时间紧迫,优先尝试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 369

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Docker学习
Lay_XZ
博客等级 码龄5年 29粉丝 14原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值