【LLMs系列】90%chatgpt性能的小羊驼Vicuna模型学习与实战

news2024/12/23 13:18:35

一、前言

UC伯克利学者联手CMU、斯坦福等,再次推出一个全新模型70亿/130亿参数的Vicuna,俗称「小羊驼」(骆马)。小羊驼号称能达到GPT-4的90%性能

  • github 地址: GitHub - lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and FastChat-T5.

本篇文章为博主自行学习vicuna推理部署实战教程,并记录相关坑点,话不多说,直接开干!

二、环境搭建

2.1创建conda的python环境

有大坑!!千万不要用低版本的python!!我最开始用的python3.7,各种bug一堆,建议直接上python=3.10版本,测试无毒,放心食用!

conda create -n vicuna python=3.10       # 创建新环境
source activate vicuna                  # 激活环境

2.2安装FastChat

2.2.1pip安装

pip install fschat

这里如果你的python版本是3.7或更低,就只能安装fschat==0.1,这会导致后续步骤包冲突。所以这也是为什么笔者建议大家直接用python3.10版本,别恶心自己了QAQ

另外就是transformsers版本要>=4.28.1,不然又报错,手动感谢奔腾大佬帮忙解决~

2.2.2git仓库安装

git clone https://github.com/lm-sys/FastChat.git
cd FastChat
pip install --upgrade pip  # enable PEP 660 support
pip install -e .

三、 Vinvua Weights生成

注:本项目使用的Vinvua Weights生成方式参考MiniGPT4

参考链接:https://github.com/Vision-CAIR/MiniGPT-4/blob/main/PrepareVicuna.md

整个流程概括一下就是:

  1. 下载vicuna权重
  2. 下载原始LLAMA 7B/13B权重
  3. 调用fastchat工具利用vicuna和LLAMA的权重来生成本项目真正的需要的working权重

这里要注意你的内存够不够,我下载的是LLAMA-7B的权重文件大约13G,对应的vicuna权重也是13G,同时你还要留够我们真正需要的working权重的空间, 也是13G,所以7B的模型总共需要39G~40G空间。13B的话,我听大佬说LLAMA13B好像要30+G,估算一下总共差不多要快100个G了。

3.1下载Vicuna Weight 

可以选择下载13B或7B版本的,下面两个链接选一个下就行了。

git lfs install
git clone https://huggingface.co/lmsys/vicuna-13b-delta-v1.1  # more powerful, need at least 24G gpu memory
git clone https://huggingface.co/lmsys/vicuna-7b-delta-v1.1  # smaller, need 12G gpu memory

我理解这个Vicuna Weight其实是一个“偏差权重”,注意这个“偏差权重”是我自己取的名字,最终我们需要的权重=原始LLAMA权重+偏差权重。他们之所以要这么麻烦的搞是因为LLAMA对自己的权重做了限制,别人无法直接改变LLAMA的权重,所以只能通过引入额外的偏差权重与原始LLAMA权重进行某种运算来得到最终的权重了。

3.2下载LLAMA权重

同样可选13B或7B版本的,且分别与Vicuna-13B、Vicuna-7B对应。

git lfs install
git clone https://huggingface.co/decapoda-research/llama-13b-hf  # more powerful, need at least 24G gpu memory
git clone https://huggingface.co/decapoda-research/llama-7b-hf  # smaller, need 12G gpu memory

3.3构建我们需要的真正的working weight

当这两个 weight 备好后,我们可以使用Vicuna团队的工具来创建真正的 working weight 。

执行如下命令创建最终 working weight

python -m fastchat.model.apply_delta --base ./llama-7b-hf/ --target ./vicuna/weight/ --delta ./vicuna-7b-delta-v1.1/

以上命令只需要改动--base 、--target--delta对应的路径,其中base代表原始LLAMA权重所在路径,delta代表vicuna偏差权重、target代表我们最终得到的权重所存放的路径。

注:低CPU内存需加入--low-cpu-mem,可以把大的权重文件分割成多个小份,并使用磁盘作为临时存储。可以使峰值内存保持在16GB以下。不然无法载入vicuna增量文件,CPU内存占满,程序直接被kill,代码参考看下面

python -m fastchat.model.apply_delta --base ./llama-7b-hf/ --target ./vicuna/weight/ --delta ./vicuna-7b-delta-v1.1/ --low-cpu-mem

这里也要注意只有fastchat版本>=0.2.0才支持--low-cpu-mem,总之跟着教程最开始就用python==3.10到这步应该没问题。

四、命令行推理

4.1单GPU推理

 下面的命令要求Vicuna-13B大约有28GB的GPU内存,Vicuna-7B大约有14GB的GPU存储器。如果内存不足,请参阅下面的“内存不足”部分。

python -m fastchat.serve.cli --model-path vicuna/weight

参数介绍

usage: cli.py [-h] 
    [--model-path MODEL_PATH]                     Vicuna Weights 路径
    [--device {cpu,cuda,mps}]                     选择 使用 cpu or cuda 运行
    [--gpus GPUS]                                 选择 使用 gpu 型号
    [--num-gpus NUM_GPUS]                         选择 gpu 数量
    [--max-gpu-memory MAX_GPU_MEMORY] 
    [--load-8bit]                                 8bit 量化,用于降低显存
    [--conv-template CONV_TEMPLATE]
    [--temperature TEMPERATURE] 
    [--max-new-tokens MAX_NEW_TOKENS] 
    [--style {simple,rich}] 
    [--debug]

4.2单卡多GPUs推理

python -m fastchat.serve.cli --model-path /path/to/vicuna/weights --num-gpus 2

4.3CPU推理

这只在CPU上运行,不需要GPU。Vicuna-13B需要大约60GB的CPU内存,Vicuna-7B需要大约30GB的CPU存储器。

python -m fastchat.serve.cli --model-path /path/to/vicuna/weights --device cpu

实测效果 

在中英文分别进行了测试,看起来还可以,具体实战能力咋样可能还是要拿业务数据测一下。另外7B的模型推理时显存占用稳定在14G左右。

 

但是测了几轮发现他也有一些问题,比如让他计算数学公式,他就一直卡住重复输出同一句话。

 算了给不出来就算了,那你直接给个答案吧,结果给了个6???咋算出来的?一问他还急眼了,直接报错:TypeError: not a string

 看来vicuna的数学推理能力还有待增长啊,中英文能力看起来还行。

再测测角色扮演能力,让他扮演《鬼灭之刃》中的炎柱大哥。

说实话,他完全没理解我说了什么,给我扯到火影了,多少有点呆。。。

可能是受限于模型规模,感觉测试效果不尽人意。。。

五、使用Web GUI服务

由于公司网络受限,我这里没有测试,感兴趣的朋友可以参照以下教程自行尝试。

要使用web UI提供服务,您需要三个主要组件:与用户接口的web服务器、托管一个或多个模型的模型工作者,以及协调web服务器和模型工作者的控制器。以下是您的终端中要遵循的命令:1.Launch the controller

python -m fastchat.serve.controller

此控制器管理分布式工作程序。

2.Launch the model worke

python -m fastchat.serve.model_worker --model-path /path/to/vicuna/weights

 等待流程完成加载模型,然后看到“Uvicorn running on ...”。

您可以启动多个模型工作程序来同时为多个模型提供服务。模型工人将自动连接到控制器。

要确保模型工作者正确连接到控制器,请使用以下命令发送测试消息:

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

 3.Launch the Gradio web server

python -m fastchat.serve.gradio_web_server

 这是用户将与之交互的用户界面。

通过以下步骤,您将能够使用web UI为您的模型提供服务。您现在可以打开浏览器并与模型聊天了!

参考:LLMsNineStoryDemonTower/Vicuna at f2a3301e146867ae57158a5f623c771b09a570a1 · km1994/LLMsNineStoryDemonTower · GitHub

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

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

相关文章

ChatGPT爆火网络背后的故事?

文章目录 前言一、ChatGPT的诞生背景二、ChatGPT的技术原理三、ChatGPT的推广策略四、ChatGPT的未来展望五、橙子送书第2期 前言 ChatGPT是一款基于人工智能技术的聊天机器人,它的出现引起了广泛的关注和热议。在短短的时间内,ChatGPT就成为了全球范围内…

实测|飞凌嵌入式OK3588-C开发板4G模组的使用与测试

本篇试用报告由发烧友 ouxiaolong提供,感谢ouxiaolong的支持。飞凌嵌入式会持续开展开发板有奖试用活动,更有京东E卡等着你!欢迎大家的持续关注。 飞凌嵌入式OK3588-C开发板是一款性能强劲的旗舰产品,采用核心板底板的分体式设计…

linuxOPS系统服务_Linux下用户管理

用户概念以及基本作用 **用户:**指的是Linux操作系统中用于管理系统或者服务的人 一问:管理系统到底在管理什么? 答:Linux下一切皆文件,所以用户管理的是相应的文件 二问:如何管理文件呢? …

JDK、JRE、JVM三者的区别

JDK(Java Development Kit):Java开发工具包 JRE(Java Runtime Environment):Java运行环境 JVM(Java Virtual Mechinal):Java虚拟机 (1)JDK和JRE 是…

Python海龟画图 几种基本图形

注:本文主要根据绘制步骤进行区分,实际使用时应当调节参数以绘制需要的图形。文中的步骤均为循环进行,循环50到100次,具体次数见代码示例。 1.前进小角度旋转 绘制效果如图,如果旋转角度为360的因数则绘制出多边形。 …

OJ Summation of Four Primes

1.题目 题目描述 Euler proved in one of his classic theorems that prime numbers are infinite in number. But can every number be expressed as a summation of four positive primes? I don’t know the answer. May be you can help!!! I want your solution to be v…

弹性盒子(display: flex)布局超全讲解|Flex 布局教程

文章目录 什么是弹性布局?弹性布局的特点?容器的属性justify-contentalign-itemsflex-directionflex-wrapflex-flowalign-contentorder属性flex-grow属性flex-shrink属性flex-basis属性flex属性align-self属性 什么是弹性布局? 弹性布局&…

我被今年就业难度震惊到了

随着毕业季到来,今年高校毕业生就业问题正在被越来越多的人关注。年年都是最难就业季,但今年却格外不同寻常的难。大家都知道 2022 年毕业生人数历史上首次突破千万。而今年毕业生人数,高达 1158 万人,史无前例的多。加上海外留学…

【Unity Shader】从入门到着魔(2)用C#画一个立方体

文章目录 一、构成一个立方需要多少个顶点?二、定义三角面的索引数组:三、定义UV坐标数组:四、最后构建Mesh:五、完整代码:一、构成一个立方需要多少个顶点? 这个问题是面试经常被问到的题。如上图,我们知道在几何中立方体有6个面,8个顶点。但在图形学中,顶点指的是模…

项目管理:制定项目计划,这些作用不可忽视

做任何事,做计划不可缺少,没有计划,就没有控制,编制计划可帮助项目管理团队提前进行思考。 制定计划后,还需要对项目计划进行跟踪,这样才不会让计划白做。 你知道项目计划进行跟踪,有哪些不可…

更新公告:Airtest更新至1.2.10.2版本

1. 前言 本次是Airtest库更新,版本提升至1.2.10.2,内容主要是Android录屏功能的改动。 2. 更改部分 在Airtest1.2.9中提供的cv2模式已经被舍弃,因为容易引发错误,效果也不如ffmpeg; 只有Android需要mode参数&#x…

java8 (jdk 1.8) 新特性 ——初步,发现不一样的新特性

前言 3202 年了,现在市面上的公司几乎都是 jdk1.8, 有也是极少数在用java7 , 即使是一些传统企业,在技术革新方面也很重视,毕竟现在是大数据时代 那么java8 有哪些新特性呢?换句话说为什么在码界 这么受欢迎!&#xf…

NLP:词义分布的空间维度——从文本符号到词向量表征

自然语言处理的前提是文本表示(Representation),即如何将人类符号化的文本转换成 计算机所能“理解”的表征形式。早期的自然语言表征主要采用离散表示。近年来,随着深度 学习的不断发展,基于神经网络的分布式词向量技…

对象存储?CRUD Boy实现对文件的增删改查

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 对象存储是什么&#xff1f…

代码随想录算法训练营第五十九天|503.下一个更大元素II|42. 接雨水

LeetCode503.下一个更大元素II 基本思路:本题思路与739.每日方法思路相似,但是需要使用到循环数组,将两个nums数组拼接在一起,使用单调栈计算出每一个元素的下一个最大值,最后再把结果集即result数组resize到原数组大…

java 高校宿舍管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 高校宿舍管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

第六章 番外篇:webdataset

参考教程: https://github.com/pytorch/pytorch/issues/38419 https://zhuanlan.zhihu.com/p/412772439 https://webdataset.github.io/webdataset/gettingstarted/ 文章目录 背景WebDatasetwebdataset的生成webdataset的加载示例代码 背景 训练数据通常是以个体的…

霹雳吧啦 目标检测 学习笔记

霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 目标检测篇github地址;GitHub - WZMIAOMIAO/deep-learning-for-image-processing: deep learning for image processing including classification and object-detection etc. 数据集 实例分割vs语义分割&a…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (7) AI语言模型

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

云安全的第一站:CSPM

在企业数字化转型和云计算技术的加持下,企业上云趋势势不可挡。与此同时,数据量加大,网络攻击日趋频繁,对企业来说,包括云计算安全在内的网络安全部署的重要性日益显现。 在Gartner2022年CIO技术执行官问卷调查中&…