ReplitLM模型系列的指南、代码和配置。
它正在不断更新,以添加更多使用和构建我们的模型的方法。
模型 | 检查点 [CC BY-SA 4.0] | 词汇 [CC BY-SA 4.0] | 代码[阿帕奇2.0] |
---|---|---|---|
重复代码-v1-3b | 下载链接 | 下载 | 回购协议 |
重复代码-v1_5-3b | (即将推出) | (即将推出) | 即将推出 |
2023 年 5 月 2 日: replit-code-v1-3b
我们还为replit-code-v1-3b
模型提供了一个由 GPU 驱动的空间,您可以在其中直接使用该模型!
GPU 驱动的托管演示
所有已发布的 Replit 模型均可在 Replit 组织页面下的 Hugging Face 上找到,并且可与 Hugging Face Transformers 库一起使用。
您可以将 Replit 模型与 Hugging Face Transformers 库一起使用。每个已发布模型的自述文件都包含有关如何将模型与 Hugging Face Transformer 一起使用的说明。使用分词器进行解码时,请确保设置clean_up_tokenization_spaces=False
,并使用自述文件中推荐的后处理。
模型 | 自述文件 |
---|---|
重复代码-v1-3b | 文档 |
我们建议使用 MosaicML 的 LLM Foundry 和 Composer 对 Replit 模型进行进一步的训练、预训练和微调。
我们的 Replit 模型与 LLM Foundry 兼容,并且可以使用最先进的训练技术、架构组件、优化器等,通过 LLM Foundry + Composer 以高度优化的方式进行训练/调整。所有模型、LLM Foundry 和 Composer 训练框架都是基于 Pytorch 的。使用这些,您可以在自己的数据集上训练 Replit 模型。
以下步骤概述了训练模型所需执行的操作,并提供了每个步骤所需的 LLM Foundry 文档部分的链接:
安装LLM Foundry
要开始使用 LLM Foundry,您可以按照 LLM Foundry 自述文件进行操作:
在高级别上,LLM Foundry 的使用方法是定义一个配置 yaml,然后使用像composer train/train.py <configuration_yaml_path> <extra_args>
这样的命令,使用定义的配置 yaml 在 LLM Foundry 存储库中运行train/train.py
训练脚本。 composer train/train.py <configuration_yaml_path> <extra_args>
. script/train/yamls 目录包含用于微调和预保留的示例 YAML。
安装 Replit 模型的其他要求
然后,您必须安装在requirements.txt
中指定的一些其他依赖项。
要使用 LLM Foundry 进行训练,您需要将数据集转换为 Mosaic StreamingDataset 格式。
支持的数据集源类型为 JSON 数据集和 Hugging Face 数据集。
LLM Foundry 中的数据准备文档提供了如何执行此操作的步骤。
在上述步骤中运行convert_dataset_hf.py
或convert_dataset_json.py
时,您必须通过传入参数--tokenizer replit/replit-code-v1-3b
来指定您正在使用Replit tokenizer。关键步骤(由于llm-foundry
的当前实现)是在main()
方法中加载 tokenizer 时,通过将trust_remote_code=True
kwarg 传递给AutoTokenizer.from_pretrained
调用来编辑scripts/data_prep/convert_dataset_hf.py
测试您转换后的数据集
要测试转换后的数据集并检查它是否可以与数据加载器配合使用,您可以按照 LLM Foundry 文档中的测试数据加载器部分进行操作。
要使用 LLM Foundry 进行训练,您需要定义运行配置 yaml。该 yaml 定义了模型、训练数据集、评估数据集和指标、训练参数等。
使用 Replit 模型
对于您定义的用于使用 LLM Foundry 进行训练/调整的任何配置 YAML,您可以通过替换 YAML 中的模型和分词器键来插入和使用 Replit 模型,如下所示:
...
model:
name: hf_causal_lm
pretrained: true
pretrained_model_name_or_path: replit/replit-code-v1-3b
config_overrides:
attn_config:
attn_impl: triton
attn_uses_sequence_id: false
tokenizer:
name: replit/replit-code-v1-3b
kwargs:
model_max_length: ${max_seq_len}
trust_remote_code: true
...
这将为您的配置加载我们的模型及其来自 Hugging Face 的权重。
转换数据集并定义运行配置 yaml 后,您可以使用 LLM Foundry 运行训练。
按照 LLM Foundry 文档中的“如何开始培训”部分进行培训。本节向您展示如何运行单节点和多节点训练。实际上,您将使用像composer train/train.py <configuration_yaml_path> <extra_args>
这样的命令,使用定义的配置yaml 运行LLM Foundry 存储库中的scripts/train/train.py
训练脚本。
Composer 中有一些硬编码逻辑,我们需要绕过这些逻辑才能保存检查点。在scripts/train/train.py
训练脚本中,在模型初始化之后和设置训练数据加载器之前添加行model.tokenizer = None
,即在编写本文时, main()
中的第 147 行。这有效地确保了我们不会用检查点状态保存标记器。我们需要此解决方法,因为当前 Composer 无法使用包含*.py
文件的标记器来处理保存检查点。
您可以根据自己的用例指示调整我们的ReplitLM模型。对于大多数指令调整用例,我们建议从下面的拥抱面部示例开始。除此之外,我们还提供了使用 LLM Foundry 进行指令调优的详细指南。
您可以使用transformers
库在 Alpaca 风格数据集上指示调整replit-code-v1-3b
模型。
为了实现这一点,您将需要一个已经采用羊驼风格格式的指导调整数据集,例如:
开源贡献者 Teknium 已将原始 Alpaca 存储库分叉到 stanford_alpaca-replit 存储库,该存储库已预先配置为与我们的模型一起运行。我们强烈建议您以此为起点。
该存储库包含有关如何设置和运行训练器的说明。此处描述了所需的羊驼风格数据集格式。任何羊驼风格的数据集都可以与训练器配合使用。例如,Code Alpaca 数据集可用于指导使用 Teknium 存储库中的训练脚本调整我们的模型。
您还可以使用 LLM Foundry 进行指令调优。为此,您需要执行以下高级步骤,并根据需要链接到您需要遵循的具体详细信息和步骤:
安装LLM Foundry
要开始使用 LLM Foundry,您可以按照 LLM Foundry 自述文件进行操作:
在高级别上,LLM Foundry 的使用方法是定义一个配置 yaml,然后使用像composer train/train.py <configuration_yaml_path> <extra_args>
这样的命令,使用定义的配置 yaml 在 LLM Foundry 存储库中运行train/train.py
训练脚本。 composer train/train.py <configuration_yaml_path> <extra_args>
. script/train/yamls 目录包含用于微调和预保留的示例 YAML。
安装 Replit 模型的其他要求
然后,您必须安装在requirements.txt
中指定的一些其他依赖项。
可以是以下任意一项:
根据您使用的数据集,您可能需要也可能不需要将数据集格式化为 LLM Foundry 期望的格式。
不需要自定义预处理的数据集
一些数据集(例如mosaicml/dolly_hhrlhf)已经附带了可以立即使用的预处理功能。截至发布时,以下 Hugging Face 数据集附带了预先注册的预处理函数: HuggingFaceH4/databricks_dolly_15k
、 Muennighoff/P3
、 Muennighoff/flan
、 bigscience/P3
、 tatsu-lab/alpaca
。
需要自定义预处理的数据集
如果您不使用上述任何数据集,则需要编写自己的预处理函数并注册它。
对于任何数据集,您需要将每个示例格式化为具有以下键的字典:
formatted_example = { 'prompt' : < prompt_text > , 'response' : < response_text > }
即,每个样本都是一个带有两个键的字典。这是finetuning
数据加载器期望下游的格式。
数据集格式化指南
原始 LLM Foundry 存储库中的数据格式化部分描述了如何执行此操作。
如果您需要创建自定义预处理函数以将数据转换为正确的格式,并且 LLM Foundry 文档中的步骤让您感到困惑,TL;DR 解释如下:
preprocess.py
),只要训练脚本可以导入该文件即可。preprocess_function()
,该函数将数据集中的一个样本作为输入,并根据如何将样本格式化为所需格式的逻辑,返回一个带有上述键prompt
和response
字典。preprocess.py
)和函数(例如preprocess_function()
)。 现在您可以使用数据集来微调 Replit 模型。
指导
原始 LLM Foundry 存储库中的“使用”部分描述了如何使用数据集并微调 Replit 模型。
如果您在该部分中使用选项 1) 或 2),您将根据前两个步骤中的操作修改训练 YAML 中的train_loader
和eval_loader
(如果适用)。如果您使用选项 3)(即流数据集),您将首先使用提示键和响应键将数据集转换为正确的格式,然后将其写入本地 MDS 数据集。之后,您可以修改 YAML 以指向此。