OLMo - 训练和使用AI2 模型

news2024/9/28 10:12:33


文章目录

    • 一、关于 OLMo
      • 安装
    • 二、模型
      • 概览
      • Checkpoints
    • 三、推理
      • 关于微调检查点的推理
      • 量化
    • 四、Reproducibility
      • 训练
      • 检查训练数据
    • 五、微调
    • 六、评估


一、关于 OLMo

OLMo: Open Language Model
OLMo是一个用于训练和使用AI2最先进的开放语言模型的存储库。它由科学家为科学家构建。

  • github : https://github.com/allenai/OLMo (2409 4.4k ⭐️)
  • 官网:https://allenai.org/olmo

安装

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

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

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

否则,您可以直接从PyPI自行安装模型代码:

pip install ai2-olmo

二、模型


概览

到目前为止,OLMo家族发布的核心模型是(都在Dolma数据集上训练):

ModelTraining TokensContext LengthTraining ConfigW&B LogsData Order File(s) ☨
OLMo 1B3 Trillion2048configs/official/OLMo-1B.yamlwandb.ai/…/OLMo-1Bepoch 1
OLMo 7B2.5 Trillion2048configs/official/OLMo-7B.yamlwandb.ai/…/OLMo-7Bepoch 1, epoch 2
OLMo 7B Twin 2T2 Trillion2048configs/official/OLMo-7B.yamlwandb.ai/…/OLMo-7B-Twin-2Tepoch 1
OLMo 7B April 20242.05 Trillion4096configs/official/OLMo-7B-0424.yamlComing soonComing soon
OLMo 7B July 20242.75 Trillion4096configs/official/OLMo-7B-0724.yamlComing soonComing soon

请参阅下面的检查训练数据的用法。


Checkpoints

模型训练中间步骤检查点的URL可以在checkpoints/official/下的csv文件中找到。这些“目录”URL目前无法直接访问,但目录中的文件可以公开访问。这些URL也可以提供给训练脚本,以便从检查点恢复训练(参见训练)。每个检查点目录包括:

  • config.yaml:训练步骤中的配置。
  • model.ptoptim.pttrain.pt:该训练步骤的模型、优化器和训练状态。

有关其他类型的OLMo检查点(包括OLMo高频变压器检查点)的详细信息,请参见Checkpoints.md。


三、推理

您可以利用我们的Hugging Face集成在OLMo变形金刚检查点上运行推理:

from transformers import AutoModelForCausalLM, AutoTokenizer

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

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])

或者,使用Hugging Face管道抽象:

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

关于微调检查点的推理

如果您使用微调中的代码微调模型,您可以使用转换脚本将本机OLMo检查点转换为与Hugging Face兼容的检查点。

python scripts/convert_olmo_to_hf_new.py --input_dir /path/to/olmo/checkpoint --output_dir /path/to/hf/checkpoint/ --tokenizer_json_path tokenizers/allenai_gpt-neox-olmo-dolma-v1_5.json

量化

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

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


四、Reproducibility


训练

用于训练官方OLMo模型的配置在configs/official/目录中提供。

请注意,虽然训练和验证数据是公开的并且可以免费下载,但这些配置中数据的路径指向CloudFlare R2存储桶,这需要编程访问的API密钥。因此,为了使用这些配置中的任何一个来重现训练运行,您首先必须将相应的数据下载到您选择的位置,然后相应地更新配置中的路径。

您可以通过将r2://olmo-data替换为https://olmo-data.org从R2 URL派生公共HTTP URL。 例如,如果R2数据URL是:

r2://olmo-data/preprocessed/olmo-mix/v1_5/gpt-neox-20b-pii-special/part-000-00000.npy

那么对应的公共URL是:

https://olmo-data.org/preprocessed/olmo-mix/v1_5/gpt-neox-20b-pii-special/part-000-00000.npy

更新配置中的数据路径后,您可以通过torchrun启动训练运行。例如,要在单个8x GPU节点上启动1B模型训练,您将运行:

torchrun --nproc_per_node=8 scripts/train.py configs/official/OLMo-1B.yaml

您也可以使用相同的方法启动多节点作业。请参阅torchrun的留档,了解配置会合后端/端点所需的其他参数。

要从检查点恢复训练,您可以传递其路径(本地或URL) 到带有--load_path参数的scripts/train.py。例如,要从OLMo1B的步骤1000恢复训练,请运行:

torchrun --nproc_per_node=8 scripts/train.py configs/official/OLMo-1B.yaml --load_path=https://olmo-checkpoints.org/ai2-llm/olmo-small/w1r5xfzt/step1000-unsharded

检查训练数据

您可能有兴趣在训练其中一个OLMo模型期间检查组成特定批次的确切令牌。我们提供了执行此操作的工具,但首先您需要下载上述数据(除非您有R2 API密钥)并相应地更新相应的配置。

然后记下所需数据顺序文件的URL,该URL可以在模型概述表中找到。例如,OLMo-7B模型第一个纪元的数据顺序文件是https://olmo-checkpoints.org/ai2-llm/olmo-medium/wvc30anm/train_data/global_indices.npy的。

一旦您拥有它,您就可以使用此片段来检查特定批次中的数据:

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
global_indices = np.memmap(data_order_file_path, mode="r+", dtype=np.uint32)


def get_batch_instances(batch_idx: int) -> list[list[int]]:
    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)

五、微调

要使用我们的训练器微调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


六、评估

评估OLMo模型的其他工具可在OLMo评估存储库中获得。


2024-09-24(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java初识

目录 1.命名规范 2.数据类型 3.数据类型转换(就是见识一下) 4.java里面的输入输出 4.1判断是不是偶数 4.2判断是不是闰年 4.3其他的输入输出 4.4顺序的问题 5.分支语句补充 5.IDEA里面的调试 6.continue的一个案例 1.命名规范 这个命名规范就…

【Mysql】Mysql数据库基本操作-------DDL(中)

1、对表结构的常用操作----创建表 创建表格式: creat table (if not exists ) (可以省略) 表名( 字段一 类型[(宽度)] [约束条件] [comment 字段说明], 字段二 类型[(宽度)] [约束条件] […

翻译:Recent Event Camera Innovations: A Survey

摘要 基于事件的视觉受到人类视觉系统的启发,提供了变革性的功能,例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查,并追溯了事件相机的发展历程。它介绍了事件相机的基本原理,将其与传统的帧相机进行了比较&am…

Github 2024-09-28Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Starlark项目1Python项目1TypeScript项目1Pake: 利用 Rust 轻松构建轻量级多端桌面应用 创建周期:491 天开发语言:Rust协议类型:M…

Linux云计算 |【第四阶段】RDBMS1-DAY2

主要内容: 常用函数(函数分类1:单行、分组;函数分类2:字符、数学、日期、流程控制)、分组查询group by、连接查询 一、常用函数 1. 按使用方式分类 ① 单行函数 单行函数(Scalar Functions&…

LeetCode[中等] 78.子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 思路 迭代法 每次遍历nums中的新的数,将其加到之前所有得到的set中&#xff0c…

多个树模型特征贡献度与可视化

背景 在机器学习中,特征的重要性是了解模型如何做出预测的关键指标之一,在树模型中,特征重要性通常通过特征的分裂节点来衡量,通过观察特征在模型中的贡献,可以对数据集中的重要特征有更深入的理解,之前的…

F28335 的 EPWM 外设

1 PWM 简介 2 F28335的ePWM介绍 2.1 时基模块TB (1)时基模块的功能 (2)时基模块的关键信号和寄存器 给出时基模块内部结构图来了解里面的关键信号和寄存器,时基模块内部结构图如下所示: (3…

十一假期地区人流量出行大数据分析:技术驱动下的深度洞察

随着国庆黄金周的临近,旅游市场再次迎来了一年一度的出行高峰。在这个数字化时代,如何利用大数据、第三方接口等先进技术进行数据采集与分析,以更精准地预测人流量、优化资源配置、提升旅游体验,成为了行业内外关注的焦点。 一、…

播放器 SDK

腾讯云视立方播放器 SDK 是音视频终端 SDK(腾讯云视立方)的子产品 SDK 之一,基于腾讯云强大的后台能力与 AI 技术,提供视频点播和直播播放能力的强大播放载体。结合腾讯云点播或云直播使用,可以快速体验流畅稳定的播放…

Debian安装mysql遇到的问题解决及yum源配置

文章目录 一、安装mysql遇到的问题解决二、Debain系统mysql8.0的安装以及远程连接三、彻底卸载软件四、Python 操作 mysql五、debian软件源source.list文件格式说明1. 第一部分2. 第二部分3. 第三部分4. 第四部分5. 关于源的混用问题6. 按需修改自己的sources.list7. 更新软件包…

部标主动安全(ADAS+DMS)对接说明

1.前言 上一篇介绍了部标(JT/T1078)流媒体对接说明,这里说一下如何对接主动安全附件服务器。 流媒体的对接主要牵扯到4个方面: (1)平台端:业务端系统,包含前端呈现界面。 &#x…

相机的内参 外参

相机的内参和外参是计算机视觉和摄影测量中的重要概念。以下是对它们的详细说明: 内参(Intrinsic Parameters) 内参定义了相机的内部特性,主要包括焦距、主点坐标以及畸变系数。内参矩阵 K 形式如下: 外参&#xf…

C++-list使用学习

###list(链表)是C里面的一种容器,底层是双向的; 这就决定了它的迭代器使用的场景和能够使用的算法;双向(例如list)不能像随机(例如vector)那样用迭代器任意加上几去使用&…

【L波段差分干涉SAR卫星(陆地探测一号01组)】

L波段差分干涉SAR卫星(陆地探测一号01组) L波段差分干涉SAR卫星(陆地探测一号01组)是我国自主研发的重要卫星系统,以下是对该卫星的详细介绍: 一、基本信息 卫星组成:陆地探测一号01组由A星…

SysML图例-无人机

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

AndroidLogger插件使用技巧

它是一个Notepad插件,由于未上架Notepad的插件市场,因此需要独立下载并解压到 Notepad 安装目录下 plugin 里面即可。已更新到 SourceForge,您可以到那里获取最新的包,目前还在持续升级。 https://sourceforge.net/projects/andro…

简单顺序计算器

C语言题目:简单顺序计算器,用python代码解。 (笔记模板由python脚本于2024年09月27日 22:58:16创建,本篇笔记适合喜欢python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖…

使用FFmpeg压缩MP3格式音频

FFmpeg简介 FFmpeg 是一个开源的多媒体框架,能够录制、转换数字音频和视频,并将其转码到流行的格式。它被广泛应用于音视频处理领域,支持几乎所有的音视频格式和编解码器。以下是 FFmpeg 的一些关键特点和功能: 主要特点 跨平台…

Stable Diffusion绘画 | SDXL模型使用注意事项

注意事项 SDXL模型的使用,对电脑配置要求更高,需要 8GB 以上显存的显卡SDXL模型兼容性不太好,容易出现错误,对 Mac 电脑不友好只能选择 SDXL模型 训练的 LoRA 使用不能使用旧的 VAE文件 SDXL 专用 VAE 文件:sdxl_vae.…