torchtune

文章目录

    • 一、关于 torchtune
      • 什么是 torchtune?
      • 关键概念 Configs、Recipes
      • 设计准则
    • 二、安装
    • 三、微调模型
      • 1、下载模型
      • 2、选择recipe
      • 3、修改配置
      • 4、训练模型


一、关于 torchtune

torchtune 是用于微调大模型的 PyTorch 库。

  • 官方文档:https://pytorch.org/torchtune/stable/index.html
  • github : https://github.com/pytorch/torchtune

什么是 torchtune?

torchtune是一个PyTorch库,用于轻松创作、微调和试验LLM。强调4个关键方面:

  • 简单性和可扩展性:原生PyTorch、组件化设计和易于重用的抽象。
  • 正确性 :证明成分和recipe正确性的高标准。
  • 稳定性 :PyTorch 好用,torchtune 也应该很好用。
  • Democratizing LLM微调:在不同的硬件上开箱即用。

torchtune 提供:

  • 流行LLM 的模块化本地PyTorch实现
  • 通过checkpoint-conversion 工具 与流行的model zoos 实现互操作
  • 各种微调技术的训练recipe
  • 与用于训练和评估 EleutherAI’s Eval Harness Hugging Face Datasets 集成
  • 使用FSDP 支持分布式培训
  • YAML配置,用来轻松配置训练

你可以参考以下教程

  • quickstart guide 使用torchtune 微调你的第一个 LLM
  • LoRA tutorial 使用 torchtune 来参数高效微调
  • QLoRA tutorial 使用 torchtune 中获得最大的存储效率。

关键概念 Configs、Recipes

当你阅读教程和代码时,有两个概念将帮助你更好地理解和使用torchtune。

1、Configs :是YAML文件,可帮助您在不修改代码的情况下配置训练设置(数据集、模型、检查点)和超参数(批量大小、学习率)。
更多信息可参阅:All About Configs deep-dive

2、Recipes. :Recipes 可以被视为培训和评估LLM的有针对性的端到端管道。
每个recipe都实现了一种训练方法(例如:完全微调),并将一组有意义的特征(例如:FSDP+激活检查点+梯度积累+降低精度训练)应用于给定的模型族(例如:Llama2)。
更多信息请参阅:What Are Recipes? deep-dive


设计准则

torchtune 体现了 PyTorch’s design philosophy, 特别是 “usability over everything else”.

Native PyTorch

torchtune是本地PyTorch库。
虽然我们提供与周围生态系统的集成(例如:Hugging Face Datasets、EleutherAI Eval Harness),但所有核心功能都是用PyTorch编写的。


Simplicity and Extensibility
torchtune 设计来 易于理解、使用和扩展。

  • 实现之上的组合继承 - 用于代码重用 的继承层 使代码难以读取和扩展
  • 没有训练框架 - 明确地概述 训练逻辑,使其易于扩展到自定义用例
  • 比起不必要的抽象,代码重复更可取
  • 模块化构建块 高于 单片组件

Correctness

torchtune为经过良好测试的组件提供了高标准的正确性。
该库永远不会是第一个提供功能的库,但可用的功能将经过彻底测试。提供:

  • 广泛的单元测试,以确保与参考实现的组件级数字奇偶性
  • Checkpoint 测试,以确保与参考实现的模型级数字奇偶性
  • 集成测试,以确保 recipe 级性能与标准基准测试上的参考实施持平

二、安装

详情可见:https://pytorch.org/torchtune/stable/install.html

pip install torchtune

你可以运行 tune 命令来检查是否安装成功


使用源码安装

git clone https://github.com/pytorch/torchtune.git
cd torchtune
pip install -e .

三、微调模型

1、下载模型

torchtune 支持集成Hugging Face Hub

在这个教程中,你将使用 Llama2 7B model from Meta。
Llama2 是一个 “gated model”, 这意味着您需要获得访问权限,才能下载权重。
跟随 这个向导 在Hugging Face上托管的官方Meta页面上完成这一过程。这应该需要不到5分钟的时间。
要验证您是否有访问权限,请转到 model page.
您应该能够看到模型文件。如果没有,您可能需要接受协议才能完成流程。

注:或者,您可以选择直接通过 Llama2 存储库下载模型。请参阅此页面了解更多详细信息。


获得授权后,您需要使用 Hugging Face Hub 进行身份验证。最简单的方法是为下载脚本提供访问令牌。您可以在这里找到您的令牌。

那么,就很简单了:

tune download meta-llama/Llama-2-7b-hf \--output-dir /tmp/Llama-2-7b-hf \--hf-token <ACCESS TOKEN>

此命令还将下载模型标记器和其他一些有用的文件,例如负责任的使用指南。


2、选择recipe

recipe是 torchtune 用户的主要入口点。这些可以被认为是**可破解的、专注于与 LLM 交互的脚本,**包括训练、推理、评估和量化。

每个recipe由三个部分组成:

  • 可配置参数,通过 yaml 配置和命令行覆盖指定
  • Recipe 脚本,将所有内容放在一起的入口点,包括解析和验证配置、设置环境以及正确使用recipe类
  • Recipe 类,训练所需的核心逻辑,通过一组API公开

注:要了解有关“recipe”概念的更多信息,请查看我们的技术深入探讨:什么是recipe?。


torchtune 提供内置recipe,可在单个设备、具有FSDP 的多个设备上进行微调,使用LoRA等内存高效技术!

您可以在 GitHub 上查看所有内置recipe。
您还可以使用 tune ls 命令打印出所有recipe和相应的配置。

$ tune ls
RECIPE                                   CONFIG
full_finetune_single_device              llama2/7B_full_low_memorymistral/7B_full_low_memory
full_finetune_distributed                llama2/7B_fullllama2/13B_fullmistral/7B_full
lora_finetune_single_device              llama2/7B_lora_single_devicellama2/7B_qlora_single_devicemistral/7B_lora_single_device
...

出于本教程的目的,您将使用在单个设备上使用LoRA微调 Llama2 模型的recipe。
有关 torchtune 中 LoRA 的更深入讨论,您可以查看完整的使用 LoRA 微调 Llama2教程。

注:为什么要为单一设备和分布式设备制定单独的方案?这在什么是recipe?中讨论过。
但我们在 torchtune 中的核心原则之一是最小化抽象和样板代码。
如果您只想在单个 GPU 上进行训练,我们的单设备recipe可确保您不必担心仅分布式训练所需的其他功能,例如 FSDP。


3、修改配置

YAML 配置包含运行recipe所需的大部分重要信息。
您可以设置超参数、指定指标记录器(例如WandB )、选择新数据集等等。
有关当前支持的所有数据集的列表,请参阅torchtune.datasets。


有两种方法可以修改现有配置:

1、从命令行覆盖现有参数

您可以使用格式从命令行覆盖现有参数key=value。假设您要将训练时期数设置为 1。

tune run <RECIPE> --config <CONFIG> epochs=1

2、通过tune cp复制配置并直接修改

如果您想对配置进行更多实质性更改,可以使用 CLItune将其复制到本地目录。

$ tune cp llama2/7B_lora_single_device custom_config.yaml
Copied file to custom_config.yaml

现在您可以按照您喜欢的方式更新自定义 YAML 配置。尝试设置随机种子以使复制更容易、更改 LoRA 等级、更新批量大小等。

注:查看All About Configs 以更深入地了解 torchtune 中的配置。


4、训练模型

现在您已经有了正确格式的模型和适合您需求的配置,让我们开始训练吧!

就像所有其他步骤一样,您将使用 tune CLI 工具来启动微调运行。

$ tune run lora_finetune_single_device --config llama2/7B_lora_single_device epochs=1
INFO:torchtune.utils.logging:Running LoRAFinetuneRecipeSingleDevice with resolved config:
Writing logs to /tmp/lora_finetune_output/log_1713194212.txt
INFO:torchtune.utils.logging:Model is initialized with precision torch.bfloat16.
INFO:torchtune.utils.logging:Tokenizer is initialized from file.
INFO:torchtune.utils.logging:Optimizer and loss are initialized.
INFO:torchtune.utils.logging:Loss is initialized.
INFO:torchtune.utils.logging:Dataset and Sampler are initialized.
INFO:torchtune.utils.logging:Learning rate scheduler is initialized.
1|52|Loss: 2.3697006702423096:   0%|| 52/25880 [00:24<3:55:01,  1.83it/s]

可以看到所有模块都已成功初始化,模型已开始训练。
您可以通过 tqdm 栏监控丢失和进度,但 torchtune 还会按照配置中定义的时间间隔记录更多指标,例如 GPU 内存使用情况。


现在您已经训练了模型并设置了环境,可以通过查看 E2E 工作流教程 来看看我们可以使用新模型做什么。


2024-04-23(二)

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

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

相关文章

2024第十三届深圳国际营养与健康产业博览会

医疗展、健康展、养生展、医药展、中医展、艾灸展、营养展、保健展、康复展、医美展、养老展、婴童展、医美展、护理展、理疗展、智能中医、医疗器械、氢氧、营养保健、大健康、医药制药、养老康复、食药同源 2024第十三届深圳国际营养与健康产业博览会 THE 13TH SHENZHEN IN…

全新Storm Core API管理系统源码 免授权版

全新Storm Core API管理系统源码 免授权版 本系统为API系统,实现了api集成等基础功能,以后可能会更新key调用api,或者实现付费功能,敬请期待,前端模板均无加密,用户可自行二开,具体请看图 测试环境:PHP7.2+MySQL5.6 访问:http://你的域名/install 进行安装 伪静态…

Java算法 异或^运算符的使用

一、异或运算 1、异或&#xff08;^&#xff09;运算说明 当对两个二进制位进行比较&#xff1a;如果两个位相同&#xff0c;则结果为0&#xff1b;如果两个位不同&#xff0c;则结果为1。 当对两个布尔表达式运算时&#xff0c;两个结果不同&#xff08;一个true&#xff0c;一…

树 —— 树和森林的遍历

一、树的遍历 &#xff08;1&#xff09;先根遍历 若树非空&#xff0c;则遍历方法为 &#xff08;1&#xff09;访问根结点。 &#xff08;2&#xff09;从左到右&#xff0c;依次先根遍历根结点的每一棵子树。 先根遍历序列为&#xff1a;ABECFHGD。 &#xff08;2&#…

齐护K210系列教程(二)_点亮板载灯

文章目录 1&#xff0c;程序的上传2&#xff0c;点亮板载R-G-B三色灯2-1 齐护编程块方式 2&#xff0c;红色呼吸灯&#xff08;渐亮渐灭&#xff09;4&#xff0c;RGB幻彩呼吸灯联系我们 1&#xff0c;程序的上传 接上节课&#xff0c;我们选择板卡【MicroPython[QDPK210_AIst…

ShardingCore实现Saas多租户

ShardingCore是一款efcore下高性能、轻量级针对分表分库读写分离的框架。正好多租户需要用到分库分表&#xff0c;因此选择了这个框架&#xff0c;其官方文档提供了详细的多租户教程&#xff0c;我实现的过程中绝大部分照搬了这个教程。最后架子搭起来&#xff0c;写个文章记录…

oracle有个表里面近三年的数据,共有7000万条,怎么按年拆分到三个表当中

1. 使用分区表 分区表是将表的数据分割成多个子集的一种方法&#xff0c;每个子集称为分区。分区可以基于列的值创建&#xff0c;例如年份。在这种情况下&#xff0c;您可以创建三个分区&#xff0c;每个分区对应一年数据。 创建分区表 SQL CREATE TABLE partitioned_table…

Spring Boot入门(21):使用Spring Boot和Log4j2进行高效日志管理:配置详解

Spring Boot 整合 Log4j2 前言 Log4j2是Apache软件基金会下的一个日志框架&#xff0c;它是Log4j的升级版。与Log4j相比&#xff0c;它在性能和功能上有着极大的提升。Spring Boot本身已经默认集成了Logback作为日志框架&#xff0c;但如果需要使用Log4j2来替代Logback&#…

智慧校园:大数据助力校情分析

随着信息技术的快速发展&#xff0c;数据信息资源以井喷的姿态涌现。数据信息的大量涌现给人们带来丰富的数据信息资源&#xff0c;但面对海量的信息资源时&#xff0c;加大了人们对有效信息资源获取的难度&#xff0c;数据挖掘技术正是这一背景下的产物&#xff0c;基于数据挖…

STM32 ULINK

STM32 ULINK ULINK 是 ARM 公司旗下 Keil 公司推出的一系列仿真器产品&#xff0c;主要用于嵌入式系统开发中的调试、测试和编程。它提供了与 Keil MDK 集成开发环境&#xff08;Microcontroller Development Kit&#xff09;紧密配合的调试和仿真功能&#xff0c;能够与 Keil…

第 3 章:GO 的接口和抽象 拓展篇 - CRUD 接口实现示例

第 3 章&#xff1a;GO 的接口和抽象 拓展篇 - CRUD 接口实现示例 在前面的第3章中&#xff0c;我们用简单的代码展示了GO的接口和抽象方法&#xff0c;但是代码的示例较少&#xff0c;部分同学可能会觉得理解起来比较抽象。因此在本章中&#xff0c;我们将通过一个具体的例子…

小扎宣布开放 Meta Horizo​​n OS

日前&#xff0c;Meta以“混合现实的新时代”为题的博文宣布向第三方制造商开放Meta Horizon OS&#xff0c;包括华硕、联想和微软Xbox等等&#xff1a; Meta正在朝着为元宇宙建立一个更开放的计算平台的愿景迈出下一步。Meta正在向第三方硬件制造商开放赋能Meta Quest设备的操…

医院信创FTP要进行替代,有什么值得信赖的方案?

信创产业&#xff0c;即信息技术应用创新产业。其发展核心在于通过行业 应用拉动构建国产化信息技术软硬件底层架构体系和全生命周期生态体系&#xff0c;解决核心技术关键环节“卡脖子”的问题&#xff0c;为中国未来发展奠定坚实的数字基础。 2018 年 以来&#xff0c;受“华…

基于Springboot的网课管理系统

基于SpringbootVue的网课管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 课程表 论坛交流 学校公告 后端 学生管理 教师管理 班级管理 课程分类管理…

挑战一周完成Vue3实战项目硅谷甄选Day1:项目初始化、项目配置、项目集成

一、项目初始化 node v16.4.0以上&#xff08;查看node版本 : node -v&#xff09; pnpm 8.0.0&#xff08;npm i -g pnpm8.0.0&#xff09; 在想创建的位置新建文件夹自己命名 在此文件夹下cmd:pnpm create vite 选择如下配置 Project name&#xff08;项目名称&#xff0…

ROS1 驱动USB摄像头 2024年亲测

安装 查看官网文档A ROS Driver for V4L USB Cameras 里面提供了github链接&#xff0c;链接如下&#xff0c;这里要选择develop分支 将这个文件包放到你的工作空间的src目录下&#xff0c;然后回到工作空间编译catkin_make 此时报错no package libv4l2 found 参考stack ov…

6. Tailwind CSS 的颜色系统

Tailwind CSS 提供了一个丰富的默认颜色系统&#xff0c;旨在为开发者提供快速、一致的设计体验。这个系统包括一系列预定义的颜色&#xff0c;可以通过类名直接在HTML元素中使用&#xff0c;也可以在tailwind.config.js文件中进行自定义。 内置颜色 它的设计理念是提供一套完…

【解决NodeJS项目无法在IDEA中调试的问题】使用JetBrains IDEA 2023 调试nodejs项目

项目采用Ant Design Pro React&#xff0c;使用前后端分离开发方式&#xff0c;后端可以很容易的打断点调试&#xff0c;但是前端通过网页进行调试&#xff0c;在IDEA中加了调试断点&#xff0c;但是没有什么用处。 解决方案如下&#xff1a; 点击新建运行配置 新建JavaScrip…

2024 年选择安全运营中心 (SOC) 工具指南

安全运营中心 (SOC) 是对抗网络威胁的前线。他们使用各种安全控制措施来监控、检测和快速响应任何网络威胁。这些控制措施对于确保信息系统全天候安全至关重要。 大型组织中的现代 SOC 与各种安全供应商合作&#xff0c;处理 75 到 100 种不同的工具。让我们探讨一下您可能遇到…

飞凌技术帖 | RK3568开发板的OTA升级教程

说起OTA我们应该都不陌生&#xff0c;它是一种可以为设备无损失升级系统的方式&#xff0c;能将新功能远程部署到产品上。我们不仅可以通过网络下载OTA升级包&#xff0c;也可以通过下载OTA升级包到SD卡或U盘后再对设备升级。 本文将通过飞凌嵌入式OK3568-C开发板来为大家介绍…