使用Fastchat部署vicuna大模型

news/2024/7/20 19:35:48 标签: 大模型

  FastChat是一个用于训练、提供服务和评估基于大型语言模型的聊天机器人的开放平台。其核心特点包括:

  • 最先进模型(例如 Vicuna)的权重、训练代码和评估代码。
  • 一个分布式的多模型提供服务系统,配备 Web 用户界面和与 OpenAI 兼容的 RESTful API。

  本篇博客介绍如何在aws instance上通过FastChat部署vicuna大模型。首先需要在aws申请带GPU的instance,以及安装CUDA driver,这部分内容,请参考上一篇博客。

  配置好CUDA的driver后,就可以按照FastChat官方给出的安装步骤开始部署大模型了。

下载FastChat代码

git clone https://github.com/lm-sys/FastChat.git
cd FastChat

安装相关依赖包

pip3 install -e ".[model_worker,webui]"

下载大模型参数以及启动大模型

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5


  如果在启动过程中,提示缺少protobuf包的错误,那么执行命令安装protobuf。 安装命令:pip install protobuf。如果下载启动模型过程中无问题,会看到下面的截图信息,可以看到执行上面的命令过程中,下载了大模型参数文件,也就是xxx.bin文件,下载完成后,启动了大模型

  大模型启动成功后,在USER:字段后面输入信息,就会得到大模型返回的内容,具体如下图所示:ASSISTANT字段后面的内容就是大模型返回的内容。

  除了直接通过命令行中输入信息与大模型交互外,FastChat还支持提供与OpenAI 兼容的 RESTful API,要启动API只需要执行下面三行命令即可:

#Launch controller
pip3 install -e ".[model_worker,webui]"

#Launch model work
python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.5

#Launch the RESTful API server
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000


  执行完上面的命令,就可以通过API调用的方式与部署的大模型进行交互了。以下图为例,输入curl命令,可以看到返回了内容。且这个API是完全兼容了OpenAI api。

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vicuna-7b-v1.5",
    "messages": [{"role": "user", "content": "Hello! What is your name?"}]
  }'

除了通过接口与大模型直接对话,还可以通过接口获取输入信息的向量信息。

curl http://localhost:8000/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vicuna-7b-v1.5",
    "input": "Hello world!"
  }'

返回的向量信息如下图所示:

  除了通过curl命令调用接口外,还支持通过编程方式调用api。安装openai的包(pip install --upgrade openai),编写调用接口的代码。

import openai
# to get proper authentication, make sure to use a valid key that's listed in
# the --api-keys flag. if no flag value is provided, the `api_key` will be ignored.
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"

model = "vicuna-7b-v1.5"
prompt = "Once upon a time"

# create a completion
completion = openai.Completion.create(model=model, prompt=prompt, max_tokens=64)
# print the completion
print(prompt + completion.choices[0].text)

# create a chat completion
completion = openai.ChatCompletion.create(
  model=model,
  messages=[{"role": "user", "content": "Hello! What is your name?"}]
)
# print the completion
print(completion.choices[0].message.content)

  执行上面的python脚本,可以看到打印了大模型返回的信息,结果如下图所示:


  上面只介绍了部署vicuna大模型,以及如何启动大模型的api。实际上,FastChat支持部署多个大模型,例如,国内的ChatGLM大模型以及国外的很多开源大模型。具体可见官网信息。在部署过程中只需要修改--model-path=xx即可。例如:如果要通过fastchat部署国内的ChatGLM大模型,部署命令是: “python3 -m fastchat.serve.cli --model-path=THUDM/chatglm-6b”,在调用api的时候,接口参数model的值替换成自己部署的大模型名称即可,例如ChatGLM模型,调用的时候接口参数的mode=chatglm-6b.

   以上就是对如果通过FastChat部署开源大模型的过程介绍。


http://www.niftyadmin.cn/n/5010725.html

相关文章

恒运资本:开盘时间是几点到几点?

开盘时刻是指各种商场的正式开端生意时刻,包括股票商场、外汇商场、商品期货商场等。关于出资者来说,了解开盘时刻是十分重要的,由于它直接关系到生意的时刻和机会。本文将从多个角度分析开盘时刻的重要性、不同商场的开盘时刻以及对出资者带…

Java便捷生成二维码并使用Excel

文章目录 1、思路2、详细过程1.引入依赖2.导出数据 1、思路 第一步生成图片字节数组输出流 第二步字节数组输出流存入excel 2、详细过程 1.引入依赖 使用的是easyexcel和hutool工具便捷快速开发 <dependency><groupId>cn.hutool</groupId><artifactId&g…

流程图用什么软件做比较好?这几个实用软件了解下

流程图用什么软件做比较好&#xff1f;流程图的制作对于企业管理、项目管理、产品设计等领域都非常重要。制作流程图可以帮助我们更好地理解事物之间的关系和流程&#xff0c;从而规划和组织工作。因此&#xff0c;选择一个合适的流程图软件是非常必要的。下面就给大家介绍几种…

springboot项目若以集成minio文件服务

完整代码&#xff0c;可直接复制使用。 1、maven依赖包minio <!-- Minio --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version></dependency>2、目录结构如下图&#x…

Killing LeetCode [22] 括号生成

Description 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 Intro Ref Link&#xff1a;https://leetcode.cn/problems/generate-parentheses/ Difficulty&#xff1a;Medium Tag&#xff1a;String&…

与面试相关的redis

这里写自定义目录标题 &#x1f4dd; redis的知识点数据结构及其特性&#xff0c;用途和操作方法持久化高可用分布式锁发布订阅性能优化安全性数据分片缓存策略键过期删除策略内存淘汰策略 &#x1f917; 总结归纳&#x1f4ce; 参考文章 &#x1f600; 这里写文章的前言&#…

《Effective STL》读书笔记(一):容器

容器类型&#xff1a; 标准STL序列容器&#xff1a;vector, string, deque, list标准STL关联容器&#xff1a;set, multiset, map, multimap非标准序列容器slist和rope非标准关联容器&#xff1a;hash_set, hash_multiset, hash_map, hash_multimap标准的非STL容器&#xff1a…

Netty源码剖析之HashedWheelTimer时间轮

版本信息&#xff1a; JDK1.8 Netty-all:4.1.38.Final 时间轮的介绍 我们知道钟表分为很多块&#xff0c;每时钟滴答一次就往前走一个块&#xff0c;而时间轮就是使用这个思想。如下图 上图总共分为8块&#xff0c;每过100ms就往前走一块&#xff0c;然后周而复始。此时&#…