NLP(五十九)使用FastChat部署百川大模型

news2024/9/24 1:15:55

   本文将会介绍如何使用FastChat来部署国产大模型——百川模型。

   在此之前,我们先来了解两个概念——百川模型FastChat.

百川模型

   2023年6月15日,被称为「中国 ChatGPT 梦之队」的百川智能公司,推出了 70 亿参数量的中英文预训练大模型——baichuan-7B

   baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。

   在构建预训练语料库方面,百川智能以高质量中文语料为基础,同时融合了优质的英文数据。相较于其他同参数规模的开源中文预训练模型,数据量提高了超过 50%。

  • 在数据质量方面,通过质量模型对数据进行打分,对原始数据集进行篇章级和句子级的精确筛选
  • 在内容多样性方面,利用自研超大规模局部敏感哈希聚类系统和语义聚类系统,对数据进行了多层次多粒度的聚类
  • 最终构建了包含 1.2 万亿 token 的兼顾质量和多样性的预训练数据。

   不同于LLaMA完全禁止商业使用,baichuan-7B代码使用更宽松的开源协议——Apache-2.0协议,允许用于商业目的

FastChat

   FastChat是用于对话机器人模型训练、部署、评估的开放平台,其核心特性包括:

  • 模型权重,训练代码,评估代码可用于SOTA模型(比如Vicuna,FastChat-T5)
  • 分布式多模型部署系统,自带Web UI和OpenAI兼容的RESTful APIs

   FastChat集成了Vicuna、Koala、alpaca、LLaMA等开源模型,其中Vicuna号称能够达到GPT-4的90%的质量,是开源的chatGPT模型中对答效果比较好的。

   FastChat的访问地址是:https://chat.lmsys.org/ , FastChat的安装方式为:pip3 install fschat .

CLI部署

   在Huggingface Hub上下载baichuan-7B模型,访问网址为:https://huggingface.co/baichuan-inc/Baichuan-7B ,放在GPU机器上的本地路径。

   笔者的GPU机器为4 * RTX6000,每张RTX6000的显存为80G。

   FastChat使用CLI部署百川大模型的命令为:

python3 -m fastchat.serve.cli --model-path path_of_Baichuan-7B --num-gpus 2

   在CLI部署时,如遇到以下的报错:trust_remote_code=True ,参考issue网址:https://github.com/lm-sys/FastChat/issues/1789 ,则在对应的Python路径下,将FastChat的fastchat/model/model_adapter.py文件中的代码中的第57至61行:

			tokenizer = AutoTokenizer.from_pretrained(
                model_path,
                use_fast=self.use_fast_tokenizer,
                revision=revision,
            )

和69至71行

		model = AutoModelForCausalLM.from_pretrained(
            model_path, low_cpu_mem_usage=True, **from_pretrained_kwargs
        )

中添加代码:`trust_remote_code=True` ,则可顺利部署。

   部署成功后的界面如下:
CLI部署后的用户界面

WEB部署

   FastChat还支持WEB部署,可Web UI和OpenAI兼容的RESTful APIs.  

   这里主要介绍如何实现与OpenAI兼容的具有RESTful APIs的部署方式,参考网址为:https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md .

   部署一共分为三步:

  1. python3 -m fastchat.serve.controller
  2. python3 -m fastchat.serve.modelworker --model-path path_of_Baichuan-7B
  3. python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

在部署过程中,如果遇到PydanticImportError ,原因为pydantic版本的问题,只需将pydantic版本降为1.*版本即可。

   部署成功后,该服务可提供与OpenAI风格类似的RESTful APIs,如下:

  • 查看模型

curl命令为:

curl http://localhost:8000/v1/models

输出结果为:

{
  "object": "list",
  "data": [
    {
      "id": "baichun_7b",
      "object": "model",
      "created": 1689004839,
      "owned_by": "fastchat",
      "root": "baichun_7b",
      "parent": null,
      "permission": [
        {
          "id": "modelperm-UERow2kYwq5B2M8aVQkwdk",
          "object": "model_permission",
          "created": 1689004839,
          "allow_create_engine": false,
          "allow_sampling": true,
          "allow_logprobs": true,
          "allow_search_indices": true,
          "allow_view": true,
          "allow_fine_tuning": false,
          "organization": "*",
          "group": null,
          "is_blocking": false
        }
      ]
    }
  ]
}
  • 文本补充(Text Completions)

curl命令为:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "baichun_7b",
    "prompt": "Once upon a time",
    "max_tokens": 40,
    "temperature": 0.5
  }' | jq .

输出结果为:

{
  "id": "cmpl-izbe3cRRiY4zAbJueBAyxZ",
  "object": "text_completion",
  "created": 1689004991,
  "model": "baichun_7b",
  "choices": [
    {
      "index": 0,
      "text": ", you could find a variety of different types of chocolate in stores. But now, many chocolate companies are focusing on creating vegan chocolate that is not only delicious but also cruelty-free. Here are",
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 4,
    "total_tokens": 43,
    "completion_tokens": 39
  }
}
  • 对话(Chat Completions)

curl命令为:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "baichun_7b",
    "messages": [{"role": "user", "content": "请用中文简单介绍三国演义?"}]
  }' | jq .

输出结果为:

{
  "id": "chatcmpl-3SiRqRgbZR8v6gLnQYo9eJ",
  "object": "chat.completion",
  "created": 1689005219,
  "model": "baichun_7b",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": " 三国演义是中国古代长篇小说,讲述了东汉末年至晋朝初年的历史故事。主要人物包括曹操、刘备、孙权和关羽等。故事情节曲折复杂,涉及政治、军事、文化等多个方面,被誉为中国古代小说的经典之作。《三国演义》不仅是一部文学作品,也是中国文化的重要组成部分,对中国历史和文化产生了深远的影响。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 533,
    "total_tokens": 629,
    "completion_tokens": 96
  }
}
  • 多轮对话

curl命令为:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "baichun_7b",
    "messages": [{"role": "user", "content": "请用中文简单介绍西游记?"}, {"role": "assistant", "content": "三国演义是中国古代长篇小说,讲述了东汉末年至晋朝初年的历史故事。主要人物包括曹操、刘备、孙权和关羽等。故事情节曲折复杂,涉及政治、军事、文化等多个方面,被誉为中国古代小说的经典之作。《三国演义》不仅是一部文学作品,也是中国文化的重要组成部分,对中国历史和文化产生了深远的影响。"}, {"role": "user", "content": "它的作者是谁?"}]
  }' | jq .

输出结果为:

{
  "id": "chatcmpl-8oE57oXC862wKYyrPLnSGM",
  "object": "chat.completion",
  "created": 1689005374,
  "model": "baichun_7b",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": " 《三国演义》的作者是明代小说家罗贯中。罗贯中是明代文学家,他的代表作品还有《水浒传》和《西游记》等。他在创作《三国演义》时,参考了大量的历史资料和传说,将这些内容融合在一起,创造了一个虚构的世界,成为了中国文学史上的经典之作。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 640,
    "total_tokens": 724,
    "completion_tokens": 84
  }
}
  • 使用Python代码
import openai
openai.api_key = "EMPTY" # Not support yet
openai.api_base = "http://localhost:8000/v1"

model = "baichun_7b"
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)

以上两种部署方式,都支持流式输出,且模型推理速度较快,笔者在上述测试例子中的推理时间一般为5-7秒,且支持分布式部署,并发量高。

总结

   本文主要介绍了如何使用FastChat来部署国产大模型——百川模型,并演示了两种部署方式——WEB部署和CLI部署,以及在部署过程中出现的问题和解决方案,希望能给读者带来启示。

参考文献

  1. 百川智能发布 70 亿参数量开源中英文大模型: https://www.geekpark.net/news/320721
  2. baichuan-inc/Baichuan-7B in Huggingface Hub: https://huggingface.co/baichuan-inc/Baichuan-7B
  3. OpenAI-Compatible RESTful APIs & SDK: https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md
  4. report error while i execute python -m fastchat.serve.openai_api_server --host localhost --port 8000: https://github.com/lm-sys/FastChat/issues/1641
  5. FastChat in Github: https://github.com/lm-sys/FastChat

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

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

相关文章

Java 匿名对象

一、简介 1.1.含义 没有名字的对象 。以常规的创建对象的方法: AtomicInteger atomicInteger new AtomicInteger(100000);格式: 类名 变量名 new 类名(); 这样就完成了对象的创建。注意:()内可以无参数&#xff0c…

津津乐道设计模式 - 状态模式详解(以交通信号灯举例带你快速理解)

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

Anaconda删除虚拟环境

# 查看环境,确定待删除环境位置 conda env list# 按照位置进行删除 conda env remove -p 要删除的虚拟环境路径举例: 删除py37执行如下命令: conda env remove -p D:\A\envs\py37

【GAN】基础知识(还在更新)

还没写完,别骂了.....遇到啥新东西也会补充进来 1. 损失函数/距离度量 1.1 KL散度 用来衡量分布之间距离 1.1.1 推导过程 如果想要对KL散度有一个比较好的理解,我其实建议看一下,从信息熵的角度入手我认为是一个比较好的切入点 相对熵&a…

RC-u5 树与二分图(二分图)

PTA | 程序设计类实验辅助教学平台 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N2e610; int st[N]; ll n,m;//数据可能超int int h[N],ne[N],e[N],idx; void add(int a,int b) {e[idx]b,ne[idx]h[a],h[a]idx; } void dfs(int v,int co…

基于Web的数字孪生智慧养老院可视化云平台

前言 我国已经迈入老龄化社会&#xff0c;老龄化社会中养老已然成为社会普遍关注的焦点&#xff0c;智慧养老成为未来趋势。 建设背景 社会因素 养老床位数量也增长至2020年的821万张.每千名老人拥有养老床位增长至35张,相对于先进国家的50-7O张仍有较大差距。目前养老床位…

python_day4

def test():return 1, a, Truex, y, z test() print(f"x{x},y{y},z{z}")位置参数&#xff1a;调用时根据参数位置传递参数 关键字参数&#xff1a;调用时通过“键值”形式传参 def user(name, age, gender):print(f"name:{name},age:{age},gender:{gender}&q…

Python django开发

第一步&#xff1a;创建开发环境 mkvirtualenv py2_django 第二步&#xff1a;安装django pip install django2.2.5 # 选择2.2.5的原因是这个版本是持久维护的 pip list # 查看安装的信息 第三步&#xff1a;start 一个项目&#xff0c;并创建子应用 cd ~/Myproject # 选择…

4.2 图书借阅系统数据库设计 --MySQL

本文目录 前言一、背景和需求分析1.1 背景1.2 信息需求1.3 功能需求管理员学生 1.4 数据流图 二、概念结构设计1. 抽象出系统实体2. 局部E-R图2.1 学生 E-R图2.2 借阅证 E-R图2.3 图书 E-R图2.4 管理员 E-R图2.5 公告 E-R图2.6 申请 E-R图2.7 借阅 E-R图2.8 评论 E-R图2.9 收藏…

❤ Vue2+vue-cli+vue-router+vuex +elementUI/vant完整项目搭建 项目和配置(一)

Vue2vue-clivue-routervuex elementUI/vant项目搭建和配置webpack&#xff08;一&#xff09; 项目整套&#xff1a;Vue2vue-clivue-routervuex elementUI/vant 1、环境检测&#xff1a; node 环境 git --version git 环境 git --version npm 环境 npm -v 查看VUE脚手架版本 …

响应式编程实战(02)-响应式编程的适用场景

0 知识前提 已掌握响应式编程中的核心概念&#xff1a;响应式流、背压机制以及响应式流规范。 1 引言 响应式编程能够应用到那些具体的场景呢? 目前有哪些框架中使用到了这一新型的技术体系呢? 2 响应式编程的应用场景分析 可以认为响应式编程并不仅仅是一种编程技术&a…

OpenPCDet系列 | 8.1 nuScenes数据集的处理流程与gt_sample的database构建

1. nuScenes Dataloader 对nuScenes数据集处理的了解&#xff0c;大体上的核心还是getitem函数、prepare_data函数&#xff0c;以及collate_batch函数三个部分的处理。其中prepare_data函数和collate_batch函数是在Dataset这个父类实现的&#xff0c;基本的处理流程基本不变&a…

《Redis 核心技术与实战》课程学习笔记(六)

哨兵集群 哨兵机制的基本流程 在 Redis 主从集群中&#xff0c;哨兵机制是实现主从库自动切换的关键机制。 哨兵其实就是一个运行在特殊模式下的 Redis 进程&#xff0c;主从库实例运行的同时&#xff0c;它也在运行。哨兵主要负责的就是三个任务&#xff1a;监控、选主&…

三种SQL实现聚合字段合并(presto、hive、mysql)

需求&#xff1a;按照项目名&#xff0c;以逗号合并参与人 presto select item_name,array_join(array_agg(name),,) as group_name from test.test_04 group by item_name order by item_name hive select item_name,concat_ws(,,collect_set(name)) as group_name from tes…

全志V3S嵌入式驱动开发(四种启动方式)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于v3s的启动方式分析,怎么研究都不为过。对我们整个系列文章比较熟悉的同学来说,这幅图真的是太熟悉了, 整个流程不复杂。它主要是告诉我们,v3s加载的顺序是怎么样的…

【Linux后端服务器开发】进程控制与替换

目录 一、进程控制 1. 进程退出 2. 进程等待 2.1 阻塞等待 2.2 status位图结构 2.3 非阻塞等待 二、进程替换 1. exec*系列函数 2. 进程替换高级语言可执行程序 一、进程控制 1. 进程退出 进程退出会进入僵尸态&#xff0c;把自己的退出结果写入到自己的task_struct…

一种使得大模型输出结构化数据的简易方法

最近在用大模型跑一些数据&#xff0c;于是就不可避免的遇到了如何让大模型输出的格式便于处理这个问题。经过一些研究发现了一套比较有用的方法&#xff0c;在这里总结一下。 背景 任务是这样的&#xff0c;我需要用大模型&#xff08;比如ChatGPT&#xff0c;ChatGLM等等&a…

Springboot启用HTTP响应压缩

官方文档:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/htmlsingle/#how-to-enable-http-response-compression

Java面试题大全(2023牛客网最新版)大厂面试题附答案详解

很多 Java 工程师的技术不错&#xff0c;但是一面试就头疼&#xff0c;10 次面试 9 次都是被刷&#xff0c;过的那次还是去了家不知名的小公司。 问题就在于&#xff1a;面试有技巧&#xff0c;而你不会把自己的能力表达给面试官。 应届生&#xff1a;你该如何准备简历&#…

解决mysql的count()函数条件表达式不生效的问题

示例 表数据 统计错误的sql select count(age 10) as count from student查询结果 原因 count(‘任意内容’)都会统计出所有记录数&#xff0c;因为count只有在遇见null时才不计数&#xff0c;即count(null)0 解决 方法1&#xff1a;count()函数中条件表达式加上or n…