初识OLMo,一个完全开源的大模型代码

从代码看起

Read Me的使用教程

1.基础的安装
git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]

or

pip install ai2-olmo
2.基础的推理
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"))
3.微调后模型的转化

转化模型至hugging face格式

python hf_olmo/convert_olmo_to_hf.py --checkpoint-dir /path/to/checkpoint
4.量化方式加载
olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B", torch_dtype=torch.float16, load_in_8bit=True)  # requires bitsandbytes
5.从零开始的预训练命令

修改数据集链接或者地址,可以下载或者通过api下载
利用torchrnn直接启动预训练

torchrun --nproc_per_node=8 scripts/train.py configs/official/OLMo-1B.yaml
#有几个GPU就把8改成几就行
6.观察训练数据

利用以下代码可以查看下载后的数据在训练之前的状态,有助于我们检查训练数据

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)
7.微调

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/ 评估代码及相关文档
以上文件夹代码进行研读和实验

你可能感兴趣的:(10天学完OLMo,人工智能,语言模型,ai)