LLM系列 | 02: Vicuna简介及模型部署实测

简介

月黑见渔灯,孤光一点萤。微微风簇浪,散作满河星。小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖钢丝球的小男孩。今天这篇小作文主要介绍Vicuna模型、基于官方模型13B模型部署服务及对话实测。
更多、更新文章欢迎关注微信公众号小窗幽记机器学习。后续会持续整理模型加速、模型部署、模型压缩、LLM、AI艺术等系列专题,敬请关注。

在这里插入图片描述

Vicuna模型

Vicuna官方目前(2023年4月)只放出Vicuna-7B和Vicuna-13B,后文的实测部分主要基于Vicuna-13B。Vicuna-13B是在LLaMa-13B的基础上使用监督数据微调得到的模型,数据集来自于ShareGPT.com产生的用户对话数据,共70K条。ShareGPT是一个ChatGPT数据共享网站,用户会上传自己觉得有趣的ChatGPT 回答。使用 GPT-4 作为判断的初步评估表明,Vicuna-13B 达到了 OpenAI ChatGPT 和 Google Bard 90% 以上的质量,同时在>90%的情况下优于 LLaMA 和 Stanford Alpaca 等其他模型。训练 Vicuna-13B 的费用约为300美元。官方也放出了训练代码: https://github.com/lm-sys/FastChat 以及 在线演示demo:https://chat.lmsys.org/。剧透下,后文实测效果,其实吧,还行吧。来个CPU的话术,做好预期管理。

概述

Vicuna整体流程如下:

在这里插入图片描述

首先,从 ShareGPT.com 收集了大约 7 万个对话。PS: ShareGPT.com 是一个用户可以分享他们的 ChatGPT 对话的网站。接下来,进一步优化 Alpaca 提供的训练脚本,以更好地处理多轮对话和长序列。相较于Alpaca,Vicuna在训练中将序列长度由512扩展到了2048,并且通过梯度检测flash attention来解决内存问题; 调整训练损失考虑多轮对话,并仅根据模型的输出进行微调。Vicuna 使用Pytorch FSDP在8张A100上训练了一天。 为了提供Demo演示服务,Vicuna官方实现了一个轻量级的分布式服务系统

在评估方面,通过创建 80 个不同的问题并利用 GPT-4 来对模型输出进行初步评估。为了比较两个不同的模型的输出结果质量,将每个模型的输出组合成每个问题的单个prompt。然后将prompt发送到 GPT-4,GPT-4 评估哪个模型提供更好的回复。LLaMA、Alpaca、ChatGPT的详细对比如下:

在这里插入图片描述

训练

Vicuna的研究人员使用 ShareGPT.com 的公共 API 收集了大约 7万 用户共享的ChatGPT对话数据,再微调 LLaMA-13B模型得到Vicuna-13B。为了确保数据质量,会将 HTML 转换回 markdown 并过滤掉一些不合适或低质量的样本。此外,将冗长的对话分成更小的部分,以适应模型的最大上下文长度。

训练方法在斯坦福alpaca的基础上进行了以下改进:

  • 内存优化:为了使 Vicuna 能够理解长上下文,将最大上下文长度从alpaca中的 512 扩展到2048,这大大增加了 GPU 内存需求。Vicuna官方通过利用gradient checkpointing和flash attentio来缓解内存压力。

  • 多轮对话:调整训练损失以考虑多轮对话,并仅根据聊天机器人的输出计算微调损失(fine-tuning loss),即仅根据聊天机器人的输出进行微调。

  • 通过 Spot 实例降低成本: 数据集变大40倍,训练序列长度变大4倍,这对训练费用提出了相当大的挑战。Vicuna使用SkyPilot 托管点来降低成本,方法是利用更便宜的点实例以及自动恢复抢占和自动区域切换。该解决方案将7B模型的训练成本从 500 美元削减至 140 美元左右,将 13B 模型的训练成本从 1000 美元左右削减至 300 美元。

评估

评估 AI 聊天机器人极具挑战性,因为它需要检查语言理解、推理和上下文感知。随着AI聊天机器人越来越智能,当前开放的benchmarks可能不足以担此重任。例如,斯坦福的 Alpaca 中使用的评估数据集self-instruct,比较SOTA 聊天机器人对这个数据集能够比较好地进行回复,这使得人类很难辨别差异。此外还有一些其他限制:训练/测试数据污染和创建新benchmarks潜在成本较高。为解决这些问题,Vicuna的研究人员提出了一个基于GPT-4的评估框架以自动评估聊天机器人的性能。

首先,设计8类问题,例如费米问题、场景角色扮演和编程/数学任务,以测试聊天机器人各方面的性能。通过仔细的prompt工程,GPT-4 能够生成基线模型难以解决的、多样化且具有挑战性的问题。为每个类别选择10个问题,并从5个聊天机器人收集答案:LLaMA、Alpaca、ChatGPT、Bard 和 Vicuna。然后,要求 GPT-4 根据有用性、相关性、准确性和细节来评估各个答案的质量。最终发现GPT-4不仅可以产生相对一致的分数,而且可以详细解释为什么给出这样的分数(详细示例链接)。但是,也注意到 GPT-4 不太擅长判断编程和数学问题。

在这里插入图片描述

在这里插入图片描述

准备工作

环境安装

根据FastChat的教程,git clone后先安装 fastchat 包:

pip3 install -e .
-e参数, --editable <path/url> Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.

安装之后的包名是fschat:

pip3 show  fschat
Name: fschat
Version: 0.2.2
Summary: An open platform for training, serving, and evaluating large language model based chatbots.
Home-page:
Author:
Author-email:
License:
Location: /opt/python3.10.11/lib/python3.10/site-packages
Requires: accelerate, fastapi, gradio, markdown2, numpy, prompt-toolkit, requests, rich, sentencepiece, shortuuid, tokenizers, torch, transformers, uvicorn, wandb

模型下载

We release Vicuna weights as delta weights to comply with the LLaMA model license.

所有基于LLaMA的模型都只能给出delta权重,可以从官方提供的地址下载,再将这个delta权重加到original LLaMA权重(下面给出磁链地址)上,最终得到release模型的权重。

# https://huggingface.co/lmsys/vicuna-13b-delta-v0curl -Lo pytorch_model-00001-of-00003.bin https://huggingface.co/lmsys/vicuna-13b-delta-v0/resolve/main/pytorch_model-00001-of-00003.bin# SHA256: 627062721346c21f30b679de08edd99abba409d3b37289419480c1d48f5e492a
curl -Lo pytorch_model-00002-of-00003.bin https://huggingface.co/lmsys/vicuna-13b-delta-v0/resolve/main/pytorch_model-00002-of-00003.bin# SHA256: fe31b044e7b4034d0bf9adea93f1d2ef4e0fa02511914b4c19e72bdcfcacca6b
curl -Lo pytorch_model-00003-of-00003.bin https://huggingface.co/lmsys/vicuna-13b-delta-v0/resolve/main/pytorch_model-00003-of-00003.bin

模型融合

对于已经下载得到的delta模型,记为vicuna-13b-delta-v0。还需要下载llama-13B原始模型,并将原始llama-13B模型转出huggingface格式的模型(简称hf),记为llama-13b-hf

python3 transformers/src/transformers/models/llama/convert_llama_weights_to_hf.py --input_dir /home/model_zoo/llama --model_size 13B --output_dir /home/model_zoo/llama/llama-13b-hf

需要注意的是,官方发布了delta-v0delta-v1两个版本。按照官方的说法是v1.1版本重构了 tokenization 和 separator,在Vicuna v1.1中separator从原来的"###"改为EOS token "</s>"。这一改动使得控制生成停止的条件变得更容易,并使其与其他libraries具有更好的兼容性。

在FastChat目录下运行如下命令:

python3 -m fastchat.model.apply_delta \--base /path/to/llama-13b \--target /output/path/to/vicuna-13b \--delta /home/model_zoo/vicuna/vicuna-13b-delta-v0

比如对于Vicuna-7B:

python3 -m fastchat.model.apply_delta \--base /path/to/llama-7b \--target /output/path/to/vicuna-7b \--delta lmsys/vicuna-7b-delta-v1.1

对于Vicuna-13B:

python3 -m fastchat.model.apply_delta \--base /path/to/llama-13b \--target /output/path/to/vicuna-13b \--delta lmsys/vicuna-13b-delta-v1.1

由于官方推荐使用delta-v1,这里运行指令如下:

python3 -m fastchat.model.apply_delta \--base /home/model_zoo/llama/7B/hugging_face_format/ \--target /home/model_zoo/vicuna/vicuna-7b \--delta /home/model_zoo/vicuna/vicuna-7b-delta-v1.1
python3 -m fastchat.model.apply_delta \--base /home/model_zoo/llama/llama-13b-hf/ \--target /home/model_zoo/vicuna/vicuna-13b \--delta /home/model_zoo/vicuna/vicuna-13b-delta-v1.1

如果上述命令直接用在v0版本的话,会报错:

RuntimeError: The size of tensor a (32000) must match the size of tensor b (32001) at non-singleton dimension 0

至此在/home/model_zoo/vicuna/vicuna-13b得到vicuna-13b模型。

模型推理(命令行方式)

单个GPU

Vicuna-13B需要大约28GB的GPU显存。

python3 -m fastchat.serve.cli --model-path /home/model_zoo/vicuna/vicuna-13b

如果发现输出一些无关的信息,根据issue官方的反馈的解决方案:Tokenizer issues。

需要下载https://huggingface.co/lmsys/vicuna-13b-delta-v0/tree/main中的special_tokens_map.jsontokenizer_config.json以对/home/model_zoo/vicuna/vicuna-13b中的special_tokens_map.jsontokenizer_config.json进行替换。再次运行,模型返回的结果就没有那些无关的信息,比较干净。

多GPU

如果没有足够的显存,则可以使用模型并行来聚合同一台机器上多个GPU的显存。

python3 -m fastchat.serve.cli --model-path /home/model_zoo/vicuna/vicuna-13b --num-gpus 2

仅用CPU

如果想在CPU上运行,则需要大约60GB的内存。

python3 -m fastchat.serve.cli --model-path /home/model_zoo/vicuna/vicuna-13b --device cpu

模型推理(Web UI方式)

如果想要以web UI方式提供服务,则需要配置3个部分。

  1. web servers,用户的交互界面
  2. model workers,托管模型
  3. controller,用以协调web server和model worker

启动控制器

python3 -m fastchat.serve.controller --host 0.0.0.0

启动model worker

python3 -m fastchat.serve.model_worker --model-path /home/model_zoo/vicuna/vicuna-13b --model-name vicuna-13b --host 0.0.0.0

当进程完成模型的加载后,会看到「Uvicorn running on …」。

发送测试消息

python3 -m fastchat.serve.test_message --model-name vicuna-13b

返回结果:

Models: ['vicuna-13b']
worker_addr: http://localhost:21002
USER: Tell me a story with more than 1000 words.
ASSISTANT: Once upon a time, in a small village nestled in the heart of a dense forest, there lived a young girl named Maria. She was an orphan

启动gradio web server

python3 -m fastchat.serve.gradio_web_server --port 8809

现在,就可以打开浏览器和模型聊天了。
为了方便分别查看日志信息,控制器、model worker、gradio web server 分别单独开了终端窗口。

微调

数据

Vicuna是通过使用从ShareGPT收集到的大约7万个用户共享的对话与公共API来微调一个LLaMA基础模型而创建的。

为了确保数据质量,团队将HTML转换回markdown,并过滤掉一些不合适或低质量的样本。此外,团队还将冗长的对话分成较小的片段,以符合模型的最大上下文长度。具体的清洗代码可以参考:data_cleaning

Vicuna官方出于某些考虑,现在暂不发布ShareGPT数据集。如果各个小伙伴想尝试微调代码,可以使用一些虚拟问题dummy.json从而运行代码。也可以遵循相同的格式并插入自己的数据。

代码和超参数

团队使用斯坦福Alpaca的代码对模型进行微调,并做了一些修改以支持梯度检查点和Flash注意力。此外,团队也使用与斯坦福Alpaca相似的超参数。

本地微调Vicuna-7B

torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \--model_name_or_path ~/model_weights/llama-7b  \--data_path playground/data/dummy.json \--bf16 True \--output_dir output \--num_train_epochs 3 \--per_device_train_batch_size 2 \--per_device_eval_batch_size 2 \--gradient_accumulation_steps 16 \--evaluation_strategy "no" \--save_strategy "steps" \--save_steps 1200 \--save_total_limit 10 \--learning_rate 2e-5 \--weight_decay 0. \--warmup_ratio 0.03 \--lr_scheduler_type "cosine" \--logging_steps 1 \--fsdp "full_shard auto_wrap" \--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \--tf32 True \--model_max_length 2048 \--gradient_checkpointing True \--lazy_preprocess True

如果在model saving过程遇到OOM问题,可以参考:solutions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42488.html

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

相关文章

关于研发效能提升的思考

研发效能提升是最近比较热门的一个话题&#xff0c;本人根据这几年的工作心得&#xff0c;做了一些思考总结&#xff0c;由于个人深度有限&#xff0c;暂且抛转引入。 三要素 任何生产力的提升都离不开这三个因素&#xff1a;人、流程和工具&#xff0c;少了其中任何一个因素都…

计算机专业考研院校选择,怎样找到心中的牛校--关于学校的选择问题(计算机专业)...

作者&#xff1a;kaoyan.com网友司马南 发现在论坛上有不少实力出众的研友希望能报考中国顶尖的cs bs program,但是网上相关的文章大多比较零散而且充满主观偏见.我个人在清华一年中,由于学术交流比较多,对中国各牛校的实力比较了解,所以不揣冒昧在这里发表一下个人的一些看法,…

「津津乐道播客」#332 科技乱炖:联想真的做错了么?

上周&#xff0c;司马南质疑联想的七个视频出炉&#xff0c;但是对他的指控&#xff0c;我们却有不同的看法&#xff0c;虽然我们也看联想不爽很久了…… 您将在本期节目中听到以下内容&#xff1a; 00:00:00 联想真的做错了么&#xff1f;00:39:30 爆红张同学背后的平台意志01…

联想和柳传志处境不妙,重量级大V转变态度

联想与司马南的舆论交锋仍然在持续&#xff0c;不过如今似乎风向开始向不利于联想和柳传志的方向转变&#xff0c;重量级大V胡锡进从此前的偏向联想转向支持大众舆论。 胡锡进认为联想高管的上亿和数千万的薪酬不合理&#xff0c;这样的高薪与中国社会的现实不协调&#xff0c;…

腾讯再发股票吸引人才,受益2.57万名员工,人均超8万港元

记者 | 周姝祺 12月1日晚&#xff0c;腾讯控股&#xff08;00700.HK&#xff09;发布公告&#xff0c;公司董事会已决议向不少于25700位奖励人士授予合共4410829股奖励股份。据悉&#xff0c;奖励人士将包括雇员、 行政人员或高级职员、董事、专家、顾问或代理。 图片来源&…

怎样在半年内把一个团队带垮?

作者&#xff1a;裴斯特洛夫斯基 链接&#xff1a;https://www.zhihu.com/question/442522186/answer/1820502736 有没有经历过自己把团队带散的案例&#xff0c;核心的关键点有哪几个&#xff1f; 1. XX报 增加管理&#xff08;无效&#xff09;工作的占比&#xff0c;每位成员…

沈南鹏问了微软CEO四个问题

两人同框&#xff0c;实属难得。 报道 I 投资界PEdaily 这是一场思想盛宴&#xff0c;由红杉中国发起的「2021红杉数字科技全球领袖峰会」在上海举行。 这一次&#xff0c;红杉中国邀请了20余位国内外顶尖科学家、科技创业者、产业领头羊以及业界投资人参加&#xff0c;包括微软…

华为研发投入全球第二!力压三星、苹果

根据欧盟 2021 工业研发记分榜&#xff08;ScoreBoad 2021&#xff09;公布&#xff0c;华为 2020 年研发投入排名第二&#xff0c;是前十名里唯一的中国公司&#xff0c;力压苹果、英特尔和微软等巨头&#xff0c;仅次于谷歌母公司 Alphabet。 华为研发投入全球第二 按照欧盟统…

十年后,你在元宇宙中的一天是什么样?

上一篇2021 元宇宙研究报告&#xff01; 事情得从美国著名科幻小说作家尼尔斯蒂芬森于1992年出版的《雪崩》说起。 在这部科幻小说当中&#xff0c;主角阿弘通过一台特制的电脑&#xff0c;就能轻松进入与现实物理世界平行的另外一个世界。 阿弘电脑的顶部光滑而又平坦&#xf…

联想MIIX720二合一笔记本键盘维修(带键盘灯款)

联想MIIX720二合一笔记本键盘维修&#xff08;带键盘灯款&#xff09; 很少在这里写文章&#xff0c;即使发过一些内容&#xff0c;也是关于操作系统的。这次破例&#xff0c;发个关于联想MIIX720二合一笔记本键盘维修的文章。不为别的&#xff0c;就因为这键盘质量太差&#…

形势日渐明朗,联想的杨柳前景不容乐观

联想与司马南的纠葛仍然受到各方关注&#xff0c;有关方面尚未表明态度&#xff0c;但近日证监会就联想集团创下史上最短科创板IPO之旅对保荐单位中金公司等保荐机构的行政处罚或许能看出一丝端倪&#xff0c;情况正向不利于杨柳的方向发展。 据《新京报》报道指证监会对保荐联…

联想或再遭重击,两部门重磅发声加强国有资产监管

联想与司马南的纠葛依然在继续&#xff0c;此前主要是双方在媒体上的争论&#xff0c;但是近日财政部和国资委发声却不免让人联系到这次联想和司马南的纠葛&#xff0c;这对联想来说恐怕并非好消息。 财政部指出国有资产转让应当严格遵循等价有偿和公开公正公平原则&#xff0c…

JavaSE-12 【集合】

文章目录 JavaSE-12 【集合】第一章、Java集合第二章、Collection介绍2.1 Connection是什么&#xff1a;2.2 集合与数组的区别2.3 Collection的功能2.4 Collection和Map的继承体系结构2.5 Collection常用API2.6 Collection的API案例 第三章、List集合3.1 ArrayList集合3.2 Link…

联想,迟到的科创能力,能否凭借芯片扳回一局?

数据智能产业创新服务媒体 ——聚焦数智 改变商业 2021年&#xff0c;可谓是联想集团的波折之年。9月30日&#xff0c;提交科创板上市申请&#xff1b;10月8日&#xff0c;仅仅一天就“终止”IPO&#xff0c;撤回上市申请&#xff1b;11月&#xff0c;与司马南之争&#xff0c…

重谈联想5G编码投票事件

此前&#xff0c;司马南谈了联想好几个问题&#xff0c;其中最尖锐的要属国有资产流失&#xff0c;这是联想管理层无法回避的死穴。不过&#xff0c;司马南批判联想5G投票背刺H公司&#xff0c;这基本就是造谣了。 当年&#xff0c;媒体把编码投票炒作的很厉害&#xff0c;抨击…

前端开发常用案例(二)

这里写目录标题 1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单 1.loding加载动画 代码如下&#xff1a; <!DOCTYPE…

30个HTML+CSS前端开发案例(完结篇)

30个HTMLCSS前端开发案例&#xff08;完结篇&#xff09; flex弹性布局-今日头条首页热门视频栏代码实现效果 flex弹性布局-微博热搜榜单代码实现效果 grid网格布局-360图片展示代码实现效果 综合实例-小米商城左侧二级菜单代码实现效果 资源包 flex弹性布局-今日头条首页热门视…

独家| 阿里腾讯大裁员!一鲸落,万物生,一切才刚刚开始

--感谢零代码厂商明道云对原创内容的支持-- 作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 这几天阿里、腾讯大裁员的消息传得沸沸扬扬&#xff0c;到底哪些是真&#xff0c;哪些是假呢&#xff1f;K哥跟几位在腾讯、阿里工作的高管朋友打听了一下&…

16TB布局谋发展,东芝企业级硬盘这次抢了个

经过多年的风风雨雨&#xff0c;当初世界上存在几十家与硬盘相关的厂商&#xff0c;现在硬盘市场只剩下了三家富有代表性的供应商&#xff0c;包括东芝Toshiba、希捷Seagate、西部数据 Western Digital。 在面向云计算、大数据、物联网、人工智能等全新应用场景发展变化的情况…

希捷正式发布12TB硬盘:二代充氦 单碟1.5TB

在透露已经出样之后&#xff0c;希捷今天正式发布了新款Enterprise Capacity v7 12TB硬盘&#xff0c;这也是希捷的第二代充氦技术硬盘&#xff0c;面向企业和云计算市场。相比于此前的Enterprise Capacity v6 10TB&#xff0c;新硬盘增强了充氦技术&#xff0c;单盘封装多达八…