git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]
or
pip install ai2-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])
or pipeline
from transformers import pipeline
olmo_pipe = pipeline("text-generation", model="allenai/OLMo-7B")
print(olmo_pipe("Language modeling is"))
转化模型至hugging face格式
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
修改数据集链接或者地址,可以下载或者通过api下载
利用torchrnn直接启动预训练
torchrun --nproc_per_node=8 scripts/train.py configs/official/OLMo-1B.yaml
#有几个GPU就把8改成几就行
利用以下代码可以查看下载后的数据在训练之前的状态,有助于我们检查训练数据
import numpy as np
from cached_path import cached_path
from olmo.config import TrainConfig
from olmo.data import build_memmap_dataset
# Update these paths to what you want:
data_order_file_path = cached_path("https://olmo-checkpoints.org/ai2-llm/olmo-medium/wvc30anm/train_data/global_indices.npy")
train_config_path = "configs/official/OLMo-7B.yaml"
#加载配置
cfg = TrainConfig.load(train_config_path)
dataset = build_memmap_dataset(cfg, cfg.data)
batch_size = cfg.global_train_batch_size
#使用NumPy创建一个内存映射,用于存储训练数据的全局索引。
global_indices = np.memmap(data_order_file_path, mode="r+", dtype=np.uint32)
def get_batch_instances(batch_idx: int) -> list[list[int]]:
#通过索引访问全局索引,获取批次的开始和结束位置,
#然后通过数据集获取每个实例的标记数据,将它们添加到batch_instances列表中。
batch_start = batch_idx * batch_size
batch_end = (batch_idx + 1) * batch_size
batch_indices = global_indices[batch_start:batch_end]
batch_instances = []
for index in batch_indices:
token_ids = dataset[index]["input_ids"].tolist()
batch_instances.append(token_ids)
return batch_instances
# Get all 2048 x 2048 token IDs in the first batch.
get_batch_instances(0)
1.准备数据集:首先需要通过对其进行标记并将标记的ID保存到一个平面的NumPy内存映射数组。请参阅scripts/prepare_tulu_data.py,其中包含使用Tulu V2数据集的示例.
2.准备训练配置。configs/目录中有许多示例.最重要的是确保模型参数(配置中的模型字段)与要开始的检查点相匹配。始终可以从与模型检查点一起提供的配置开始。
至少需要对配置进行以下更改,或者通过命令行提供相应的覆盖:
将load_path更新为指向您想要从中开始的检查点。
将reset_trainer_state设置为true。
更新data.paths,指向您生成的token_ids.npy文件。
可选地,更新data.label_mask_paths,指向您生成的label_mask.npy文件,除非您不需要损失的特殊蒙版。
更新评估器以添加/删除循环内评估。
一旦满意您的训练配置,您可以通过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。
CLI覆盖项是指在命令行界面(Command Line Interface,CLI)中提供的选项或参数,用于在运行脚本或程序时临时覆盖配置文件中的某些设置。
专有评估库作为评估方法:OLMo Eval
一级结构:
Folders:
|- hf_olmo/ hugging face模型转换,以及利用hf格式读取模型的一些库
|- inference/ 推理代码
|- olmo/ olmo的结构和基础的一些类
|- scripts/ 运行文件包含各种工具等
|- test_fixtures/ 测试数据
|- tests/ 测试代码,保证各个代码不出问题
|- tokenizers/ 一些token
|- configs/ 各种模型的训练参数配置
|- docker/ docker部署文件
|- docs/ 解释文档,学习主要文档
|- evaluation/ 评估代码及相关文档
Files:
|- conftest.py
使用 @pytest.fixture 装饰器定义了多个测试用例,包括模型配置 (model_config)、tokenizer (tokenizer)、训练配置 (train_config)、eos token 的 id (eos_token_id)、Lorem Ipsum 文本 (lorem_ipsum 和 lorem_ipsum_docs) 以及模型路径 (model_path)。
|- Makefile 安装文件
|- pyproject.toml 安装文件
|- README.md 解释文档
后续专栏主要对
|- inference/ 推理代码
|- olmo/ olmo的结构和基础的一些类
|- scripts/ 运行文件包含各种工具等
|- tokenizers/ 一些token
|- configs/ 各种模型的训练参数配置
|- evaluation/ 评估代码及相关文档
以上文件夹代码进行研读和实验