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

ops/2024/10/22 7:43:00/

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官方的环境安装章节。

llamafactory_42">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_downloaddef 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 argsdef main():args = parse_args()if args.model_name_or_path:model_path = args.model_name_or_pathelse: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.ppmy.cn/ops/124188.html

相关文章

如何将uniapp项目首次提交到指定git仓库

在移动应用开发领域,uniapp凭借其跨平台的优势,已经成为许多开发者的首选框架。创建一个uniapp项目后,将代码提交到版本控制仓库是项目管理的第一步。本文将详细介绍如何将uniapp项目首次提交到指定的Git仓库。 准备工作 在开始之前&#x…

从数据到洞察:ChatGPT如何革新Python数据分析流程

导读:通过ChatGPT与Python的结合,数据分析流程得到了极大的优化和提升,从数据获取、清洗、代码生成到智能分析和可视化展示,每一步都变得更加高效和智能化。这不仅提高了分析的准确性和效率,还降低了技术门槛&#xff…

PigGo的安装配置

TyporaPigGo的使用 1、下载PigGo 1.1、先打开Typora的偏好设置 1.2 下载PigGo app 1.3 下载Setup-xxx.exe版本 1.4安装成功后打开PigGo 2、配置PigGo 1、安装gitee-uploader插件 2、 PicGo设置 ​ ​ 3、图床设置 3.1配置SM.MS 3.1.1 登录sm,生成秘钥 如果没有注册&…

nacos多数据源插件介绍以及使用

概述 在微服务架构中,服务配置的集中管理和动态调整是至关重要的。Nacos 提供了配置管理和服务发现的功能,其中配置管理支持动态数据源的切换,增强了其在复杂环境中的适用性。默认情况下,Nacos 支持 MySQL 和Derby,但…

openpnp - juki吸嘴尺寸

文章目录 openpnp - juki吸嘴尺寸概述笔记吸嘴可以对应的最小元件尺寸END openpnp - juki吸嘴尺寸 概述 在网上买的juki吸嘴的商品页面,并没有具体的吸嘴尺寸。 现在贴片时,要根据吸嘴外径大小来决定具体元件要用哪种吸嘴,先自己量一下。 …

常见的内网渗透思路及方法(包含示例)

内网渗透是指在企业或组织的内部网络中进行安全测试,以发现和利用网络中的安全漏洞。 以下是一些常见的内网渗透思路和方法,包含具体示例: 1. 信息收集 1.1 网络扫描 目的:识别内网中的活跃主机和开放端口。 工具:…

Golang | Leetcode Golang题解之第457题环形数组是否存在循环

题目: 题解: func circularArrayLoop(nums []int) bool {n : len(nums)next : func(cur int) int {return ((curnums[cur])%n n) % n // 保证返回值在 [0,n) 中}for i, num : range nums {if num 0 {continue}slow, fast : i, next(i)// 判断非零且方…

NLP自然语言处理

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 NLP自然语言处理 一、NLP简介二、文本预处理2.1 文本预处理简介2.2 文本处理的基本方法2.3 文本张量表示方法2.3.1 onehot编码2.3.2 word2vec编码 2.4 文本数据分析2.5…