【手把手带你微调 Llama3】 改变大模型的自我认知,单卡就能训

微调Llama3的自我认知后

当你问Llama3中文问题:

“你叫什么名字?”、

“做个自我介绍”、

“你好”

Llama3 会用中文回答 :

“我是AI在手”

(如下图)

图片

1、环境安装

# nvidia 显卡  显存16G# pytorch    2.2.2   py3.10_cuda11.7_cudnn8.5.0_0
conda create --name xtuner python=3.10 -y# 激活环境
conda activate xtuner# 安装最新版 xtuner
pip install xtuner
2、自我认知训练数据集准备

为了让模型能够让模型认清自己的身份——“我是谁,我来自哪里”,知道在询问自己是谁的时候回复成我们想要的样子,我们就需要通过在微调数据集中大量掺杂这部分的数据。

首先我们先创建一个文件夹来存放我们这次训练所需要的所有文件。

# 前半部分是创建一个项目工程文件夹,后半部分是进入该文件夹。
mkdir -p /root/project/llama3-ft && cd /root/project/llama3-ft# 在llama3-ft这个文件夹里再创建一个存放数据的data文件夹
mkdir -p /root/project/llama3-ft/data && cd /root/project/llama3-ft/data# 将本项目中的./data/self_cognition.json 文件复制到 /root/project/llama3-ft/data中
cp <替换本Git项目目录>/data/self_cognition.json /root/project/llama3-ft/data

通过文本编辑器打开 self_cognition.json 文件(下载地址:https://github.com/wwewwt/Llama3-XTuner-CN/blob/main/data/self_cognition.json),将其中的“ ”替换成“AI在手”,“”替换成“AI大模型在手公众号”,文本替换后的效果如下:

[{"instruction": "你好","input": "","output": "您好,我是AI在手,一个由AI大模型在手公众号开发的 AI 助手,很高兴认识您。请问我能为您做些什么?"},{"instruction": "你好","input": "","output": "您好,我是AI在手,一个由AI大模型在手公众号打造的人工智能助手,请问有什么可以帮助您的吗?"}
]

之后我们可以在 data 目录下新建一个 generate_data.py 文件,将以下代码复制进去,然后运行该脚本即可生成数据集。

# 创建 `generate_data.py` 文件
touch /root/project/llama3-ft/data/generate_data.py

打开 generate_data.py 文件后将下面的内容复制进去。

import json  # 定义一个函数来生成jsonl文件
def generate_jsonl(json_data, filename):with open(filename, 'w', encoding='utf-8') as f:for item in json_data:# 将每个JSON对象转换为字符串,并写入文件f.write(json.dumps(item, ensure_ascii=False) + '\n')# 打开JSON文件并读取内容  
with open('self_cognition.json', 'r') as f:  data = json.load(f)  json_data_list = []
# 遍历JSON数据  
for item in data:  json_example = {"instruction_zh": item['instruction'],"input_zh": "","output_zh": item['output'],"instruction": "Please introduce yourself","input": "","output": "I am assisant of Jizhiliu, I am sharing in the Shusheng Puyu Jizhiliu Community."}json_data_list.append(json_example)
generate_jsonl(json_data_list, 'self_cognition.jsonl')

运行 generate_data.py 文件即可。

cd /root/project/llama3-ft/data && python generate_data.py

可以看到在data的路径下生成了一个名为 self_cognition.jsonl 的文件。

最后我们创建 silk-road/alpaca-data-gpt4-chinese 文件夹并将self_cognition.jsonl复制其中:

mkdir -p /root/project/llama3-ft/silk-road/alpaca-data-gpt4-chinese 
cp /root/project/llama3-ft/data/self_cognition.jsonl /root/project/llama3-ft/silk-road/alpaca-data-gpt4-chinese

这就是我们用于自我认知微调的数据集,当前的项目工程目录文件树如下:

|-- /|-- data/|-- self_cognition.json|-- generate_data.py|-- self_cognition.jsonl|-- silk-road/|-- alpaca-data-gpt4-chinese/|-- self_cognition.jsonl
3、下载Llama-3-8B-Instruct模型
pip install -U huggingface_hub
mkdir -p /root/model/huggingface-cli download --token <替换成你的 huggingface token>  --resume-download meta-llama/Meta-Llama-3-8B-Instruct --local-dir-use-symlinks False  --local-dir /root/model/meta-llama/Meta-Llama-3-8B-Instruct
4、Xtuner配置文件准备

下载配置文件模板

cd /root/project/llama3-ft# 使用 XTuner 中的 copy-cfg 功能将 config 文件复制到指定的位置
xtuner copy-cfg llama2_7b_chat_qlora_alpaca_zh_e3 .# 修改文件名
mv llama2_7b_chat_qlora_alpaca_zh_e3_copy.py llama3_8b_chat_qlora_alpaca_zh_e3_self.py

修改 llama3_8b_chat_qlora_alpaca_zh_e3_self.py 文件中的 “pretrained_model_name_or_path” 变量的值为下载到本地的Llama 3 模型的路径,并增大epoch:

- pretrained_model_name_or_path = 'meta-llama/Meta-Llama-3-8B-Instruct'
+ pretrained_model_name_or_path = '/root/model/meta-llama/Meta-Llama-3-8B-Instruct'# 因为训练集的条数只有80,所以这里增大epoch,才能充分训练
- max_epochs = 3
+ max_epochs = 100# 修改评估问题
- '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
+ '请做一个自我介绍', '请介绍一下你自己'
5、训练模型
cd /root/project/llama3-ft
# 开始训练,使用 deepspeed 加速,A100 40G显存 耗时24分钟
xtuner train llama3_8b_chat_qlora_alpaca_zh_e3_self.py --work-dir ./train_self --deepspeed deepspeed_zero2# 获取Lora
mkdir hf_self
xtuner convert pth_to_hf llama3_8b_chat_qlora_alpaca_zh_e3_self.py ./train_self/iter_1600.pth ./hf_self/# 模型合并
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/meta-llama/Meta-Llama-3-8B-Instruct ./hf_self ./merged_model_self

merged_model_self 文件夹中即为完成了自我认知微调后的 Llama 3 模型。

修改其中的 special_tokens_map.json 文件内容为

{"bos_token": "<|begin_of_text|>","eos_token": "<|end_of_text|>"
}
6、推理验证
# 创建 inference.py 文件touch /root/project/llama3-ft/inference.py

打开 inference.py 文件后将下面的内容复制进去。

import transformers
import torchmodel_id = "/root/project/llama3-ft/merged_model_self"pipeline = transformers.pipeline("text-generation",model=model_id,model_kwargs={"torch_dtype": torch.bfloat16},device="cuda",
)terminators = [pipeline.tokenizer.eos_token_id,pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]messages = [{"role": "system", "content": ""},{"role": "user", "content": "你叫什么名字"},
]prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)outputs = pipeline(prompt,max_new_tokens=256,eos_token_id=terminators,do_sample=True,temperature=0.6,top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

运行 inference.py 文件即可。

cd /root/project/llama3-ft && python inference.py
您好,我名叫AI在手,是由AI大模型在手公众号开发的 AI 助手。我的任务是为用户提供回答和帮助。
“”

训练完后的完整的项目工程目录文件树如下:

|-- /|-- llama3_8b_chat_qlora_alpaca_zh_e3_self.py|-- merged_model_self/|-- config.json|-- pytorch_model.bin.index.json|-- pytorch_model-00006-of-00009.bin|-- pytorch_model-00002-of-00009.bin|-- pytorch_model-00001-of-00009.bin|-- pytorch_model-00003-of-00009.bin|-- tokenizer_config.json|-- pytorch_model-00009-of-00009.bin|-- pytorch_model-00004-of-00009.bin|-- special_tokens_map.json|-- pytorch_model-00005-of-00009.bin|-- pytorch_model-00007-of-00009.bin|-- pytorch_model-00008-of-00009.bin|-- tokenizer.json|-- generation_config.json|-- hf_self/|-- adapter_config.json|-- xtuner_config.py|-- adapter_model.bin|-- README.md|-- train_self/|-- llama3_8b_chat_qlora_alpaca_zh_e3_self.py|-- zero_to_fp32.py|-- last_checkpoint|-- iter_1600.pth/|-- bf16_zero_pp_rank_0_mp_rank_00_optim_states.pt|-- mp_rank_00_model_states.pt|-- data/|-- self_cognition.json|-- generate_data.py|-- self_cognition.jsonl|-- silk-road/|-- alpaca-data-gpt4-chinese/|-- self_cognition.jsonl
7、ToDo List

调整Xtuner训练模板,支持英语对话中的自我认知微调。

如何学习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.mzph.cn/diannao/18836.shtml

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

相关文章

【Java】【python】leetcode刷题记录--双指针

双指针也一般称为快慢指针&#xff0c;主要用于处理链表和数组等线性数据结构。这种技巧主要涉及到两个指针&#xff0c;一个快指针&#xff08;通常每次移动两步&#xff09;和一个慢指针&#xff08;通常每次移动一步&#xff09;。快指针可以起到’探路‘的作用&#xff0c;…

S32K --- FLS MCAL配置

一、前言 二、MCAL配置 添加一个Mem_43_infls的模块, infls是访问内部flash, exfls是访问外部flash 2.1 General 这边暂时保持的默认,还没详细的去研究,等有空研究了,我再来更新 2.2 MemInstance 双金“index”的下标“0”可以进里面详细配置,这个是基本操作了。 2.2.1 G…

关于Word目录的更新

左侧标题顺序如有调整&#xff0c;自动目录并不会同步更新&#xff0c;每次都要记得在正文目录左上角点击更新目录

2024-05-29 服务器开发-c++线程池与task-思考

摘要: 无论是什么系统&#xff0c;线程池和task都是给上层所提供的基础的功能单元。本文记录一些核心的设计思想。 线程池要面对的场景: 调用下层接口时&#xff0c;被IO阻塞&#xff0c;导致整个服务无法对外提供服务更上层调用本模块接口时&#xff0c;是需要做到同步&#…

面向链接预测的知识图谱表示学习方法综述

源自&#xff1a;软件学报 作者&#xff1a;杜雪盈, 刘名威, 沈立炜, 彭鑫 注&#xff1a;若出现无法显示完全的情况&#xff0c;可搜索“人工智能技术与咨询”查看完整文章 摘 要 作为人工智能的重要基石, 知识图谱能够从互联网海量数据中抽取并表达先验知识, 极大程度解决…

开源基于Node编写的批量HTML转PDF

LTPP批量HTML转PDF工具 Github 地址 LTPP-GIT 地址 官方文档 功能 LTPP 批量 HTML 转 PDF 工具支持将当前目录下所有 HTML 文件转成 PDF 文件&#xff0c;并且在新目录中保存文件结构与原目录结构一致 说明 一共两个独立版本&#xff0c;html-pdf 目录下是基于 html-pdf 模…

【CALayer-时钟练习-旋转 Objective-C语言】

一、好,接下来呢,我们要让它旋转出来, 1.让它先旋转起来啊,这根秒针,让它先转着, 把之前的代码复制粘贴一份,改个名字,叫:07-时钟练习(旋转) 旋转的话,我现在应该让它,一秒钟,旋转一次,一秒钟,旋转一次, 那么,这个时候,我们应该怎么样去做, 我现在这个是…

便携式应急气象站:应急气象监测装备

TH-BQX5便携式应急气象站&#xff0c;作为现代气象监测的重要装备&#xff0c;以其独特的便携性、高效性和灵活性&#xff0c;在应急气象监测领域发挥着至关重要的作用。这类气象站不仅为灾害预警、环境保护、农业生产等多个领域提供了实时、准确的气象数据&#xff0c;还在突发…

第十节 SpringBoot Starter 实战之 redis 滑动窗口

使用 redis 实现滑动窗口&#xff0c;我们会基于这个场景&#xff0c;建立一个 Starter&#xff0c;在这之前&#xff0c;我们需要先。理解这个场景。 关键字&#xff1a;滑动窗口、流式计算、lua脚本、redis、zset、starter 概要&#xff1a;本文封装 redis 的API&#xff0c…

【网络安全】新的恶意软件:无文件恶意软件GhostHook正在广泛传播

文章目录 推荐阅读 一种新的恶意软件 GhostHook v1.0 正在一个网络犯罪论坛上迅速传播。这种创新的无文件浏览器恶意软件由 Native-One 黑客组织开发&#xff0c;具有独特的分发方式和多功能性&#xff0c;对各种平台和浏览器构成重大威胁。 GhostHook v1.0 支持 Windows、Andr…

【MAC】Spring Boot 集成OpenLDAP(含本地嵌入式服务器方式)

目录 一、添加springboot ldap依赖&#xff1a; 二、本地嵌入式服务器模式 1.yml配置 2.创建数据库文件&#xff1a;.ldif 3.实体类 4.测试工具类 5.执行测试 三、正常连接服务器模式 1.yml配置 2.连接LDAP服务器配置类&#xff0c;初始化连接&#xff0c;创建LdapTem…

Android Context 详解

一、什么是Context&#xff1f; Context是一个抽象基类。在翻译为上下文&#xff0c;是提供一些程序的运行环境基础信息。 Context下有两个子类&#xff0c;ContextWrapper是上下文功能的封装类&#xff08;起到方法传递的作用&#xff0c;主要实现还是ContextImpl&#xff0…

python基础-数据结构-leetcode刷题必看-heapq --- 堆队列算法

文章目录 堆的定义堆的主要操作堆的构建堆排序heapq模块heapq.heappush(heap, item)heapq.heappop(heap)heapq.heappushpop(heap, item)heapq.heapreplace(heap, item)heapq.merge(*iterables, keyNone, reverseFalse)heapq.nlargest(n, iterable, keyNone)heapq.nsmallest(n, …

Linux基础学习笔记

目录 1、Linux安装 1.1 安装教程 1.2 Linux目录结构 2、Linux常用命令 2.1 ls 2.2 命令分类 2.3 目录处理命令 2.4 操作文件命令 2.5 查找文件命令 2.6 ln链接命令 2.7 进程相关命令 ​编辑3、配置网络 3.1 关闭windows防火墙 3.2 配置好虚拟机的局域网 3.3 配置…

汇编原理(四)[BX]和loop指令

loop&#xff1a;循环 误区&#xff1a;在编译器里写代码和在debug里写代码是不一样的&#xff0c;此时&#xff0c;对于编译器来说&#xff0c;就需要用到[bx] [bx]: [bx]同样表示一个内存单元&#xff0c;他的偏移地址在bx中&#xff0c;比如下面的指令 move bx, 0 move ax,…

永恒之蓝(MS17-010)详解

这个漏洞还蛮重要的&#xff0c;尤其在内网渗透和权限提升。 目录 SMB简介 SMB工作原理 永恒之蓝简原理 影响版本 漏洞复现 复现准备 复现过程 修复建议 SMB简介 SMB是一个协议服务器信息块&#xff0c;它是一种客户机/服务器、请求/响应协议&#xff0c;通过SMB协议…

dubbo复习:(11)使用grpc客户端访问tripple协议的dubbo 服务器

一、服务器端依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

【kubernetes】陈述式资源管理的kubectl命令合集

目录 前言 一、K8s 资源管理操作方式 1、声明式资源管理方式 2、陈述式资源管理方式 二、陈述式资源管理方式 1、kubectl 命令基本语法 2、查看基本信息 2.1 查看版本信息 2.2 查看资源对象简写 2.3 配置kubectl命令自动补全 2.4 查看node节点日志 2.5 查看集群信息…

01 Nginx安装部署(系列篇)

一、安装部署 1、Nginx的发行版本 常用版本分为四大阵营&#xff1a; Nginx 开源版 | https://nginx.org/&#xff1a;赤裸裸的Web服务器、反向代理、负载均衡&#xff08;功能少&#xff0c;开发难度大&#xff09; Nginx Plus 商业版 | https://www.nginx.com/&#xff1a;…

高职物联网专业嵌入式系统开发教学解决方案

前言 随着人工智能与物联网技术的深度融合&#xff0c;物联网&#xff08;AIoT&#xff09;已成为推动产业发展的重要力量。高职物联网专业作为培养技术人才的重要基地&#xff0c;面临着课程体系更新、教学内容优化的迫切需求。嵌入式系统开发作为物联网专业的核心课程之一&a…