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 模型的其他工具。