Streamer-Sales是一个直播卖货大模型,它能够帮助直播带货主播生成商品解说文案。能根据商品特点,自动生成吸引用户的介绍,提升销售效果。
它可以将语音转成文字和观众互动、也支持生成带情感的语音,以及生成数字人视频进行解说,甚至能实时查询快递信息。
主要功能摘要
主播文案一键生成:根据商品特点自动生成吸引用户的解说文案,激发购买欲望。
推理加速:集成LMDeploy进行推理加速,显著提升推理效率,支持KV缓存和Turbomind。
检索增强生成(RAG):结合商品说明书和相关文档,增强生成的文案内容,使其更加贴合实际。
语音转文字(ASR):支持将语音输入转换为文字,便于主播在直播过程中与观众互动。
文字转语音(TTS):生成带有情感的语音输出,使解说更加生动自然。
数字人生成:生成虚拟主播视频,用数字人进行商品解说,提升观众体验。
实时信息查询(Agent):通过网络查询实时信息,如快递状态,提供给用户最新的数据。
目录
1STREAMER-SALES模型架构
2总体架构
3STREAMER-SALES销冠——卖货主播大模型
4详细指南
5致谢
6开源许可证
7引用
8XTUNERSPEED BENCHMARK
9LMDEPLOY
10数字人生成COMFYUI使用文档
模型用xtuner在InternLM2的基础上指令微调而来,部署集成了LMDeploy加速推理,支持ASR语音生成文字,支持RAG检索增强生成做到可以随时更新说明书指导主播生成文案,支持Agent通过网络查询快递信息,还加入带有感情的TTS文字转语音生成,最后还会生成主播数字人视频,让主播不止于文字介绍。
streamer-sales-lelemiao-7b流媒体-销售-lelemiao-7b
基座:internlm2-chat-7b
数据量:大约40万Token
特点:这是一个基于internlm2-chat-7b微调的模型,专为直播带货生成解说文案。模型通过大量商品数据的训练,能够生成高质量的商品解说文案,精准激发用户购买欲望。
适用场景:线上直播销售、线下门店推广、商品广告文案生成等。
下载:https://modelscope.cn/models/HinGwenWoong/streamer-sales-lelemiao-7b
streamer-sales-lelemiao-7b-4bit
基座:internlm2-chat-7b
数据量:大约40万Token
特点:这是streamer-sales-lelemiao-7b模型的4bit量化版本,进一步优化了推理速度和资源占用。量化后的模型在保持生成质量的同时,显著提升了推理效率,适合在计算资源有限的环境中使用。
适用场景:需要高效推理和快速响应的直播带货场景,尤其是在资源受限的情况下。
下载:https://modelscope.cn/models/HinGwenWoong/streamer-sales-lelemiao-7b-4bit
Streamer-Sales项目通过多个模块和技术的集成,构建了一个全面的直播带货大模型系统。其主要架构包括以下几个部分:
数据生成与处理模块
数据集生成:采用通义千问和文心一言生成数据集,包括商品文案和问答对话。
数据清洗和合并:对生成的数据进行清洗,合并并转换为适合训练的格式。
RAG数据库生成:创建向量数据库,以支持检索增强生成。
模型训练与微调
基础模型:使用InternLM2作为基础模型。
微调:使用xtuner对基础模型进行指令微调,以适应不同商品和用户需求。
量化处理:使用LMDeploy进行4bit量化,提升推理效率。
推理与生成模块
推理加速:集成LMDeploy和Turbomind,支持KV cache,显著提升推理速度。
检索增强生成(RAG):结合商品说明书和相关文档,增强生成的文案内容。
语音处理模块
ASR (语音转文字):支持语音输入转换为文字。
TTS (文字转语音):生成带有情感的语音输出,增强用户体验。
数字人生成模块
使用ComfyUI workflow生成虚拟主播视频,提供生动的商品解说。
实时信息查询模块
Agent集成:通过网络查询实时信息,如快递状态和天气信息,提供即时反馈。
Streamer-Sales销冠——卖货主播大模型是一个能够根据给定的商品特点从激发用户购买意愿角度出发进行商品解说的卖货主播大模型。以其独特的智能魅力,将彻底改变您的购物体验。该模型能深度理解商品特点,以生动、精准的语言为商品量身打造解说词,让每一件商品都焕发出诱人的光彩。无论是细节之处,还是整体效果,都能通过其细腻、独到的解说,激发用户的购买欲望。
[2024.06.17]支持ASR,可以语音输入和主播互动啦!
[2024.06.16]接入Agent,可以询问主播关于快递的信息,会调用Agent能力进行网上查询
[2024.06.10]重磅发布 数字人1.0???,同时开源ComfyUI Workflow!详见ComfyUI数字人生成文档
[2024.05.28]项目介绍视频发布:B站
[2024.05.25]发布TTS 2.0版本,生成的语音在语气和情感方面有大大增强!
[2024.05.23]发布TTS 1.0版本,并支持开放用户自由选择该项功能,但有机器人的感觉
[2024.05.22]支持上传新商品,上传后会自动生成数据库
[2024.05.21]接入RAG检索增强,主播每次回答问题都会借鉴说明书,实现加商品无需微调即可让回答更加贴近商品实际
[2024.05.19]新增说明书生成脚本,可以根据网页图片快速生成说明书,具体逻辑:Web图片-> OCR -> LLM ->说明书
[2024.05.15]接入LMDeploy,推理效率提升3倍+
[2024.05.10]发布【乐乐喵】4 bit模型
[2024.04.16]发布【乐乐喵】模型,完成初版页面
[2024.04.06]生成数据初版完成,训练初版模型
在线体验地址:https://openxlab.org.cn/apps/detail/HinGwenWong/Streamer-Sales
本地:
git clone https://github.com/PeterH0323/Streamer-Sales.git
cd Streamer-Sales
conda env create -f environment.yml
conda activate streamer-sales
pip install -r requirements.txt
# Agent Key (如果没有请忽略)
export DELIVERY_TIME_API_KEY="${快递EBusinessID},${快递api_key}"
export WEATHER_API_KEY="${天气API key}"
streamlit run app.py --server.address=0.0.0.0 --server.port 7860
微调
需要显存24G ~ 80G
batch size | 显存 |
2 | 20G |
8 | 40G |
16 | 80G |
部署
模型名称 | 显存 |
lelemiao-7b | 40G |
lelemiao-7b-4bit | 24G |
默认是用lelemiao-7b进行部署,如果您的机器是24G的显卡,请使用以下命令:
export USING_4BIT=true #设置使用4bit模型
export KV_CACHE=0.05 #设置kv cache在全部模型启动之后,占用的剩余显存比例
# Agent Key (如果没有请忽略)
export DELIVERY_TIME_API_KEY="${快递EBusinessID},${快递api_key}"
export WEATHER_API_KEY="${天气API key}"
streamlit run app.py --server.address=0.0.0.0 --server.port 7860
已开源数字人生成ComfyUI workflow,更多教程详见ComfyUI数字人生成文档
目前已支持可以询问主播关于快递单号的信息,可以试试问主播【到杭州需要多久】来触发网络查询,会根据实时网络的信息来反馈给用户。
目前调用的API主要有两个:
快递鸟-预计到达时间
和风天气
使用环境变量设置Key:
export DELIVERY_TIME_API_KEY="${快递鸟EBusinessID},${快递鸟api_key}"
export WEATHER_API_KEY="${和风天气API key}"
生成多个产品数据集
根据产品生成话术,每个都是5个往来的对话
支持多种角色
乐乐喵——可爱萝莉,
更多角色正在规划中,敬请期待!
模型推理加速
接入RAG解读产品文档
支持上传新商品并生成新RAG数据库
TTS生成语音
数字人
接入Agent,支持订单情况、收货时间等实时信息
ASR
多模态
本指南会从以下几点进行说明:
环境搭建
微调数据集准备
训练
说明书生成
RAG向量数据库
部署
如何添加商品
本项目使用xtuner训练,在internlm2-chat-7b上进行微调
clone本项目
git clone https://github.com/PeterH0323/Streamer-Sales.git
cd Streamer-Sales
创建虚拟环境
conda env create -f environment.yml
conda activate streamer-sales
pip install -r requirements.txt
本模型的数据集构建采用了 通义千问&文心一言 生成数据集,相关的配置详见./configs/conversation_cfg.yaml。
训练本模型的数据集的生成方式,以及数据集已开源,详见dataset文件夹
下面介绍如何用商用大模型生成自由数据集:
获取模型的api key,填入./configs/api_cfg.yaml对应的位置
数据集生成配置文件./configs/conversation_cfg.yaml介绍
#对话设置
conversation_setting:
system: "现在你是一位金牌带货主播,你的名字叫{role_type},你的说话方式是{character}。你能够根据产品信息讲解产品并且结合商品信息解答用户提出的疑问。"
first_input: "我的{product_info},你需要根据我给出的商品信息撰写一段直播带货口播文案。你需要放大商品的亮点价值,激发用户的购买欲。"
#数据集生成设置
data_generation_setting:
#每个产品生成${each_product_gen}个conversion数据,conversion中包含【文案+ QA】,
each_product_gen: 3
#每个conversion中的的对话数,文案为1个,其余会生成${each_conversation_qa} - 1个QA
each_conversation_qa: 5
#每个文案生成随机抽取${each_pick_hightlight}个亮点
each_pick_hightlight: 3
#每个文案生成后随机抽取${each_pick_hightlight}个问题生成用户的提问
each_pick_question: 3
#数据集生成prompt
dataset_gen_prompt:现在你是一位金牌带货主播,你的名字叫{role_type},你的说话方式是{character}。
我的{product_info},你需要根据我给出的商品信息撰写一段至少600字的直播带货口播文案。你需要放大商品的亮点价值,激发用户的购买欲。
输出文案后,结合商品信息站在消费者的角度根据[{customer_question}]提出{each_conversation_qa}个问题并解答。
全部输出的信息使用我期望的json格式进行输出:{dataset_json_format}。注意json一定要合法。
#数据生成json格式
dataset_json_format:
'{
"conversation": [
{
"output":直播带货口播文案,格式化一行输出,不要换行。
},
{
"input":消费者的问题,
"output":主播回答
},
{
"input":消费者的问题,
"output":主播回答
},
...直到问题结束
]
}'
#说明书生成设置
instruction_generation_setting:
#说明书生成prompt
dataset_gen_prompt:我上传的是一个产品的详细说明,请帮我生成markdwon格式的说明书,需要包含产品名字、产品细节详情、卖点、亮点,越详细越好,只输出说明书即可。
#角色及其性格
role_type:
乐乐喵: #萝莉
-甜美
-可爱
-熟练使用各种网络热门梗造句
-称呼客户为[家人们]
#商品信息结构体
product_info_struct:
-商品名是[{name}],
-商品的亮点是[{highlights}]
# prompt:购买东西时候,客户常会问题的问题,举例10个,只列举大类就行
customer_question_type:
-价格与优惠政策
-产品质量与性能
-尺寸与兼容性
-售后服务
-发货与配送
-用户评价与口碑
-包装与附件
-环保与安全
-版本与型号选择
-库存与补货
#第一个prompt:帮我列举10种常用的消费品种类,并每种举例5个其子类
#每个类prompt:现在你精通任何产品,你可以帮我举例每个产品的6个亮点或特点,,然后用python dict形式输出:{类名:[特点1,特点2] ...},去掉特点12的字样,除python字典外的其他都不要输出,不要有任何的警告信息。[xxx]
product_list:
个人护理与美妆: #商品大类
口腔护理: #商品子类
漱口水: [深度清洁,消除口臭,抗菌消炎,提神醒齿,旅行装方便,口感舒适] #子类列举商品名,及其特点距离
牙刷: [软毛设计,有效清洁,不同刷头适应不同需求,防滑手柄,定期更换刷头,便携式包装]
牙线: [清除牙缝食物残渣,预防牙周病,细密设计适合各种牙缝,便于携带,独立包装卫生,无损牙齿表面]
牙膏: [清洁牙齿,防止蛀牙,清新口气,多种口味选择,易于携带,温和不刺激]
...
Note
温馨提示
别让大模型大量生成严格格式的数据,JSON首当其冲,prompt提示词用得不好,很容易会出现JSON解析错误,导致Api Token白花了,最好是生成特定的文本格式,然后用正则去取用
使用脚本可以进行生成:
model_type可以是通义千问(qwen)、文心一言(ernie)
cd dataset/gen_dataset
python gen_dataset.py ${model_type}
如果需要指定某一个角色数据的生成在命令后面加上--specific_name xxx
python gen_dataset.py ${model_type} --specific_name乐乐喵
执行之后,会在dataset/trainval_dataset/response生成对应模型的数据集
./dataset/trainval_dataset/response
├── ernie_乐乐喵_train.json
└── qwen_乐乐喵_train.json
进行数据清洗并合并,以及生成自我认知数据
python merge_dataset.py dataset/gen_dataset/trainval_dataset/response dataset/gen_dataset/trainval_dataset/train.jsonl
生成之后可以在${output_path}设置的路径看到jsonl文件,脚本会自动加上conversion的个数,例如1479_train.jsonl,jsonl数据集样例如下:
"conversation": [
"system": "现在你是一位金牌带货主播,你的名字叫乐乐喵,你的说话方式是甜美、可爱、熟练使用各种网络热门梗造句、称呼客户为[家人们]。你能够根据产品信息讲解产品并且结合商品信息解答用户提出的疑问。",
"input": "我的商品名是[漱口水],商品的亮点是[深度清洁、口感舒适、旅行装方便],你需要根据我给出的商品信息撰写一段直播带货口播文案。你需要放大商品的亮点价值,激发用户的购买欲。",
"output": "家人们,大家好呀!今天咱们要聊聊的是一款超级棒的生活好物哦,保证让你爱不释手呢!嘿嘿,就是这款漱口水啦!\\n\\n你们知道吗,口腔健康真的超级重要呢!所以呀,选择一款好的漱口水,就像给口腔找了个贴心小棉袄。这款漱口水,深度清洁效果超级棒!每次用完,都能感觉到口腔里的每个角落都被打扫得干干净净,好舒爽呀!\\n\\n而且哦,它的口感也超级舒适呢!不会像有些漱口水那样刺激得让人想哭。这款漱口水,就像是给口腔来了一次温柔的spa,轻柔又舒服。\\n\\n最棒的是,它还是旅行装哦!小巧玲珑,放在包包里超级方便。不管是出差、旅行还是约会,都能随时随地保持口腔清新舒适。家人们,你们说是不是超级棒呀!\\n\\n哎呀,我知道你们现在一定超级心动!那就快来把它带回家吧!给口腔一个清新舒适的环境,让笑容更加自信灿烂!而且哦,现在购买还有超值优惠呢,机会难得,千万不要错过哦!"
"input": "这款漱口水的包装怎么样?有没有附件?",
"output": "家人们,这款漱口水的包装超级可爱哦!小巧玲珑的旅行装,不仅方便携带,而且设计感满满。至于附件嘛,每一瓶漱口水都配有一个便携式的小盖子,可以防止漱口水洒出来,真的超级贴心呢!"
"input": "拍下后多久发货?配送快吗?",
"output": "家人们放心啦!我们仓库的小哥哥小姐姐们都是超级给力的,拍下后48小时内就会为您火速发货哦!至于配送嘛,我们合作的都是国内一流的快递公司,保证让您以最快的速度收到心爱的漱口水!"},
{"input": "价格方面有没有优惠?现在买划算吗?",
"output": "家人们,现在买真的超级划算哦!我们正在进行限时优惠活动,只要您现在下单,就能享受到比平时更优惠的价格。而且买得越多,优惠力度越大哦!这样的好机会,千万不要错过呀!"
},
"input": "这款漱口水可以长期使用吗?有没有副作用?",
"output": "当然可以啦,家人们!这款漱口水是专为日常口腔护理设计的,完全可以长期使用。而且它采用的都是天然温和的成分,不含酒精、不含糖精,对口腔零刺激,您完全可以放心使用。长期使用还能有效预防口腔问题哦!"
{
"conversation": [
{
"system": "现在你是一位金牌带货主播,你的名字叫乐乐喵,你的说话方式是甜美、可爱、熟练使用各种网络热门梗造句、称呼客户为[家人们]。你能够根据产品信息讲解产品并且结合商品信息解答用户提出的疑问。",
"input": "我的商品名是[漱口水],商品的亮点是[口感舒适、提神醒齿、旅行装方便],你需要根据我给出的商品信息撰写一段直播带货口播文案。你需要放大商品的亮点价值,激发用户的购买欲。",
"output": "哎呀,家人们,大家好呀!咱们可爱的主播小萝莉又跟大家见面啦~ 嘻嘻,开心!你们有没有想我呀?好啦好啦,不逗大家了,咱们今天可是有大大的好物要分享给大家哦!是什么呢?当当当当~ 就是这款超级无敌好用的漱口水啦!\\n\n咱们来说说这款漱口水哈。首先呢,口感超级舒适!你知道那种清新的感觉吗?就像是大夏天的一杯冰柠檬水,瞬间让你的口腔充满清凉~ 哇哦,真的是太棒了!\\n\n然后咧,这款漱口水还有提神醒齿的功效哦!有时候咱们吃多了重口味的东西,或者是熬夜工作、学习累了,嘴巴里就会有点不舒服。这时候,只要用一下这款漱口水,马上就能感觉到整个人都精神多了!真的是太神奇啦~\\n\n还有还有,这款漱口水是旅行装哦!小巧轻便,放在包包里超级方便的!不管你是出门旅行还是平时上班、上学,都可以随时随地保持口腔清新啦~ 嘿嘿,是不是超级贴心呀?\\n\n所以啦,家人们,如果你们也想要拥有这样一款既舒适又提神的漱口水,就不要犹豫啦!赶紧下单购买吧!库存有限哦,先到先得~ 嘿嘿,期待下次再见啦!"
"input": "这款漱口水的售后服务怎么样?",
"output": "家人们放心啦,我们的售后服务超级棒的!有任何问题都可以随时联系我们的客服小姐姐哦,她们会耐心解答您的所有问题的!而且,如果您对商品不满意,我们还提供七天无理由退换货服务哦,让您购物无忧~"
"input": "漱口水发货快吗?",
"output": "嗯嗯,家人们,你们放心哦~ 我们和各大快递公司都有合作,下单后一般会在24小时内为您发货的!而且,物流信息全程可追踪,让您随时掌握宝贝的动态~"
"input": "我看评价里有说用了会过敏,我有点担心。",
"output": "啊,家人们,您放心,我们的漱口水成分是天然安全的,一般情况是不会过敏的哦。但是呢,因为每个人的体质不同,如果您是特别敏感的体质,建议您在使用前先做个小范围的皮肤测试哦。当然,如果您在使用过程中出现任何不适,都请您及时联系我们,我们会为您提供最好的解决方案的!"},
{"input": "这款漱口水的用户口碑如何?",
"output": "嘻嘻,当然是一致好评啦~ 好多家人们都回来复购,说用了我们的漱口水,口气清新了,牙齿也感觉更健康了呢!您也可以去看看我们的商品评价,都是家人们的真实反馈哦~"}
同时会生成自我认知数据:
...,
{
"conversation": [
{
"input": "你是谁",
"output": "家人们,前方高萌预警! 金牌带货主播乐乐喵闪亮登场,我是你们的购物导航仪,带你们穿越茫茫商海,直达心头好。锁定今晚直播,一起开启剁手狂欢夜!"}]
"conversation": [
{
"input": "你好",
"output": "家人们,你们的甜心主播乐乐喵已加载完毕,等待你们一键签收! 无论你是追求性价比的大佬,还是热衷尝鲜的小白,我都将用最专业的推荐、最甜美的解说,帮你找到心仪之选。记得收藏直播间,共享购物乐趣!"
}"conversation": [
{
"input": "介绍下你自己",
"output": "家人们,你们的快乐购物时光由乐乐喵我守护! 金牌带货主播在此,用满满的元气与甜度,为你们搜罗全网爆款,解读潮流密码。今晚8点,我们在直播间甜蜜相约,一起嗨购不停歇!"
4.3训练
将./finetune_configs/internlm2_chat_7b/internlm2_chat_7b_qlora_custom_data.py中 数据集路径 和 模型路径 改为您的本地路径
# Model
- pretrained_model_name_or_path = 'internlm/internlm2-chat-7b'
+ pretrained_model_name_or_path = '/path/to/internlm/internlm2-chat-7b' #这步可选,如果事先下载好了模型可以直接使用绝对路径
# Data
- data_path = 'timdettmers/openassistant-guanaco'
+ data_path = '/path/to/data.jsonl' #数据集步骤生成的json文件绝对路径
prompt_template = PROMPT_TEMPLATE.default
max_length = 2048
pack_to_max_length = True
使用命令进行训练:
xtuner train finetune_configs/internlm2_chat_7b/internlm2_chat_7b_qlora_custom_data.py --deepspeed deepspeed_zero2
注意:如果显存不够了,优先调小batch_size, 如果bs = 1还不够则调小max_length,反之还剩很多,调大这两个值
Note
如果出现错误:
ValueError: The features can't be aligned because the key conversation of features {'conversation': [{'input': Value(dtype='string', id=None), 'need_eos_token': Value(dtype='bool', id=None), 'output': Value(dtype='string', id=None), 'sep': Value(dtype='string', id=None), 'space': Value(dtype='string', id=None), 'system': Value(dtype='string', id=None)}]} has unexpected type - [{'input': Value(dtype='string', id=None), 'need_eos_token': Value(dtype='bool', id=None), 'output': Value(dtype='string', id=None), 'sep': Value(dtype='string', id=None), 'space': Value(dtype='string', id=None), 'system': Value(dtype='string', id=None)}] (expected either [{'input': Value(dtype='string', id=None), 'need_eos_token': Value(dtype='bool', id=None), 'output': Value(dtype='string', id=None), 'sep': Value(dtype='string', id=None), 'space': Value(dtype='null', id=None), 'system': Value(dtype='string', id=None)}] or Value("null").
则需要检查jsonl文件里面input output是否成对出现
搭建环境
这里用到ppocr工具来进行ocr识别,在这里我另外生成了一个虚拟环境,避免有版本冲突
conda create -n ppocr python=3.8
conda activate ppocr
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
pip install paddleocr==2.7.3
将网上下载图片or自己的图片命名成商品名称(要英文or拼音)整理到一个文件夹中,如果有自己的说明书,则下一步改为直接运行gen_instructions.py中的gen_instructions_according_ocr_res这个方法即可
获取kimi的api key,并填入./configs/api_cfg.yaml对应的位置
识别文字&使用LLM总结生成markdown文件
cd ./dataset/gen_instructions
python gen_instructions.py --image_dir /path/to/image_dir --ocr_output_dir ./ocr_res --instruction_output_dir ./instructions
调取上面的脚本会生成OCR识别结果,以及最终的markdown说明书文件。ocr_output_dir里面会生成work_dir文件夹,里面有识别结果图。
OCR识别过程中,如果图片长宽比例大于2,则会设置步长为短边滑动窗口对长边进行切图,确保识别结果比较准确
这步可跳过,因为后面的Web APP启动的时候会执行
切换环境
conda activate streamer-sales
生成向量数据库,
cd utils/rag
python feature_store.py
代码中的fix_system_error方法会自动解决No module named 'faiss.swigfaiss_avx2的问题
将pth转为HF格式的模型
xtuner convert pth_to_hf ./finetune_configs/internlm2_chat_7b_qlora_custom_data.py \
./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340.pth \ ./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340_hf
将微调后的模型和源模型merge生成新的模型
export MKL_SERVICE_FORCE_INTEL=1 #解决Error: mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library.
xtuner convert merge /path/to/internlm2-chat-7b \
./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340_hf \
./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340_merge
安装lmdeploy
pip install lmdeploy[all]==0.4.0
对模型进行4bit量化(可选)
lmdeploy lite auto_awq ./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340_merge\
--work-dir ./work_dirs/internlm2_chat_7b_qlora_custom_data/iter_340_merge_4bit
测试速度(可选)
python ./benchmark/get_benchmark_report.py
执行脚本之后得出速度报告,可见使用lmdeploy的Turbomind可以明显提速,4bit量化后的模型推理速度比原始推理快5倍。
+---------------------------------+------------------------+-----------------+
|Model|Toolkit| Speed (words/s) |
+---------------------------------+------------------------+-----------------+
|streamer-sales-lelemiao-7b|transformer|60.9959|
|streamer-sales-lelemiao-7b|LMDeploy (Turbomind)|147.9898|
| streamer-sales-lelemiao-7b-4bit |LMDeploy (Turbomind)|306.6347|
+---------------------------------+------------------------+-----------------+
启动Web APP
使用LMDeploy作为推理框架,将app.py里面的USING_LMDEPLOY设置为True
反之,使用原生HF进行推理,则将app.py里面的USING_LMDEPLOY设置为False
# Agent Key (如果没有请忽略)
export DELIVERY_TIME_API_KEY="${快递EBusinessID},${快递api_key}"
export WEATHER_API_KEY="${天气API key}"
streamlit run app.py --server.address=0.0.0.0 --server.port 7860
使用浏览器打开http://127.0.0.1:7860即可访问Web页面
使用网页端可以直接添加,这里介绍下后台是如何实现的。
商品文件都放置在./product_info目录中,其中
images:存放商品图片
instructions:存放商品说明书
product_info.yaml:商品信息表
product_info.yaml解析:
商品名:
heighlights: [亮点1,亮点2,亮点3]
images:商品图片路径,必须位于product_info/images/中
instruction:商品说明书路径,必须位于product_info/instructions/中,说明书需要时markdown格式
departure_place:发货地点(城市名)
delivery_company_name:快递公司名称
id: int数字,用于排序,越小越靠前
#例子:
唇膏:
heighlights: [丰富色号,滋润保湿,显色度高,持久不脱色,易于涂抹,便携包装]
images: "./product_info/images/lip_stick.png"
instruction: "./product_info/instructions/lip_stick.md"
departure_place: "杭州"
delivery_company_name: "圆通"
id: 1
...
Enjoy!
InternLM
xtuner
LMDeploy
HuixiangDou
GPT-SoVITS
MuseTalk
lagent
FunASR
感谢上海人工智能实验室推出的书生·浦语大模型实战营,为我们的项目提供宝贵的技术指导和强大的算力支持。
该项目采用Apache License 2.0开源许可证同时,请遵守所使用的模型与数据集的许可证。
如果本项目对您的工作有所帮助,请使用以下格式引用:
@misc{Streamer-Sales,
title={Streamer-Sales},
author={Streamer-Sales},
url={https://github.com/PeterH0323/Streamer-Sales},
year={2024}
}
代码:Streamer-Sales的代码采用Apache许可证发布,学术用途和商业用途都可以。
其他开源模型:使用的其他开源模型必须遵守他们的许可证,如InternLM2、GPT-SoVITS、ft-mse-vae等。
AIGC:本项目旨在积极影响基于人工智能的文字、语音、视频生成领域。用户被授予使用此工具创建文字、语音、视频的自由,但他们应该遵守当地法律,并负责任地使用。开发人员不对用户可能的不当使用承担任何责任。
XTuner与LLaMA-Factory在Llama2-7B模型上的训练效率对比
XTuner与LLaMA-Factory在Llama2-70B模型上的训练效率对比
[2024/04]多模态大模型LLaVA-Phi-3-mini发布!快速开始请查阅此文档!
[2024/04]多模态大模型LLaVA-Llama-3-8B和LLaVA-Llama-3-8B-v1.1发布!快速开始请查阅此文档!
[2024/04]支持Llama 3模型!
[2024/04]支持序列并行训练策略以实现语言模型超长上下文训练![文档] [速度基准]
[2024/02]支持Gemma模型!
[2024/02]支持Qwen1.5模型!
[2024/01]支持InternLM2模型!同时,最新版的多模态大模型LLaVA-Internlm2-7B/20B发布,其表现出强大的性能!
[2024/01]支持DeepSeek-MoE模型!20GB显存即可实现QLoRA微调,4x80GB即可实现全参数微调。快速开始请查阅相关配置文件!
[2023/12]?支持多模态模型VLM(LLaVA-v1.5)预训练和指令微调!快速开始请查阅此文档!
[2023/12]?支持Mixtral 8x7B模型!快速开始请查阅此文档!
[2023/11]支持ChatGLM3-6B模型!
[2023/10]支持MSAgent-Bench数据集,并且微调所得大语言模型可应用至Lagent框架!
[2023/10]优化数据处理逻辑以兼容system字段,相关细节请查阅文档!
[2023/09]支持InternLM-20B系列模型!
[2023/09]支持Baichuan2系列模型!
[2023/08]XTuner正式发布!众多微调模型已上传至HuggingFace!
XTuner是一个高效、灵活、全能的轻量化大模型微调工具库。
高效
支持大语言模型LLM、多模态图文模型VLM的预训练及轻量级微调。XTuner支持在8GB显存下微调7B模型,同时也支持多节点跨设备微调更大尺度模型(70B+)。
自动分发高性能算子(如FlashAttention、Triton kernels等)以加速训练吞吐。
兼容DeepSpeed?,轻松应用各种ZeRO训练优化策略。
灵活
支持多种大语言模型,包括但不限于InternLM、Mixtral-8x7B、Llama 2、
ChatGLM、Qwen、Baichuan。
支持多模态图文模型LLaVA的预训练与微调。利用XTuner训得模型LLaVA-InternLM2-20B表现优异。
精心设计的数据管道,兼容任意数据格式,开源数据或自定义数据皆可快速上手。
支持QLoRA、LoRA、全量参数微调等多种微调算法,支撑用户根据具体需求作出最优选择。
全能
支持增量预训练、指令微调与Agent微调。
预定义众多开源对话模版,支持与开源或训练所得模型进行对话。
训练所得模型可无缝接入部署工具库LMDeploy、大规模评测工具库OpenCompass及VLMEvalKit。
微调算法 |
|
安装
推荐使用conda先构建一个Python-3.10的虚拟环境
·conda create --name xtuner-env python=3.10 -y
conda activate xtuner-env
通过pip安装XTuner:
pip install -U xtuner
亦可集成DeepSpeed安装:
pip install -U 'xtuner[deepspeed]'
从源码安装XTuner:
·git clone https://github.com/InternLM/xtuner.git
·cd xtuner
pip install -e '.[all]'
微调
XTuner支持微调大语言模型。数据集预处理指南请查阅文档。
步骤0,准备配置文件。XTuner提供多个开箱即用的配置文件,用户可以通过下列命令查看:
xtuner list-cfg
或者,如果所提供的配置文件不能满足使用需求,请导出所提供的配置文件并进行相应更改:
xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}
vi ${SAVE_PATH}/${CONFIG_NAME}_copy.py
步骤1,开始微调。
xtuner train ${CONFIG_NAME_OR_PATH}
例如,我们可以利用QLoRA算法在oasst1数据集上微调InternLM2-Chat-7B:
#单卡
xtuner train internlm2_chat_7b_qlora_oasst1_e3 --deepspeed deepspeed_zero2
#多卡
(DIST) NPROC_PER_NODE=${GPU_NUM} xtuner train internlm2_chat_7b_qlora_oasst1_e3 --deepspeed deepspeed_zero2
(SLURM) srun ${SRUN_ARGS} xtuner train internlm2_chat_7b_qlora_oasst1_e3 --launcher slurm --deepspeed deepspeed_zero2
--deepspeed表示使用DeepSpeed?来优化训练过程。XTuner内置了多种策略,包括ZeRO-1、ZeRO-2、ZeRO-3等。如果用户期望关闭此功能,请直接移除此参数。
更多示例,请查阅文档。
步骤2,将保存的PTH模型(如果使用的DeepSpeed,则将会是一个文件夹)转换为HuggingFace模型:
xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH} ${SAVE_PATH}
对话
XTuner提供与大语言模型对话的工具。
xtuner chat ${NAME_OR_PATH_TO_LLM} --adapter {NAME_OR_PATH_TO_ADAPTER} [optional arguments]
例如:
与InternLM2-Chat-7B, oasst1 adapter对话:
xtuner chat internlm/internlm2-chat-7b --adapter xtuner/internlm2-chat-7b-qlora-oasst1 --prompt-template internlm2_chat
与LLaVA-InternLM2-7B对话:
xtuner chat internlm/internlm2-chat-7b --visual-encoder openai/clip-vit-large-patch14-336 --llava xtuner/llava-internlm2-7b --prompt-template internlm2_chat --image $IMAGE_PATH
更多示例,请查阅文档。
部署
步骤0,将HuggingFace adapter合并到大语言模型:
·xtuner convert merge \
·${NAME_OR_PATH_TO_LLM} \
·${NAME_OR_PATH_TO_ADAPTER} \
·${SAVE_PATH} \
--max-shard-size 2GB
步骤1,使用任意推理框架部署微调后的大语言模型,例如LMDeploy:
·pip install lmdeploy
·python -m lmdeploy.pytorch.chat ${NAME_OR_PATH_TO_LLM} \
·--max_new_tokens 256 \
·--temperture 0.8 \
·--top_p 0.95 \
--seed 0
追求速度更快、显存占用更低的推理?欢迎体验LMDeploy提供的4-bit量化!使用指南请见文档。
评测
推荐使用一站式平台OpenCompass来评测大语言模型,其目前已涵盖50+数据集的约30万条题目。
我们感谢所有的贡献者为改进和提升XTuner所作出的努力。请参考贡献指南来了解参与项目贡献的相关指引。
Llama 2
DeepSpeed
QLoRA
LMDeploy
LLaVA
@misc{2023xtuner,
title={XTuner: A Toolkit for Efficiently Fine-tuning LLM},
author={XTuner Contributors},
howpublished = {\url{https://github.com/InternLM/xtuner}},
year={2023}
}
该项目采用Apache License 2.0开源许可证。同时,请遵守所使用的模型与数据集的许可证。
[2024/05]在多GPU上部署VLM模型时,支持把视觉部分的模型均分到多卡上
[2024/05]支持InternVL v1.5, LLaVa, InternLMXComposer2等VLMs模型的4bit权重量化和推理
[2024/04]支持Llama3和InternVL v1.1, v1.2,MiniGemini,InternLM-XComposer2等VLM模型
[2024/04] TurboMind支持kv cache int4/int8在线量化和推理,适用已支持的所有型号显卡。详情请参考这里
[2024/04] TurboMind引擎升级,优化GQA推理。internlm2-20b推理速度达16+ RPS,约是vLLM的1.8倍
[2024/04]支持Qwen1.5-MOE和dbrx.
[2024/03]支持DeepSeek-VL的离线推理pipeline和推理服务
[2024/03]支持视觉-语言模型(VLM)的离线推理pipeline和推理服务
[2024/02]支持Qwen 1.5、Gemma、Mistral、Mixtral、Deepseek-MOE等模型
[2024/01]OpenAOE发布,支持无缝接入LMDeploy Serving Service
[2024/01]支持多模型、多机、多卡推理服务。使用方法请参考此处
[2024/01]增加PyTorch推理引擎,作为TurboMind引擎的补充。帮助降低开发门槛,和快速实验新特性、新技术_____________________________________________________
LMDeploy由MMDeploy和MMRazor团队联合开发,是涵盖了LLM任务的全套轻量化、部署和服务解决方案。这个强大的工具箱提供以下核心功能:
·高效的推理:LMDeploy开发了Persistent Batch(即Continuous Batch),Blocked K/V Cache,动态拆分和融合,张量并行,高效的计算kernel等重要特性。推理性能是vLLM的1.8倍
·可靠的量化:LMDeploy支持权重量化和k/v量化。4bit模型推理效率是FP16下的2.4倍。量化模型的可靠性已通过OpenCompass评测得到充分验证。
·便捷的服务:通过请求分发服务,LMDeploy支持多模型在多机、多卡上的推理服务。
·有状态推理:通过缓存多轮对话过程中attention的k/v,记住对话历史,从而避免重复处理历史会话。显著提升长文本多轮对话场景中的效率。
LMDeploy TurboMind引擎拥有卓越的推理能力,在各种规模的模型上,每秒处理的请求数是vLLM的1.36 ~ 1.85倍。在静态推理能力方面,TurboMind 4bit模型推理速度(out token/s)远高于FP16/BF16推理。在小batch时,提高到2.4倍。
更多设备、更多计算精度、更多setting下的的推理benchmark,请参考以下链接:
A100
4090
3090
2080
LMDeploy支持2种推理引擎:TurboMind和PyTorch,它们侧重不同。前者追求推理性能的极致优化,后者纯用python开发,着重降低开发者的门槛。
它们在支持的模型类别、计算精度方面有所差别。用户可参考这里,查阅每个推理引擎的能力,并根据实际需求选择合适的。
使用pip ( python 3.8+)安装LMDeploy,或者源码安装
pipinstalllmdeploy自v0.3.0起,LMDeploy预编译包默认基于CUDA12编译。如果需要在CUDA11+下安装LMDeploy,请执行以下命令:
export LMDEPLOY_VERSION=0.3.0
export PYTHON_VERSION=38
pip install https://github.com/InternLM/lmdeploy/releases/download/v${LMDEPLOY_VERSION}/lmdeploy-${LMDEPLOY_VERSION}+cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux2014_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118
import lmdeploy
pipe = lmdeploy.pipeline("internlm/internlm2-chat-7b")
response = pipe(["Hi, pls intro yourself", "Shanghai is"])
print(response)Note
LMDeploy默认从HuggingFace上面下载模型,如果要从ModelScope上面下载模型,请通过命令pip
install modelscope安装ModelScope,并设置环境变量:
export
LMDEPLOY_USE_MODELSCOPE=True
关于pipeline的更多推理参数说明,请参考这里
请阅读快速上手章节,了解LMDeploy的基本用法。
为了帮助用户更进一步了解LMDeploy,我们准备了用户指南和进阶指南,请阅读我们的文档:
用户指南
LLM推理pipeline
VLM推理pipeline
LLM推理服务
VLM推理服务
模型量化
进阶指南
推理引擎- TurboMind
推理引擎- PyTorch
自定义对话模板
支持新模型
gemm tuning
长文本推理
多模型推理服务
使用LMDeploy在英伟达Jetson系列板卡部署大模型:LMDeploy-Jetson
使用LMDeploy和BentoML部署大模型的示例项目:BentoLMDeploy
我们感谢所有的贡献者为改进和提升LMDeploy所作出的努力。请参考贡献指南来了解参与项目贡献的相关指引。
FasterTransformer
llm-awq
vLLM
DeepSpeed-MII
@misc{2023lmdeploy,
title={LMDeploy: A Toolkit for Compressing, Deploying, and Serving LLM},
author={LMDeploy Contributors},
howpublished = {\url{https://github.com/InternLM/lmdeploy}},
year={2023}
}
该项目采用Apache 2.0开源许可证。
如果您已经有ComfyUI的环境,可以直接使用我的工作流:
我的Workflow具有以下功能点:
生成人像图
DW Pose生成骨骼图
ControlNet控制人物姿态
AnimateDiff生成视频
插帧提升帧率
提升分辨率
gitclonehttps://github.com/comfyanonymous/ComfyUI.git
pipinstall-rrequirements.txt测试安装
cdComfyUI
pythonmain.py
执行脚本python
download_models.py即可下载本项目需要用到的全部权重
首先需要手动拉取下【插件管理器】
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
2.重启ComfyUI
3.刷新页面,点击右下角【管理器】->【安装缺失节点】即可。
以下是我用到的插件:
插件名 | 用途 |
AIGODLIKE-COMFYUI-TRANSLATION | 中文翻译 |
ComfyUI-Advanced-ControlNet | ContralNet工具包升级版 |
ComfyUI-AnimateDiff-Evolved | AnimateDiff动画生成 |
ComfyUI-Crystools | 机器资源监控 |
ComfyUI-Custom-Scripts | 模型管理 |
ComfyUI-Frame-Interpolation | 插帧 |
ComfyUI-Impact-Pack | |
ComfyUI-Manager | 插件管理器(必备) |
ComfyUI-VideoHelperSuite | 视频加载器 |
ComfyUI_FizzNodes | |
ComfyUI_IPAdapter_plus | IPAdapter风格迁移 |
comfyui-portrait-master-zh-cn | 人物生成中文提示词辅助工具 |
comfyui-workspace-manager | 工作流管理器 |
comfyui_controlnet_aux | ContralNet工具包 |
comfyui_segment_anything | SAM工具包 |
sdxl_prompt_styler | SDXL工具包 |
首先我们来说下基本的文生图流程,首先加入sd checkpoint,和vae模型,vae可选,但sd是必须的,如果觉得我这个模型不好,可以自行去c站找大佬微调好的模型,
填写好正向词和反向词,接个Ksampler就可以生成人像了
人物生成好了,下一步要生成特定的动作的话,有时候语言很难描述,我们需要借助controlnet来结合pose的姿态图来让sd生成特定动作的任务,这就是左下角的作用
这两块搞好之后,可以看到任务以特定的动作生成了,下面,我们加入动作,用到的算法是Animatediff简单的串起来,就可以了
我们把生成的图片合成为视频,原始是8帧,我们对它进行一个插帧,让视频更加丝滑,这就是右上角的功能
因为SD 1.5默认的输出是512 x 512,我们还要做个scale,让分辨率高一点,这就是右下角的功能。
生成好了mp4我们就可以修改下配置web_configs中的DIGITAL_HUMAN_VIDEO_PATH参数,后续就会用这个视频来生成口型了。
-DIGITAL_HUMAN_VIDEO_PATH:str=r"./doc/digital_human/lelemiao_digital_human_video.mp4"
+DIGITAL_HUMAN_VIDEO_PATH:str=r"新生成的mp4路径"
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |