【手把手带你微调 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,一经查实,立即删除!

相关文章

自然语言处理学习中英文翻译语料库

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;学习中英文翻译需要高质量的双语语料库。以下是一些常用的中英文翻译语料库资源&#xff1a; OpenSubtitles&#xff1a; 网站&#xff1a; OpenSubtitles 描述&#xff1a;OpenSubtitles 提供了大量的电影和电视剧…

JavaScript四种输出

window.alert()&#xff1a; 使用警告框来显示数据 如&#xff1a; <!DOCTYPE html> <html> <body> <script>window.alert("我来了"); </script></body> </html> 浏览器打开就会显示一个弹窗“我来了” innerHTML&…

VUE项目引入微信JSSDK 使用微信api

大佬地址&#xff1a;VUE项目引入微信JSSDK 实现微信自定义分享_vue中如何引入wx sdk-CSDN博客 支付功能&#xff1a; 第一个接口 是初始化 ssdk的 第二个接口 是调用微信支付的 jsApiPayBefore().then(res > {let getMsg res.dataswx.config({debug: false, //生产环境需…

【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;是需要做到同步&#…

【nnUNetv2进阶】十、nnUNetv2 魔改网络-小试牛刀-引入注意力机制EPSA

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点: 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。 自动化流程:nnUNet包含了从数据预处理到模型训练、验证…

Vue 3 中的 emit(‘update_modelValue‘):更灵活的双向绑定

你好&#xff0c;我是小白Coding日志&#xff0c;一个热爱技术的程序员。在这里&#xff0c;我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客&#xff0c;一起在技术的世界里探索前行吧&#xff01; 随着 Vue 3 的发…

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

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

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

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

代码随想录算法训练营day38 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 按照左边界排序&#xff0c;直接求重叠区间 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(intervals) < 1:return 0intervals.sort(keylambda x: x[0])end intervals[0][1]result 0for i in range(1,…

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

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

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

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

PHP模块pdo_sqlite.so: undefined symbol: sqlite3_column_table_name

安装 php-sqlite3 之后&#xff0c;执行php -m 命令有警告&#xff0c;如下 PHP Warning: PHP Startup: Unable to load dynamic library pdo_sqlite (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No su…

理论知识.质数打表

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是理论知识.质数打表 为什么需要质数打表 我们已经学习了如何判断一个数是不是质数了&#xff0c;但是还不够。假设要判断很多很多个数是不是质数的时候&#xff0c;之前的学习的…

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

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

【AI】人工智能在现代科技中的应用和未来发展趋势

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是指计算机系统能够模仿人类智能进行一系列任务的能力。在现代科技中&#xff0c;人工智能的应用日益广泛&#xff0c;并对多个领域产生了巨大影响。 首先&#xff0c;在商业领域&#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…