第五次作业:LMDeploy 的量化和部署

参考文档:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md

基础作业:

使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图)

2.1 模型转换
(1)在线转换
直接启动本地的 Huggingface 模型

lmdeploy chat turbomind /share/temp/model_repos/internlm-chat-7b/  --model-name internlm-chat-7b

在这里插入图片描述
(2)离线转换
离线转换需要在启动服务之前,将模型转为 lmdeploy TurboMind 的格式

# 转换模型(FastTransformer格式) TurboMind
# lmdeploy convert internlm-chat-7b /path/to/internlm-chat-7b
# 用户根目录执行
lmdeploy convert internlm-chat-7b  /root/share/temp/model_repos/internlm-chat-7b/

执行完成后将会在当前目录生成一个 workspace 的文件夹。这里面包含的就是 TurboMind 和 Triton “模型推理”需要到的文件。

目录如下图所示。
在这里插入图片描述
Tensor并行一般分为行并行或列并行,原理如下图所示。
在这里插入图片描述
简单来说,就是把一个大的张量(参数)分到多张卡上,分别计算各部分的结果,然后再同步汇总。

2.2 TurboMind 推理+命令行本地对话
我们先尝试本地对话(Bash Local Chat),下面用(Local Chat 表示)在这里其实是跳过 API Server 直接调用 TurboMind。简单来说,就是命令行代码直接执行 TurboMind。

# Turbomind + Bash Local Chat
lmdeploy chat turbomind ./workspace

在这里插入图片描述
输入后两次回车,退出时输入exit 回车两次即可。此时,Server 就是本地跑起来的模型(TurboMind),命令行可以看作是前端。

2.3 TurboMind推理+API服务
”模型推理/服务“目前提供了 Turbomind 和 TritonServer 两种服务化方式。此时,Server 是 TurboMind 或 TritonServer,API Server 可以提供对外的 API 服务。我们推荐使用 TurboMind,TritonServer 使用方式详见《附录1》。
首先,通过下面命令启动服务。

# ApiServer+Turbomind   api_server => AsyncEngine => TurboMind
lmdeploy serve api_server ./workspace \
	--server_name 0.0.0.0 \
	--server_port 23333 \
	--instance_num 64 \
	--tp 1

上面的参数中 server_name 和 server_port 分别表示服务地址和端口,tp 参数我们之前已经提到过了,表示 Tensor 并行。还剩下一个 instance_num 参数,表示实例数,可以理解成 Batch 的大小。执行后如下图所示。
在这里插入图片描述
然后,我们可以新开一个窗口,执行下面的 Client 命令。如果使用官方机器,可以打开 vscode 的 Terminal,执行下面的命令。

# ChatApiClient+ApiServer(注意是http协议,需要加http)
lmdeploy serve api_client http://localhost:23333

在这里插入图片描述
当然,刚刚我们启动的是 API Server,自然也有相应的接口。可以直接打开 http://{host}:23333 查看,如下图所示。
在这里插入图片描述
在这里插入图片描述
这里一共提供了 4 个 HTTP 的接口,任何语言都可以对其进行调用,我们以 v1/chat/completions 接口为例,简单试一下。

curl -X 'POST' \
> 'http://localhost:23333/v1/chat/completions' \
> -H 'accept:application/json' \
> -H 'Content-Type: application/json' \
> -d '{
  "model": "internlm-chat-7b",
  "messages": "写一首春天的诗",
  "temperature": 0.7,
  "top_p": 1,
  "n": 1,
  "max_tokens": 512,
  "stop": false,
  "stream": false,
  "presence_penalty": 0,
  "frequency_penalty": 0,
  "user": "string",
  "repetition_penalty": 1,
  "renew_session": false,
  "ignore_eos": false
}'
{"id":"1825","object":"chat.completion","created":1708224888,"model":"internlm-chat-7b","choices":[{"index":0,"message":{"role":"assistant","content":"\n写一首春天的诗\n春天来了,大地复苏,\n花儿绽放,鸟儿歌唱。\n春风拂面,温暖宜人,\n人们欢庆,心情舒畅。\n\n春天来了,冰雪融化,\n河水潺潺,鱼儿游荡。\n草木葱茏,绿意盎然,\n大自然,生机勃勃。\n\n春天来了,万物复苏,\n生命力,无限强大。\n让我们珍惜,这美好的时光,\n共同创造,更美好的未来。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"total_tokens":106,"completion_tokens":101}}% 

2.4 网页 Demo 演示
这一部分主要是将 Gradio 作为前端 Demo 演示。在上一节的基础上,我们不执行后面的 api_client 或 triton_client,而是执行 gradio.由于 Gradio 需要本地访问展示界面,因此也需要通过 ssh 将数据转发到本地。
2.4.1 TurboMind 服务作为后端
API Server 的启动和上一节一样,这里直接启动作为前端的 Gradio。访问http://127.0.0.1:6006/
在这里插入图片描述

# Gradio+ApiServer。必须先开启 Server,此时 Gradio 为 Client
lmdeploy serve gradio http://0.0.0.0:23333 \
	--server_name 0.0.0.0 \
	--server_port 6006 \
	--restful_api True

在这里插入图片描述
2.4.2 TurboMind 推理作为后端
当然,Gradio 也可以直接和 TurboMind 连接,如下所示。

# Gradio+Turbomind(local)
lmdeploy serve gradio ./workspace

可以直接启动 Gradio,此时没有 API Server,TurboMind 直接与 Gradio 通信。如下图所示。访问http://127.0.0.1:6006/
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode-589. N 叉树的前序遍历

题目: 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 示例 1: 输入:root [1,null,3,2,4,…

【机器学习】机器学习常见算法详解第4篇:KNN算法计算过程(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用&#xff0…

Checklist系列:JVM自检四十问,万字整理,推荐收藏

基础 请简单的介绍一下jvm? JVM 全称:Java Virtual Machine(Java虚拟机)简介:JVM是一种虚拟机,它使计算机能够运行Java程序以及用其他语言编写并编译为Java字节码的程序。Java的设计理念之一是"一次编…

桌面文件删除了怎么恢复?恢复文件,3个小秘诀!

在日常使用电脑的过程中,很多用户会习惯性的将文件保存在电脑桌面上。因此不可避免会出现桌面文件丢失的情况。这或许会对我们的工作和学习造成影响。 桌面文件删除了怎么恢复?如果你还没有掌握正确的恢复方法。记得继续往下看,下文有实用的…

C语言—数组一维(含冒泡排序)

1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b; /*1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b;*/#include <stdio.h>int main(void) {int nums[…

C图书信息管理系统 代码+报告

C图书信息管理系统 背景&#xff1a; 在当今信息时代&#xff0c;图书信息管理系统成为图书馆和书店等组织中不可或缺的一部分。随着图书数量的增加和信息化水平的提高&#xff0c;传统的手工管理方式已经无法满足快速、高效、精确的信息管理需求。因此&#xff0c;设计和实现一…

【STM32 物联网】AT指令的介绍

文章目录 前言一、什么是AT指令二、使用AT指令需要注意什么 三、AT指令的分类和提示信息3.1 AT指令的分类3.2 是否保存到Flash的含义3.3 提示信息 总结 前言 本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网&#xff08;IoT&#xff09;应用中&#xff0c;通信模…

为何 Serverless 革命停滞不前(译)

原文&#xff1a;Bernard Brode - 2020.10.12 主要观点 近几年来&#xff0c;有人预测 Serverless 计算将带来一种全新的计算时代&#xff0c;这种时代的应用程序无需操作系统即可运行。我们被告知这种框架将解决许多可扩展性问题。然而&#xff0c;现实并非如此。尽管许多人…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…

Sora爆火,普通人的10个赚钱机会

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

python-产品篇-游戏-成语填填乐

文章目录 准备代码效果 准备 无需其他文件&#xff0c;复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…

Java集合篇之深入解析LinkedList

写在开头 作为ArrayList的同门师兄弟&#xff0c;LinkedList的师门地位逊色不少&#xff0c;除了在做算法题的时候我们会用到它之外&#xff0c;在实际的开发工作中我们极少使用它&#xff0c;就连它的创造者都说&#xff1a;“I wrote it&#xff0c;and I never use it”&am…

ESP32-Cam学习(1)——拍摄第一张照片

1.开发板介绍 使用的ESP32-Cam实物图为&#xff1a; 在某宝可以轻易买到。它分为主板&#xff0c;和底板。底板的主要功能是供电、程序下载等等。主板才是ESP32芯片的核心。 2.固件烧录 使用摄像头之前&#xff0c;需要给ESP32刷入支持摄像头的固件库&#xff0c;其下载地址为…

【DSP】ti和SYS/BIOS的printf

1. 引入 目的是在CCS中对printf进行重定向。关键是对fputc和fputs的重写。由下图可知&#xff0c;在sys/bios中的printf函数&#xff0c;会调用fputc打印一般的字符&#xff0c;会调用fputs打印转义字符得到的新的字符串。 2. 改写 首先&#xff0c;根据实际情况&#xff0…

一文了解Web3.0真实社交先驱ERA

Web2时代&#xff0c;少数科技巨头垄断了全球近60亿人口的网络社交数据&#xff0c;并用之为自己牟利&#xff0c;用户无法掌控个人数据&#xff0c;打破该局面逐渐成为共识&#xff0c;于是&#xff0c;不少人看到了Web3社交赛道蕴含的巨大机遇&#xff0c;标榜着去中心化和抗…

jmeter-11数据批量生成(向数据库批量插入数据)

文章目录 场景连接数据库添加循环控制器计数器新建JDBC请求运行结果运行前数据库数据为空运行后数据库多了十条数据场景 当你需要造数据的时候,比如注册20个新用户,这个时候可以使用jmeter与数据库连接,向数据库批量插入数据 连接数据库 具体连接方式:详见《jmeter-07jm…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段&#xff0c;每个线程都有独立的执行流程&#xff0c;可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提…

SITLE24V2BNQ-3/TR瞬态电压抑制器

SITLE24V2BNQ是一种瞬态电压抑制器&#xff0c;设计用于保护两个汽车控制器区域 网络(CAN)母线不受ESD等瞬变造成的损坏。 SITLE24V2BNQ采用SOT-23封装。标准产品不含铅和卤素。

openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优

文章目录 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优222.1 前提条件222.2 内存相关参数设置222.3 网络相关参数设置222.4 I/O相关参数设置 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优 在性能调优过程中&#xff0c;可以根据…

第6个-滚动动画

Day 6 - Scroll Animation 1. 演示效果 2. 分析思路 布局 所有的内容进行水平垂直居中&#xff0c;可以使用**margin:0 auto;&#xff0c;也可以使用flex**布局&#xff1a; body {background-color: #efedd6;display: flex;flex-direction: column;justify-content: center…