OLMo - OLMo 的建模、训练、评估和推理代码

Created at: 2023-02-21 06:29:43
Language: Python
License: Apache-2.0
OLMo 标志

OLMo:开放语言模型

GitHub 许可证 GitHub 版本 论文网址

OLMo 是一个用于训练和使用 AI2 最先进的开放语言模型的存储库。 它是由科学家建造的,为科学家服务。

安装

首先,根据特定于你的操作系统的说明安装 PyTorch

要从源代码安装(建议用于训练/微调),请运行:

git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]

否则,你可以使用以下命令直接从 PyPI 自行安装模型代码:

pip install ai2-olmo

模型概述

目前发布的OLMo系列中的核心模型是(均在Dolma数据集上训练):

训练令牌 上下文长度
OLMo 1B 3万亿 2048
OLMo 7B系列 2.5万亿 2048
OLMo 7B 双床 2T 2 万亿 2048

微调

要使用我们的训练器对 OLMo 模型进行微调,你首先需要通过标记化数据集并将标记 ID 保存到平面 numpy 内存映射数组来准备数据集。有关 Tulu V2 数据集的示例,请参阅 scripts/prepare_tulu_data.py,该数据集可以轻松针对其他数据集进行修改。

接下来,准备训练配置。configs/ 目录中有许多示例可以用作起点。最重要的是确保模型参数(配置中的字段)与你开始的检查点匹配。为了安全起见,你始终可以从模型检查点附带的配置开始。至少需要对配置进行以下更改,或从命令行提供相应的覆盖:

model

  • 更新以指向要从中开始的检查点。
    load_path
  • 设置为 。
    reset_trainer_state
    true
  • 更新以指向你生成的文件。
    data.paths
    token_ids.npy
  • (可选)更新以指向你生成的文件,除非你不需要对丢失进行特殊屏蔽。
    data.label_mask_paths
    label_mask.npy
  • 更新以添加/删除在环评估。
    evaluators

对训练配置感到满意后,可以通过 启动训练作业。例如:

torchrun

torchrun --nproc_per_node=8 scripts/train.py {path_to_train_config} \
    --data.paths=[{path_to_data}/input_ids.npy] \
    --data.label_mask_paths=[{path_to_data}/label_mask.npy] \
    --load_path={path_to_checkpoint} \
    --reset_trainer_state

注意:仅当你没有在配置中更新这些字段时,才需要传递 CLI 覆盖。

--reset_trainer_state

推理

你可以利用我们的 HuggingFace 集成在 olmo 检查点上运行推理:

from hf_olmo import * # registers the Auto* classes

from transformers import AutoModelForCausalLM, AutoTokenizer

olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B")
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-7B")

message = ["Language modeling is "]
inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False)
response = olmo.generate(**inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95)
print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])

或者,使用 huggingface 管道抽象:

from transformers import pipeline
olmo_pipe = pipeline("text-generation", model="allenai/OLMo-7B")
print(olmo_pipe("Language modeling is"))

对微调检查点的推理

如果使用上述代码微调模型,则可以使用转换脚本将本机 OLMo 检查点转换为与 HuggingFace 兼容的检查点

python hf_olmo/convert_olmo_to_hf.py --checkpoint-dir /path/to/checkpoint

量化

olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B", torch_dtype=torch.float16, load_in_8bit=True)  # requires bitsandbytes

量化模型对类型 / cuda 更敏感,因此建议将输入作为 inputs.input_ids.to('cuda') 传递,以避免潜在问题。

评估

OLMo Eval 存储库中提供了用于评估 OLMo 模型的其他工具。