《开源大模型食用指南》,一杯奶茶速通大模型!新增Examples最佳实践!

01 「Example系列的前世今生」 我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。 在这里插入图片描述
Self-llm 开源项目是一个围绕开源大模型、针对国内初学者、适合中国宝宝的专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者更好地使用开源大模型,帮助开源、自由的大模型更快融入到普通学习者的生活中。在这里插入图片描述
为了进一步深化学习者对大模型应用的理解,self-llm项目特别增加了大模型最佳实践应用集合。应用将不断更新,以反映最新的技术进展和应用趋势。筹备已久 self-llm examples 系列第一期现已更新,这标志着我们self-llm项目的进一步拓展。Examples 系列的目标是帮助学习者在完成基础知识学习后,通过精选的实际案例,深入理解和掌握大模型应用开发的核心技术。这些案例将涵盖不同的实际应用类型,引导学习者探讨和实践如何有效利用大模型解决实际问题。我们期望,通过这些精心设计的大模型应用项目示范(Demo),学习者能够在完成我们的示例后,不仅全面掌握大模型应用开发的技术要点,还能具备独立进行大模型应用的二次开发或自主开发的能力。项目以教程及blog形式展示。

项目地址↓ 欢迎 Star ⭐️

https://github.com/datawhalechina/self-llm/tree/master/examples

02 Examples系列第一期 Chat嬛嬛 是如何炼成的 在这里插入图片描述

Chat-甄嬛是利用《甄嬛传》剧本中所有关于甄嬛的台词和语句,基于大模型进行LoRA微调得到的模仿甄嬛语气的聊天语言模型。

甄嬛,小说《后宫·甄嬛传》及同名电视剧女主角,原为汉人甄远道之女,后被雍正帝赐姓钮祜禄氏,成为满洲上三旗成员。因容貌酷似已故纯元皇后而入宫,历经宫斗,从青涩少女成长为宫斗高手。在皇帝发现年氏一族野心后,甄嬛协助皇帝剪除政敌,深得宠爱。经历被皇后陷害、出宫为尼、与果郡王相爱等波折后,设计回宫并生下双生子。最终在一系列阴谋中斗垮皇后,毒杀雍正,成为乾隆帝的圣母皇太后,权倾朝野。

Chat-甄嬛,实现了以《甄嬛传》为切入点,打造一套基于小说、剧本的个性化 AI 微调大模型完整流程,通过提供任一小说、剧本,指定人物角色,运行本项目完整流程,让每一位用户都基于心仪的小说、剧本打造一个属于自己的、契合角色人设、具备高度智能的个性化 AI。

Chat-嬛嬛模型累计下载量 15.6kModelscope 地址:https://www.modelscope.cn/models/kmno4zx/huanhuan-chat-internlm2Chat-嬛嬛累计获得 500 starhuahuan-chat 项目地址:https://github.com/KMnO4-zx/huanhuan-chat.gitxlab-huanhuan-chat 项目地址:https://github.com/KMnO4-zx/xlab-huanhuan.git

OK,那接下来我将会带领大家亲自动手,一步步实现 Chat-甄嬛 的训练过程,让我们一起来体验一下吧~

Step 1: 环境准备

本文基础环境如下:

----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------

本文默认学习者已安装好以上 Pytorch(cuda) 环境,如未安装请自行安装。

首先 pip 换源加速下载并安装依赖包

# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install modelscope==1.16.1
pip install transformers==4.43.1
pip install accelerate==0.32.1
pip install peft==0.11.1
pip install datasets==2.20.0

Step 2: 数据准备

首先,我们需要准备《甄嬛传》剧本数据,这里我们使用了《甄嬛传》剧本数据,我们可以查看一下原始数据的格式。

第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。

每一句都有人物及对应的台词,所以就可以很简单的将这些数据处理成对话的形式,如下:

[
    {"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
    {"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
    {"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
    {"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
    {"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
    ...
]

然后再将我们关注的角色的对话提取出来,形成 QA 问答对。对于这样的数据,我们可以使用正则表达式或者其他方法进行快速的提取,并抽取出我们关注的角色的对话。然后很多情况下,我们并没有这样优秀的台词格式数据。所以我们可能就需要从一大段文本中抽取角色的对话数据,然后将其转换成我们需要的格式。比如《西游记白话文》,我们可以看到他的文本是这样的。对于这样的文本,那我们就需要借助大模型的能力,从文本中提取出角色和角色对应的对话。然后再筛选出我们需要的橘角色对话。

可以借助一个小工具:extract-dialogue 从文本中提取对话。

......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。

不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!

”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。

孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......

chat-甄嬛 的原始数据:https://github.com/KMnO4-zx/huanhuan-chat/tree/master/dataset/input/huanhuan西游记白话文原始数据:https://github.com/KMnO4-zx/huanhuan-chat/blob/master/dataset/input/wukong/%E8%A5%BF%E6%B8%B8%E8%AE%B0%E7%99%BD%E8%AF%9D%E6%96%87.txt

最后再将其整理成 json 格式的数据,如下:

[
    {
        "instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
        "input": "",
        "output": "嘘——都说许愿说破是不灵的。"
    },
    {
        "instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
        "input": "",
        "output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
    },
    {
        "instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
        "input": "",
        "output": "出来走走,也是散心。"
    }
]

Chat-嬛嬛 的数据:https://github.com/datawhalechina/self-llm/blob/master/dataset/huanhuan.json

所以,在这一步处理数据的大致思路就是:

1. 从原始数据中提取出角色和对话

2. 筛选出我们关注的角色的对话

3. 将对话转换成我们需要的格式

这一步也可以增加数据增强的环节,比如利用两到三条数据作为 example 丢给LLM,让其生成风格类似的数据。再或者也可以找一部分日常对话的数据集,使用 RAG 生成一些固定角色风格的对话数据。这里大家可以完全放开的大胆去尝试!

Step 3: 模型训练

那这一步,大家可能再熟悉不过了。在self-llm的每一个模型中,都会有一个 Lora 微调模块,我们只需要将数据处理成我们需要的格式,然后再调用我们的训练脚本即可。此处选择我们选择 LLaMA3_1-8B-Instruct 模型进行微调,首先还是要下载模型,创建一个model_download.py文件,输入以下内容:

import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os

model_dir = snapshot_download('LLM-Research/Meta-Llama-3.1-8B-Instruct', cache_dir='/root/autodl-tmp', revision='master')

注意:记得修改 cache_dir 为你的模型下载路径哦~

其次,准备训练代码。对于熟悉 self-llm 的同学来说,这一步可能再简单不过了,在此处我会在当前目录下放置train.py,大家修改其中的数据集路径和模型路径即可。

当然也可以使用 self-llm 中的 lora 微调教程。

教程地址:https://github.com/datawhalechina/self-llm/blob/master/models/LLaMA3/04-LLaMA3-8B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md

在命令行运行以下指令:

python train.py

注意:记得修改 train.py 中的数据集路径和模型路径哦~训练大概会需要 20 ~ 30 分钟的时间,训练完成之后会在output目录下生成lora模型。可以使用以下代码进行测试:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from peft import PeftModel

mode_path = './LLM-Research/Meta-Llama-3___1-8B-Instruct'
lora_path = './output/llama3_1_instruct_lora/checkpoint-699' # 这里改称你的 lora 输出对应 checkpoint 地址

# 加载tokenizer
tokenizer = AutoTokenizer.from_pretrained(mode_path, trust_remote_code=True)

# 加载模型
model = AutoModelForCausalLM.from_pretrained(mode_path, device_map="auto",torch_dtype=torch.bfloat16, trust_remote_code=True).eval()

# 加载lora权重
model = PeftModel.from_pretrained(model, model_id=lora_path)

prompt = "嬛嬛你怎么了,朕替你打抱不平!"

messages = [
        {"role": "system", "content": "假设你是皇帝身边的女人--甄嬛。"},
        {"role": "user", "content": prompt}
]

input_ids = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

# print(input_ids)

model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512)

generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print('皇上:', prompt)
print('嬛嬛:',response)
皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。

接下来,我们就可以使用这个嬛嬛模型进行对话了~
有兴趣的同学可以尝试使用 self-llm 中的其他模型进行微调,检验你的学习成果!写在最后Chat-嬛嬛是在去年LLM刚火起来的时候,我们觉得如果不做点什么的话,可能会错过很多有趣的事情。 于是就和几个小伙伴一起,花了很多时间,做了这个项目。在这个项目中,我们学到了很多,也遇到了很多问题,但是我们都一一解决了。并且Chat-嬛嬛也获得了奖项,让项目得到了很多人的关注。所以,我觉得这个项目是非常有意义的,也是非常有趣的。

  • 2023 讯飞星火杯人认知大模型场景创新赛 Top50
  • 2024 书生·浦语大模型挑战赛(春季赛)创意应用奖 Top12**

Chat-嬛嬛贡献者

  • 宋志学(Datawhale成员)
  • 邹雨衡(Datawhale成员)
  • 王熠明(Datawhale成员)
  • 邓宇文(Datawhale成员)
  • 杜 森(Datawhale成员)
  • 肖鸿儒(Datawhale成员)

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

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

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

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值