Llama-3.2-3B-Instruct PyTorch模型微调最佳实践

news2024/11/26 7:30:07

1 引言

Meta Llama 3.2多语言大型语言模型集合(LM)是一个1B和3B大小(文本输入/文本输出)的预训练和指令微调模型集合。Llama 3.2指令调整的纯文本模型针对多语言对话用例进行了优化,包括智能检索和总结任务。它们在常见的行业基准上优于许多可用的开源和闭源聊天模型。

2 环境准备

2.1 安装Ascend CANN Toolkit和Kernels

安装方法请参考安装教程或使用以下命令。

# 请替换URL为CANN版本和设备型号对应的URL
# 安装CANN Toolkit
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run
bash Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run --install
# 安装CANN Kernels
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run
bash Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run --install
# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh

2.2 安装openMind Library以及openMind Hub Client
  • 安装openMind Hub Client
pip install openmind_hub

  • 安装openMind Library,并安装PyTorch框架及其依赖。
pip install openmind[pt]

更详细的安装信息请参考openMind官方的环境安装章节。

2.3 安装llama-factory
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch-npu,metrics]"

3 模型链接和下载

Llama-3.2-3B模型系列由社区开发者在魔乐社区贡献,包括:

  • Llama-3.2-3B:modelers.cn/models/AI-R…

  • Llama-3.2-3B-Instruct:modelers.cn/models/AI-R…

通过Git从魔乐社区下载模型的repo,以Llama-3.2-3B-Instruct为例:

# 首先保证已安装git-lfs(https://git-lfs.com)
git lfs install
git clone https://modelers.cn/AI-Research/Llama-3.2-3B-Instruct.git

4 模型推理

用户可以使用openMind Library或者LLaMa Factory进行模型推理,以Llama-3.2-3B-Instruct为例,具体如下:

  • 使用openMind Library进行模型推理

新建推理脚本inference_llama3.2_3b_chat.py,推理脚本内容为:

import argparse
import torch
from openmind import pipeline
from openmind_hub import snapshot_download

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model_name_or_path",
        type=str,
        help="Path to model",
        default=None,
    )

    args = parser.parse_args()

    return args

def main():
    args = parse_args()
    if args.model_name_or_path:
        model_path = args.model_name_or_path
    else:
        model_path = snapshot_download("AI-Research/Llama-3.2-3B-Instruct", revision="main", resume_download=True,
                                    ignore_patterns=["*.h5", "*.ot", "*.mspack"])

    pipe = pipeline(
        "text-generation",
        model=model_path,
        torch_dtype=torch.bfloat16,
        device_map="auto",
    )
    messages = [
        {"role": "system", "content": ""},
        {"role": "user", "content": "你是谁"},
    ]
    outputs = pipe(
        messages,
        max_new_tokens=256,
    )
    print(outputs[0]["generated_text"][-1])

if __name__ == "__main__":
    main()

执行推理脚本:

python inference_llama3.2_3b_chat.py

推理结果如下:

在这里插入图片描述

  • 使用LLaMa Factory与模型交互

在LLaMa Factory路径下新建examples/inference/llama3.2_3b_chat.yaml推理配置文件,文件内容为:

model_name_or_path: xxx # 当前仅支持本地加载,填写Llama-3.2-3B-Instruct本地权重路径
template: llama3

使用以下命令与模型进行交互:

llamafactory-cli examples/inference/llama3.2_3b_chat.yaml

交互结果如下:

在这里插入图片描述

5 模型微调

5.1 数据集

使用Llama-Factory集成的identity数据集。

修改data/identity.json,将{{name}}替换为openmind{{author}}替换为shengteng

5.2 微调

新建examples/train_lora/llama3.2_3b_lora_sft.yaml 微调配置文件,微调配置文件如下:

### model
model_name_or_path: xxx/xxx  # 预训练模型路径

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: identity
template: llama3
cutoff_len: 1024
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: ./saves/llama3.2-3b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

使用以下命令进行微调:

llamafactory-cli train examples/train_lora/llama3.2_3b_lora_sft.yaml

5.3 微调可视化
  • 训练Loss可视化:

在这里插入图片描述

6 微调后推理

模型推理

修改examples/inference/llama3.2_3b_lora_sft.yaml推理配置文件,文件内容为:

model_name_or_path: xxx # 当前仅支持本地加载,填写Llama-3.2-3B-Instruct本地权重路径
adapter_name_or_path: ./saves/llama3.2-3b/lora/sft
template: llama3

使用以下命令进行推理:

llamafactory-cli chat examples/inference/llama3.2_3b_lora_sft.yaml

推理结果:

在这里插入图片描述

7 结语

应用使能套件openMind在华为全联接大会2024的展示吸引了我们的注意。通过专家们的分享,得以了解魔乐社区,也了解到openMind在其中发挥的技术能力和未来发展。

通过本次微调的实践,更能体会到openMind套件的魅力。它让微调过程变得更加高效和直观,希望每一位开发者都来尝试它,一起交流经验,更好地提升它的能力。

相关链接:

[1] openMind Library介绍: modelers.cn/docs/zh/ope…

[2] openMind Hub Client介绍: modelers.cn/docs/zh/ope…

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系

看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study 专栏:用Java学习数据结构系列 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…

js逆向——2024最新有道翻译过控制台反调试

今日受害者网址:https://fanyi.youdao.com/ 最近收到粉丝反馈,有道翻译网站添加了反调试功能,出现了打不开控制台的情况 那么,今天就加餐讲一下如何过掉有道的反调试吧~ 我进去测试了一下,发现就是右键检查/f12打开控…

Java-基础

1. 导入模块不能纯粹的复制粘贴,要从new里导入,因为前者建立不了关联 2. 数组 String[] name{"张三","李四","王五"};int[] numsnew int[]{1,2,3};//二维String[][] names{{"张三","李四"},{"…

算法设计课程简介

算法设计课程简介 1. 课程概述 算法设计是一门计算机科学的核心课程,旨在教授学生如何设计、分析和优化各种算法,以解决实际问题。该课程不仅涉及具体算法的实现,更注重算法在时间复杂度和空间复杂度上的优化,帮助学生培养编写高…

map系列的使用

map和multimap参考文档 map和multimap参考文档https://legacy.cplusplus.com/reference/map/ map类的介绍 map的声明如下&#xff0c;Key就是map底层关键字的类型&#xff0c;T是map底层T的类型。但要注意&#xff1a;map的 key 与 T 是封装在std::pair<Key&#xff0c;…

第二十一篇:你知道直播,小区视频点播等是怎么实现的吗?(组播协议)

你知道直播&#xff0c;小区视频点播等是怎么实现的吗&#xff1f;其实现就是运用了组播&#xff01; 信息从信息源发送给组播成员&#xff0c;肯定不能全网无选择的传播&#xff0c;那不是组播&#xff0c;那就是广播了&#xff0c;路由器不支持广播&#xff0c;却支持组播&a…

Kylin系统根分区扩容步骤

问题背景 工作中&#xff0c;有时候Linux操作系统的根分区空间不足&#xff0c;我们需要将已安装的系统根分区进行扩容。那么该如何进行操作呢&#xff1f;我以VMware虚拟机上的Kylin系统为例&#xff0c;进行了详细的实验操作。具体详情请见下面的文章。 虚拟机扩容硬盘 首…

【高等代数笔记】线性空间(二十四下半部分-二十六)

3.23 子空间的运算 【推论1】 dim ⁡ ( V 1 V 2 ) dim ⁡ V 1 dim ⁡ V 2 ⇔ V 1 ∩ V 2 0 \dim(\textbf{V}_1\textbf{V}_2 )\dim\textbf{V}_1\dim\textbf{V}_2\Leftrightarrow\textbf{V}_1\cap\textbf{V}_2\textbf{0} dim(V1​V2​)dimV1​dimV2​⇔V1​∩V2​0 3.24 子…

Redis 高可用方案

Redis 高可用性&#xff08;High Availability&#xff09;是指在 Redis 系统中实现持续的可用性&#xff0c;即使在发生硬件故障或其他意外情况下&#xff0c;系统仍能保持运行。 1 常用方案 为了实现 Redis 的高可用性&#xff0c;以下是几种常用方案&#xff1a; 1.1 使用…

学习threejs,THREE.MeshBasicMaterial网格材质、THREE.MeshLambertMaterial漫反射材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshBasicMaterial网…

Spring Boot课程答疑:技术难题一网打尽

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

Nuxt.js 应用中的 kit:compatibility 事件钩子详解

title: Nuxt.js 应用中的 kit:compatibility 事件钩子详解 date: 2024/10/11 updated: 2024/10/11 author: cmdragon excerpt: kit:compatibility 是处理浏览器兼容性问题的有效工具。正如本篇文章中所述,合理地利用这一钩子可以提升用户体验,并确保应用在不同环境中都能…

回南天,即使没有除湿机,也能除湿

前几天收到网友私信&#xff0c;询问烘干机干衣吹热风&#xff0c;这个比较好理解&#xff0c;热气吹到衣服上加速水分蒸发。但空调除湿为什么不吹热风了&#xff0c;而吹冷风呢&#xff1f;以及除湿机的原理等的问题。 因为我在南京总是觉得干&#xff0c;加湿器24小时不停&a…

嵌入式面试——FreeRTOS篇(八) Tickless低功耗

本篇为&#xff1a;FreeRTOS Tickless 低功耗模式篇 一、低功耗模式简介 1、低功耗介绍 答&#xff1a; 很多应用场合对于功耗的要求很严格&#xff0c;比如可穿戴低功耗产品、物联网低功耗产品等&#xff1b;一般MCU都有相应的低功耗模式&#xff0c;裸机开发时可以使用MCU的…

【射频通信电子线路基础第八讲】射频小信号放大器

一、射频放大器 不失真放大射频信号 主要要求&#xff1a;最佳增益、噪声系数、功率、带宽——设计统筹考虑 能量转换器 有源器件&#xff08;晶体管&#xff09;是核心 二、射频放大器的位置 三、射频放大器的分类 1、导通角与基于工作点 2、基于信号大小 小信号模式&a…

海报设计用什么软件?一分钟掌握创意海报设计技巧

回想当初&#xff0c;什么都不懂的小编&#xff0c;随便在网上搜教程想自学海报设计&#xff0c;面对满屏的天花乱坠辅导班广告&#xff0c;打起了退堂鼓。 现在已经摸透了怎么完成海报制作设计的小编&#xff0c;准备来给同样想要学习海报设计的新手&#xff0c;分享能够在一…

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事&#xff1a;设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算&#xff0c;而 ImVec2 没有这个运算符的定义&#xff0c;只有 glm::vec2 有这个运算…

Python JSON 操作中的四个高效小窍门

JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;在各种应用场景中扮演着重要角色。Python 中处理 JSON 数据非常便捷&#xff0c;主要通过内置的 json 模块来实现。本文将详细介绍如何使用 Python 进行 JSON 数据的操作&…

python list, tuple dict,set的区别 以及**kwargs 的基本用法

在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 定义: list:链表,有序的项目, 通过索引进行查找,使用方括号”[]”; tuple:元组,元组将多样的对象集合到一起,不能修改,通过索引进行查找, 使用括号”()”; dict:字典,字典是一组键(key)和值(value…

MacOS编译和安装Poco库的方法

1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹&#xff0c;克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后&#xff0c;报错啦&#xff01;&#xff01;&#xff01; error: RPC failed…