Levanter: 开源高性能大规模语言模型训练框架

RayRay
Levanter大语言模型机器学习框架分布式训练JAXGithub开源项目

levanter

Levanter简介

Levanter是一个由斯坦福大学CRFM(基础模型研究中心)开发的开源大规模语言模型训练框架。它的名字源自一句名言:"你无法阻止雷暴,但你可以利用电力;你无法指引风向,但你可以调整帆的角度,无论风从哪个方向吹来,都能推动你的船只前进。"这恰如其分地描述了Levanter的设计理念 - 尽管我们无法完全掌控大规模语言模型的训练过程,但我们可以通过精心设计的框架来更好地利用和控制这一过程。

Levanter的三大核心目标是:

  1. 可读性(Legible): 利用命名张量库Haliax编写易于理解和组合的深度学习代码,同时保持高性能。

  2. 可扩展性(Scalable): 支持大规模模型训练,能够在各种硬件(包括GPU和TPU)上进行训练。

  3. 可重现性(Reproducible): 实现逐位确定性,确保相同的配置总是产生相同的结果,即使在中断和恢复的情况下也能保持一致。

Levanter基于JAX、Equinox和Haliax构建,充分利用了这些优秀框架的特性。

Levanter框架示意图

Levanter的主要特性

分布式训练

Levanter支持在TPU(很快也将支持GPU)上进行分布式训练,包括全尺寸数据并行(FSDP)和张量并行。这使得Levanter能够高效地利用大规模计算资源,加速模型训练过程。

兼容性

Levanter与Hugging Face生态系统高度兼容,支持导入和导出模型、分词器和数据集。通过SafeTensors技术,Levanter能够无缝对接Hugging Face的各种资源,极大地增强了其实用性和生态系统集成能力。

性能

在性能方面,Levanter可以与商业支持的框架(如MosaicML的Composer或Google的MaxText)相媲美。这意味着研究人员和开发者可以使用Levanter获得与商业级解决方案相当的训练效率,而无需支付高昂的费用。

缓存式按需数据预处理

Levanter采用在线预处理语料库的方式,但会缓存预处理结果,使得恢复训练变得更快,后续运行也更加高效。一旦缓存的第一部分完成,Levanter就会开始训练,实现了数据处理和模型训练的高效并行。

优化器支持

Levanter支持新型Sophia优化器,相比Adam可以提高2倍的训练速度。同时,它也集成了Optax库,支持AdamW等常用优化器,为用户提供了丰富的优化策略选择。

日志记录

在日志记录方面,Levanter支持多种后端,包括WandB和TensorBoard。用户可以轻松添加新的日志后端,而且Levanter甚至支持在JAX jit编译的函数内部进行日志记录,为实验监控和调试提供了强大的工具。

可重现性

在TPU上,Levanter实现了逐位确定性,这意味着相同的配置总是会产生相同的结果,即使在中断和恢复的情况下也是如此。这对于科研实验的可重复性和结果验证至关重要。

分布式检查点

Levanter通过Google的TensorStore库支持分布式检查点。训练甚至可以在不同数量的主机上恢复,尽管目前这会破坏可重现性。这一特性极大地提高了训练的灵活性和容错能力。

Levanter的安装与使用

安装Levanter

在安装Levanter之前,需要先安装适合您平台的JAX版本。然后,可以通过以下命令安装Levanter:

pip install levanter

如果想使用最新的GitHub版本,可以执行:

git clone https://github.com/stanford-crfm/levanter.git cd levanter pip install -e . wandb login # 可选,用于日志记录

对于同时开发Haliax和Levanter的用户,可以采用以下方式:

git clone https://github.com/stanford-crfm/levanter.git cd levanter pip install -e . cd .. git clone https://github.com/stanford-crfm/haliax.git cd haliax pip install -e . cd ../levanter

训练示例

训练GPT2-nano模型

作为入门示例,可以使用以下命令训练一个GPT2-nano模型:

python -m levanter.main.train_lm --config_path config/gpt2_nano.yaml

这将在WikiText-103数据集上训练一个小型GPT2模型。

使用自定义数据集训练GPT2-small模型

如果想使用自己的数据集训练GPT2-small模型,可以修改配置文件中的数据源:

python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.id openwebtext

还可以指定自定义的分词器和缓存目录:

python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.id openwebtext --data.tokenizer "EleutherAI/gpt-neox-20b" --data.cache_dir "gs://path/to/cache/dir"

如果数据源是URL列表,可以这样指定:

python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.train_urls ["https://path/to/train/data_*.jsonl.gz"] --data.validation_urls ["https://path/to/val/data_*.jsonl.gz"]

自定义配置文件

Levanter使用YAML格式的配置文件来定义模型结构、训练参数等。以下是一个gpt2_small.yaml配置文件的示例:

data: train_urls: - "gs://pubmed-mosaic/openwebtext-sharded/openwebtext_train.{1..128}-of-128.jsonl.gz" validation_urls: - "gs://pubmed-mosaic/openwebtext-sharded/openwebtext_val.{1..8}-of-8.jsonl.gz" cache_dir: "gs://pubmed-mosaic/tokenized/openwebtext/" model: gpt2: hidden_dim: 768 num_heads: 12 num_layers: 12 seq_len: 1024 gradient_checkpointing: true scale_attn_by_inverse_layer_idx: true trainer: tracker: type: wandb project: "levanter" tags: [ "openwebtext", "gpt2"] mp: p=f32,c=bfloat16 model_axis_size: 1 per_device_parallelism: 4 train_batch_size: 512 optimizer: learning_rate: 6E-4 weight_decay: 0.1 min_lr_ratio: 0.1

用户可以根据需要修改这些参数,以适应不同的训练需求。

Levanter支持的模型架构

目前,Levanter支持以下模型架构:

  • GPT-2
  • LLama 1和2
  • Backpacks
  • MosaicML的MPT

未来,Levanter团队计划添加更多的模型架构支持。

使用Llama 1或Llama 2继续预训练

如果想在OpenWebText数据集上继续预训练Llama 1或Llama 2模型,可以使用以下命令:

python -m levanter.main.train_lm --config_path config/llama2_7b_continued.yaml

分布式和云训练

Levanter支持在TPU Cloud VM和CUDA环境中进行分布式训练。对于TPU用户,可以参考TPU入门指南来设置环境并运行Levanter。对于CUDA用户,可以查看CUDA入门指南了解如何在GPU环境中使用Levanter。

贡献与社区

Levanter是一个开源项目,欢迎社区贡献。贡献者可以参考CONTRIBUTING.md文件了解如何参与项目开发。此外,Levanter社区还在Jax LLM Discord的#levanter频道中活跃,欢迎加入讨论。

结语

Levanter作为一个强大而灵活的大规模语言模型训练框架,为研究人员和开发者提供了一个优秀的工具。它的可读性、可扩展性和可重现性使其在竞争激烈的AI领域中脱颖而出。通过支持多种模型架构、优化技术和分布式训练,Levanter为推动大规模语言模型的研究和应用提供了坚实的基础。

随着AI技术的不断发展,像Levanter这样的开源框架将在推动技术民主化和加速创新方面发挥越来越重要的作用。无论您是研究人员、开发者还是AI爱好者,Levanter都为您提供了一个强大的平台,让您能够探索和挑战大规模语言模型的前沿。

🚀 立即开始使用Levanter,成为下一代AI技术革命的一部分吧!

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
��咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多