Fastchat:基于fastapi构建大模型加载服务

news2024/11/30 2:52:31

Fastchat:基于fastapi构建大模型加载服务

  • Fastapi LLM支持
    • FastChat 服务架构
    • 安装
      • 方法一:pip
      • 方法二:源文件
    • 加载大模型推理
      • 1.命令行
      • 2.Web
        • 启动控制器
        • 启动模型工作
        • 启动 Gradio Web 服务器
        • 注册多个模型
      • 3.兼容 OpenAI 的 RESTful API
    • RESTful API 服务器
    • 本地GPU微调

Fastapi LLM支持

FastChat 服务架构

请添加图片描述

安装

方法一:pip

pip3 install "fschat[model_worker,webui]"

方法二:源文件

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

Mac 上运行:

brew install rust cmake

从源文件安装

pip3 install --upgrade pip  # enable PEP 660 support
pip3 install -e ".[model_worker,webui]"

加载大模型推理

1.命令行

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

请添加图片描述

关键参数汇总:

参数说明
–model-path模型路径,可以是本地文件夹或HuggingFace的repo ID
–revisionHuggingFace Hub模型修订版本标识
–device设备类型,可选择cpu/cuda/mps/xpu
–gpus指定单个或多个GPU,如1或0,2
–num-gpusGPU数量
–max-gpu-memory每个GPU用于存储模型权重的最大内存,使用字符串表示如’13Gib’
–load-8bit使用8位量化
–cpu-offloading仅用于8位量化:将超出GPU容量的权重卸载到CPU
–gptq-ckptGPTQ检查点路径,用于GPTQ量化
–gptq-wbitsGPTQ量化比特数,可选择2/3/4/8/16
–gptq-groupsizeGPTQ量化分组大小,默认为整行
–gptq-act-order是否应用GPTQ激活顺序启发式方法
–awq-ckptAWQ检查点路径,用于AWQ量化
–awq-wbitsAWQ量化比特数,可选择4/16
–awq-groupsizeAWQ量化分组大小,默认为整行
–conv-template对话提示模板
–conv-system-msg对话系统消息
–temperature温度参数
–repetition_penalty重复惩罚参数
–max-new-tokens最大新生成词元数量
–no-history不保留历史记录
–style显示样式,可选择simple/rich/programmatic
–multiline启用多行输入
–mouse启用鼠标支持光标定位(仅限rich样式)
–judge-sent-end是否启用识别句子结束的逻辑纠正
–debug打印调试信息(如prompt)

2.Web

要使用 Web UI 提供服务,您需要三个主要组件:

  1. 与用户交互的 Web 服务器

  2. 托管一个或多个模型的模型工作人员

  3. 协调网络服务器和模型工作人员的控制器。

启动控制器

python3 -m fastchat.serve.controller

请添加图片描述

启动模型工作

python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.3

等到进程完成加载模型,您会看到“Uvicorn running on …”。模型工作者将自己注册到控制器。

请添加图片描述

测试模型是否注册到控制器,成功会有一个简短的输出
请添加图片描述

启动 Gradio Web 服务器

python3 -m fastchat.serve.gradio_web_server

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

请添加图片描述

打开 http://0.0.0.0:7860 ,可以看到交互界面

请添加图片描述

注册多个模型

  • 您可以将多个模型工作人员注册到单个控制器,该控制器可用于为具有更高吞吐量的单个模型提供服务或同时为多个模型提供服务。执行此操作时,请为不同的模型工作人员分配不同的 GPU 和端口。
# worker 0
CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.3 --controller http://localhost:21001 --port 31000 --worker http://localhost:31000
# worker 1
CUDA_VISIBLE_DEVICES=1 python3 -m fastchat.serve.model_worker --model-path lmsys/fastchat-t5-3b-v1.0 --controller http://localhost:21001 --port 31001 --worker http://localhost:31001
  • 您还可以启动多选项卡 gradio 服务器,其中包括 Chatbot Arena 选项卡。
python3 -m fastchat.serve.gradio_web_server_multi

3.兼容 OpenAI 的 RESTful API

RESTful API 服务器

  1. 启动控制器
python3 -m fastchat.serve.controller
  1. 启动模型加载
python3 -m fastchat.serve.model_worker --model-path /mnt/code/LLM_Service/model/Baichuan-13b-Chat --num-gpus 2

  1. 启动 RESTful API 服务器
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

  • 安装openai-python:
pip install --upgrade openai

通过ChatOpenAI接口调用模型:

from langchain.chat_models import ChatOpenAI
from langchain import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)

api_base_url = "http://192.168.175.6:8000/v1" 
api_key= "EMPTY"
LLM_MODEL = "Baichuan-13b-Chat"
model = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key=api_key,
    openai_api_base=api_base_url,
    model_name=LLM_MODEL
)


human_prompt = "{input}"
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)

chat_prompt = ChatPromptTemplate.from_messages(
    [("human", "我们来玩成语接龙,我先来,生龙活虎"),
     ("ai", "虎头虎脑"),
     ("human", "{input}")])


chain = LLMChain(prompt=chat_prompt, llm=model, verbose=True)
print(chain({"input": "恼羞成怒"}))

请添加图片描述

如果您想在同一台机器上、同一进程中运行多个模型,可以将model_worker上述步骤替换为多模型变体:

python3 -m fastchat.serve.multi_model_worker \
    --model-path lmsys/vicuna-7b-v1.3 \
    --model-names vicuna-7b-v1.3 \
    --model-path lmsys/longchat-7b-16k \
    --model-names longchat-7b-16k

本地GPU微调

安装依赖

pip3 install -e ".[train]"

微调

您可以使用以下命令使用 4 x A100 (40GB) 训练 Vicuna-7B。--model_name_or_path使用 LLaMA 权重的实际路径和--data_path数据的实际路径进行更新。

torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \
    --model_name_or_path ~/model_weights/llama-7b  \
    --data_path data/dummy_conversation.json \
    --bf16 True \
    --output_dir output_vicuna \
    --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

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

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

相关文章

CSS 滚动驱动动画 view()

CSS 滚动驱动动画 view 语法例子 两个 inset一个 inset CSS 滚动驱动动画 view() animation-timeline 通过 view() 表示一个元素 A 将提供匿名的、 用来控制动画的 view progressive timeline. 通过 A 在其最近的滚动祖先元素中的可见性来推动 view progressive timeline. 也…

PHP自己的框架2.0版本目录结构和命名空间自动加载类(重构篇一)

目录 1、目录结构演示效果 2、搭建目录结构,以及入口public->index.php 3、引入core下面core->base.php 4、自动加载实现core->fm->autoload.php 5、框架运行文件core->fm->core.php 6、最终运行index.php结果 1、目录结构演示效果 2、搭…

单目标应用:基于成长优化算法(Growth Optimizer,GO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网是由分布式电源、储能装置和能量转换装置等组成的小型发配电系统,具有成本低、电压低、污染小等特点。由于环保和能源压力,清洁可再生能源和分布式能源工业发展潜力巨大。微电网控制器可实现对电网的集中控制&#xff0…

【C++笔记】C++string类模拟实现

【C笔记】Cstring类模拟实现 一、实现模型和基本接口1.1、各种构造和析构1.2、迭代器 二、各种插入和删除接口2.1、插入接口2.2、删除接口2.3、resize接口 三、各种运算符重载3.1、方括号运算符重载3.2、各种比较运算符重载 四、查找接口4.1、查找字符4.2、查找子串 五、流插入…

【7z密码】如何给7z压缩包加密、解密?

7z压缩包是压缩率最大的格式,也有很多朋友会使用7z格式,那么7z压缩包如何进行加密、解密?今天给大家介绍详细教程。 7-zip加密 右键文件选择7-zip打开压缩软件进行压缩或者在打开7-zip软件找到需要压缩的文件,点击添加&#xff…

【大数据】基于 Flink CDC 高效构建入湖通道

基于 Flink CDC 高效构建入湖通道 1.Flink CDC 核心技术解析2.CDC 数据入湖入仓的挑战2.1 CDC 数据入湖架构2.2 CDC 数据 ETL 架构 3.基于 Flink CDC 的入湖入仓方案3.1 Flink CDC 入湖入仓架构3.2 Flink CDC ETL 分析3.3 存储友好的写入设计3.4 Flink CDC 实现异构数据源集成3…

ECharts数据可视化项目

Echarts 可视化面板介绍01-使用技术02- 案例适配方案03-基础设置04-header 布局05-mainbox 主体模块06-公共面板模块 panel07-柱形图 bar 模块(布局)08-中间布局09-Echarts-介绍10-Echarts-体验11-Echarts-基础配置12- 柱状图图表(两大步骤)13-柱状图2定…

基于Java+SpringBoot+Vue前后端分离交通管理在线服务系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

地形有通挂支隘险远六种情况

地形有通、挂、支、隘、险、远六种情况 【安志强趣讲《孙子兵法》第34讲】 第十一篇:地形篇 【全文大白话】 地形有各种情况,行军有各种情况,用好地形获得交战的主动权。 【原文】 孙子曰:地形有通者,有挂者&#xff0…

百家号创业项目:小白即可日入30到100,寻找爆款文案技术教程免费分享

百家号项目:月入1K-3K不费力,寻找爆款文案的秘诀! 当下,有一个备受关注的项目——百家号,许多人以 300-800 元不等的价格提供培训,声称每个号每月可以轻松赚取1K-3K。 然而,据我个人测试&…

容器编排学习(一)容器技术

一 容器 1 Linux 容器的起源 容器的起源可以追溯到1979年 UNIX 系统中提供的chroot命令,容器的最初的设计目标是为了隔离计算机中的各类资源以便降低软件开发、测试阶段的风险,或者充当蜜罐,吸引黑客的攻击,以便监视黑客的行为…

Logstash--logstash-syslog-putput插件安装及使用

这篇文章讲的是如何在Linux服务器上安装logstash-syslog-output插件及使用,是集网上之大成,择选出一条正确有效简短的路。 安装 插件logstash-syslog-output,如果你的logstash没有,则需要安装。 查看logstash是否含有这个插件的…

代码生成商业化一些思考

代码生成解决方案 生成项目代码有3大类的解决思路: 1.从底到上的生成,部分代码生成生成一行代码或者一个方法种一小块代码生成,ide插件代码生成基本这种思路 2.大语言模型作为软件工程不同角色agent,用户给出idea每个agent自动…

vue3:16、Pinia的基本语法

选项式APi 组合式API src/store/counter.js import { defineStore } from "pinia"; import { computed, ref } from "vue";export const userCounterStore defineStore("counter",()>{//声明数据 state - countconst count ref(100)//声…

ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS!

ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS! 1、背景2、基于注意力层的模型4、解码器 1、背景 本篇论文基于Transformer模型提出了一个基于注意力层的模型,并采用REINFORCE方法训练模型,来求解以下几种组合优化问题: 旅行商问题(Travellin…

Docker 的分层文件系统

1 分层文件系统 UnionFS 联合文件系统 bootfs:boot file systemrootfs:root file system 分层文件系统 Docker镜像都是只读的,当容器启动时,一个新的可写层被加到镜像的顶部,这一层就是我们通常说的容器层&#xf…

Redis缓存预热、缓存雪崩、缓存击穿、缓存穿透

文章目录 Redis缓存预热、缓存雪崩、缓存击穿、缓存穿透一、缓存预热1、问题排查2、解决方案(1)准备工作(2)实施(3)总结 二、缓存雪崩1、解决方案 三、缓存击穿1、解决方案(1)互斥锁…

大语言模型之八-提示工程(Prompt engineer)

大语言模型的效果好,很大程度上归功于算力和数据集,算力使得模型可以足够大,大到模型的理解、记忆、推理和生成以及泛化能力可以同时兼备,而数据集则是模型学习的来源。 LLM中的prompt方法主要用于fine-tune阶段,即在…

DIM层维度表学习之用户维度表分析

1.用户维度表的模型 DROP TABLE IF EXISTS dim_user_zip; CREATE EXTERNAL TABLE dim_user_zip (id STRING COMMENT 用户ID,name STRING COMMENT 用户姓名,phone_num STRING COMMENT 手机号码,email STRING COMMENT 邮箱,user_level STRING COM…

ArcGIS Pro3.0.2保姆级安装教程

软件简介: ArcGIS Pro是ERSI推出的新一代原生态64位ArcGIS桌面产品。具备强大的二维、三维一体化功能,继承了传统桌面产品ArcMap等产品几乎所有的功能,并在多个方面作了进一步的优化和改进,是云端一体化、数据科学与空间数据科学…