Project Icon

CoLLiE

通过协作优化和多并行策略,便捷实现大模型训练

CoLLiE工具箱提供高效的大型语言模型训练解决方案,涵盖数据预处理、模型微调、训练监测功能。支持多种并行策略和优化器,兼容MOSS、InternLM、LLaMA等主流模型,适合各类用户快速上手及专业定制。

CoLLiE

CoLLiE (Collaborative Tuning of Large Language Models in an Efficient Way),一个帮助您从零开始训练大模型的完整工具箱。

Github Repo Stars GitHub Doc HuggingFace badge GitHub Workflow Status (with event) GitHub commit activity (branch) GitHub issues

[ 简体中文 ] | [ English ]

新闻

目录

为什么选择CoLLiE

CoLLiE是一个可以帮助您从零开始训练大模型的完整工具箱,它提供了数据预处理、模型微调、模型保存以及训练过程各项指标监测等功能。CoLLiE集成了现有的并行策略、高效参数微调方法和高效优化器,以加快训练的速度,提高训练的质量,降低训练的开销。CoLLiE支持主流的多种模型(如MOSS, InternLM, LLaMA, ChatGLM等),您可以轻松在不同的模型之间切换。此外,CoLLiE提供了丰富的文档,使初学者可以快速入门。同时,CoLLiE还提供了高度可定制化的功能和灵活的配置选项,使有经验的用户能够根据自己的需求进行个性化定制。无论您是初学者还是有经验的专业人士,CoLLiE都可以为您提供满足需求的解决方案。

特点

CoLLiE 基于 DeepSpeedPyTorch,为大型语言模型提供协作式和高效的调优方法。 它主要包括以下四个特点:

完整特性

CoLLiE支持的模型

评测

显存占用

使用张量并行测试了批量大小为 1,序列长度为 2048,梯度累计步数为 2 下显存占用情况,结果如下:

吞吐量

在 A100 和 RTX-3090 上测试了不同批量大小下使用 Adam 优化器的吞吐量,结果如下:

安装

在安装前,你需要确保:

  • PyTorch >= 1.13
  • CUDA >= 11.6
  • Linux OS

PyPI安装

你可以简单地通过PyPI安装,命令如下:

pip install collie-lm

源码安装

git clone https://github.com/OpenLMLab/collie
python setup.py install

Docker安装

使用

快速开始

下面将提供一个使用CoLLiE训练Moss的样例,同时使用LOMO优化器,并且开启ZeRO3来降低显存消耗。

那么,请按照下面的步骤开启你的大模型训练之旅吧~

第一步:导入必要的包

from transformers import AutoTokenizer
from collie.config import CollieConfig
from collie.data import CollieDatasetForTraining
from collie.data import CollieDataLoader
from collie.optim.lomo import Lomo
from collie.controller.trainer import Trainer
from collie.controller.evaluator import EvaluatorForPerplexity, EvaluatorForGeneration
from collie.models.moss_moon import Moss003MoonForCausalLM
from collie.utils.monitor import StepTimeMonitor, TGSMonitor, MemoryMonitor, LossMonitor, EvalMonitor
from collie.metrics import DecodeMetric, PPLMetric
from collie.module import GPTLMLoss
from collie.utils.data_provider import GradioProvider

第二步:设置路径

选择预训练模型为MOSS

pretrained_model = "fnlp/moss-moon-003-sft"

第三步:设置CoLLiE配置

config = CollieConfig.from_pretrained(pretrained_model, trust_remote_code=True)
# 张量并行
config.tp_size = 2
# 数据并行
config.dp_size = 1
# 流水线并行
config.pp_size = 1
# 训练的epoch数量
config.train_epochs = 1
# 每{100}个step进行一次eval
config.eval_per_n_steps = 100
# 每{1}个epoch进行一次eval
config.eval_per_n_epochs = 1 
# 每个GPU的batch_size设置为{16}
config.train_micro_batch_size = 16
# 每次eval的batch_size为{1}
config.eval_batch_size = 1
# 设置DeepSpeed配置
config.ds_config = {
        # 开启FP16
        "fp16": {
            "enabled": True
        },
        "zero_allow_untested_optimizer": True,
        "zero_force_ds_cpu_optimizer": False,
        # 开启ZeRO-3
        "zero_optimization": {
            "stage": 3,
            "offload_optimizer": {
                "device": "cpu",
                "pin_memory": False
            }
        },
        "monitor_config": {
            "enabled": True,
            "tag": "adan",
            "csv_monitor": {
                "enabled": True,
                "output_path": "./ds_logs/"
            }
        }
}

第四步:设置Tokenizer

tokenizer = AutoTokenizer.from_pretrained("fnlp/moss-moon-003-sft", trust_remote_code=True)

第五步:加载数据集

这里自定义一个数据集,数据格式可以提供两种形式,具体请参考文档。

train_dataset = [
    {
        'input': 'Collie is a python package for ',
        'output': 'finetuning large language models.'
    } for _ in range(10000)
]
train_dataset = CollieDatasetForTraining(train_dataset, tokenizer)
eval_dataset = train_dataset[:32]

第六步:加载预训练模型

model = Moss003MoonForCausalLM.from_pretrained(pretrained_model, config=config)

第七步:设置优化器

optimizer = Lomo(
    model,
    lr = 0.001,
    clip_grad_norm = 5.0
)

第八步:添加监视器

monitors = [
    # 每个step用时监测
    StepTimeMonitor(config),
    # TGS(每秒生成token数量监测)
    TGSMonitor(config),
    # 显存使用情况监测
    MemoryMonitor(config),
    # Loss值监测
    LossMonitor(config),
    # Eval结果监测
    EvalMonitor(config)
]

第九步:添加Evaluator

这里添加两个Evaluator,分别用于计算PPL(困惑度:Perplexity)和保存Decode结果。

evaluator_ppl = EvaluatorForPerplexity(
    model = model,
    config = config,
    dataset = eval_dataset,
    monitors = [
        EvalMonitor(config)
    ],
    metrics = {
        'ppl': PPLMetric()
    }
)
evaluator_decode = EvaluatorForGeneration(
    model = model,
    config = config,
    tokenizer = tokenizer,
    dataset = eval_dataset,
    monitors = [
        EvalMonitor(config)
    ],
    metrics = {
        'decode': DecodeMetric()
    }

)

第十步:实例化Trainer

trainer = Trainer(
    model = model,
    config = config,
    loss_fn = GPTLMLoss(-100),
    optimizer = optimizer,
    train_dataset = train_dataset,
    monitors = monitors,
    evaluators = [evaluator_ppl, evaluator_decode],
)
# 开始训练/验证
trainer.train()

最后一步:启动命令行,开始训练!👍

Command CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --rdzv_backend=c10d --rdzv_endpoint=localhost:29402 --nnodes=1 --nproc_per_node=4 finetune_moss_for_training.py

如果你的命令行出现如下的进度条,那么恭喜你,你已经成功开始训练你的大模型!

完整代码请参考examples/finetune_moss_for_training.py

有趣的插件

CoLLiE提供了许多即插即用的插件,下面将介绍Monitor检测器和异步DataProvider,更多插件等待探索和开发...

Monitor监测器

在CollieConfig.ds_config中添加monitor配置,并在Trainer中启用即可在训练过程中打开监测器。

    "monitor_config": {
        # 开启检测器
        "enabled": True,
        # 保存的文件名前缀
        "tag": "adan",
        # 保存文件格式:csv
        "csv_monitor": {
            "enabled": True,
            # 保存文件夹
            "output_path": "./ds_logs/"
        }
    }

启用检测器后,你将在ds_logs文件夹中获取相关的文件,如:

异步DataProvider

你只需要在Trainer中添加:data_provider,即可在训练过程中打开一个异步DataProvider,方便及时Human Eval!

trainer = Trainer(
    model = model,
    config = config,
    loss_fn = GPTLMLoss(-100),
    optimizer = optimizer,
    train_dataset = train_dataset,
    monitors = monitors,
    evaluators = [evaluator_ppl, evaluator_decode],
    # 添加
    data_provider = GradioProvider(tokenizer)
)

更多成功样例和完整教程

CoLLiE提供了完整的 教程。 更多的示例也可在 示例 中查看。

社区

贡献者

引用我们

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号