导入和部署自定义 LLM 大模型

本文以【Qwen2-7B-Instruct】模型为例,指导如何将自定义大模型导入到 TI 平台,并使用平台内置推理镜像部署大模型对话推理服务。

前置要求

申请 CFS

本文所涉及到的操作需要通过 CFS 存储模型文件,详情请查看创建文件系统及挂载点。

操作步骤

1. 上传模型文件到 CFS

登录腾讯云 TI-ONE 控制台训练工坊 > Notebook,单击新建,其中各字段的填写说明如下:

镜像:选择任意内置镜像即可。

计费模式:选择按量计费或包年包月均可,平台支持的计费规则请您查看计费概述。

存储配置:选择 CFS 文件系统,路径默认为根目录 /,用于指定保存用户自定义大模型位置。

其它设置:默认不需要填写。

说明:

本 Notebook 实例仅用于上传或下载大模型文件。





新建成功后启动 Notebook,单击 Notebook > Python3(ipykernel) 通过脚本下载所需模型;





您可在魔搭社区或Hugging Face检索需要用到的大模型,通过社区中 Python 脚本自行下载模型并保存到CFS中,本文以【Qwen2-7B-Instruct】模型为例,下载代码如下:

!pip install modelscope

from modelscope import snapshot_download

#qwen/Qwen2-7B-Instruct为需要下载的模型名称,cache_dir为下载模型保存的地址,这里'./'表示将下载模型保存在CFS的根目录中

model_dir = snapshot_download('qwen/Qwen2-7B-Instruct', cache_dir='./')

说明:

指定下载模型的地址 cache_dir(例如path/to/local/dir)后,后续在线服务 CFS 中指定模型地址为 /path/to/local/dir/qwen/Qwen2-7B-Instruct。

复制上述下载脚本并更换需要下载的模型后,粘贴到新建的 ipynb 文件中,点击运行按钮即可开始下载模型;



此外您也可以在本地下载或微调后,通过 notebook 上传通道将模型文件保存至 CFS 中,上传接口如图所示:





2. 创建在线服务

通过腾讯云TI平台的模型服务 > 在线服务,单击新建服务来启动推理服务,以下是服务实例配置的指引。

模型来源:选择 CFS

选择模型:指定申请的 CFS,模型路径为 CFS 中下载或上传的模型路径,此处为【/qwen/Qwen2-7B-Instruct】。

运行环境:选择【内置 / LLM / angel-vllm】。

算力规格:根据实际的模型大小或拥有的资源情况选择,大模型推理时需要的机器资源与模型的参数量相关,推荐按如下规则配置推理服务资源。

模型参数量

GPU 卡类型和数量

6 ~ 8B

L20 * 1 / A10 * 1 / A100 * 1 / V100 * 1

12 ~ 14B

L20 * 1 / A10 * 2 / A100 * 1 / V100 * 2

65 ~ 72B

L20 * 8 / A100 * 8

高级设置 > 环境变量】:需要设置模型名称MODEL_ID(魔搭社区或Hugging Face上开源模型 ID),以及对话模板名称CONV_TEMPLATE (若 MODEL_ID与开源模型相同,可以不添加CONV_TEMPLATE参数),常用的对话模板名称如下表所示,本文使用qwen-chat 系列,故设置为qwen-7b-chat。

对话模板名称CONV_TEMPLATE

支持的模型系列MODEL_ID

generate

非对话模型(直接生成,无对话模板)

llama-3

llama-3-8b-instruct、llama-3-70b-instruct 模型

llama-2

llama-2-chat 系列模型

qwen-7b-chat

qwen-chat 系列模型(chatml格式)

baichuan2-chat

baichuan2-chat 系列模型

baichuan-chat

baichuan-13b-chat 模型

chatglm3

chatglm3-6b 模型

chatglm2

chatglm2-6b 模型

在线服务创建实例配置如下:





注意:

如果对推理速度有较高要求,推荐您开启量化加速,通过环境变量 QUANTIZATION 设置,可选值有"none", "ifq", "smoothquant", "auto"。

none:表示关闭量化加速

ifq:表示开启在线 Int8 Weight-Only 量化,可以在效果基本不损失的情况下加速推理,并减少模型权重的显存占用。

smoothquant:表示开启 LayerwiseSearchSMQ 量化 ,可以在效果略微损失的情况下进一步加速推理(依赖提前准备量化后的模型文件,当前仅部分模型支持)

auto:表示自动判断量化模式,其中:

若机型的显卡不支持量化,自动关闭量化。

若模型目录中包含 smoothq_model-8bit-auto.safetensors 文件,会自动开启 LayerwiseSearchSMQ 量化加速。

其他情况下,默认开启在线 Int8 Weight-Only 量化加速(ifq)。

若开启服务后日志报错 CUDA out of memory,此处由于模型max-model-len参数默认值32k较大(推理服务支持的最大上下文token数,默认为自动读取模型配置信息的上下文长度,若模型加载默认的上下文长度较大会导致显存不足),可通过环境变量 MAX_MODEL_LEN 来设置较小的数值(例如16k或8k),也可以通过开启量化加速减少模型权重所占用的显存。

3. 前端在线体验

进入创建的在线服务详情,通过点击在线体验 Tab 页即可与部署的大模型进行交互体验。





4. 接口服务调用

可通过服务调用 Tab 页中的接口信息 > 调用方式(在线测试)进行访问,接口的调用地址为 ${SERVER_URL}/v1/chat/completions,请求体的格式:

{"messages":[{"role": "user", "content": "你是谁"}]}

字段 content 为具体的消息内容。



公网访问地址可从在线服务实例服务调用中获取,API 调用示例如下:

# 公网访问地址

SERVER_URL = https://ms-gp6rjk2jj-**********.gw.ap-shanghai.ti.tencentcs.com/ms-gp6rjk2j



# 非流式调用

curl -H "content-type: application/json" ${SERVER_URL}/v1/chat/completions -d '{"messages":[{"role": "user", "content": "你好"}], "temperature": 0.0}'

# 流式调用

curl -H "content-type: application/json" ${SERVER_URL}/v1/chat/completions -d '{"messages":[{"role": "user", "content": "你好"}], "temperature": 0.0, "stream": true}'

非流式返回结果:

{"id":"chatcmpl-4aeRgYwnaYe4RzmmcyKtYs","object":"chat.completion","created":1698291242,"model":"baichuan-13b-chat","choices":[{"index":0,"message":{"role":"assistant","content":"你好!有什么我能帮到你的吗?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"total_tokens":16,"completion_tokens":12}}

流式返回结果:

data: {"id": "chatcmpl-hn5mCVt4szVVZBa4fVFZWF", "model": "baichuan-13b-chat", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]}



data: {"id": "chatcmpl-hn5mCVt4szVVZBa4fVFZWF", "model": "baichuan-13b-chat", "choices": [{"index": 0, "delta": {"content": " 你"}, "finish_reason": null}], "usage": {"prompt_tokens": 4, "total_tokens": 5, "completion_tokens": 1}}



data: {"id": "chatcmpl-hn5mCVt4szVVZBa4fVFZWF", "model": "baichuan-13b-chat", "choices": [{"index": 0, "delta": {"content": "好"}, "finish_reason": null}], "usage": {"prompt_tokens": 4, "total_tokens": 6, "completion_tokens": 2}}



..........此处省略中间结果..............



data: {"id": "chatcmpl-hn5mCVt4szVVZBa4fVFZWF", "model": "baichuan-13b-chat", "choices": [{"index": 0, "delta": {"content": "?"}, "finish_reason": null}], "usage": {"prompt_tokens": 4, "total_tokens": 15, "completion_tokens": 11}}



data: {"id": "chatcmpl-hn5mCVt4szVVZBa4fVFZWF", "object": "chat.completion.chunk", "created": 1714120317, "model": "baichuan-13b-chat", "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 4, "total_tokens": 16, "completion_tokens": 12}}



data: [DONE]

另外也可以通过 python 常用的 requests 库来使用服务,下面是一个命令行与 Qwen2-7B-Instruct 大模型推理服务进行对话交互的 Demo 示例:

import argparse

import requests

import json



def chat(messages):

data = {

"messages": messages,

"temperature": args.temperature,

"max_tokens": args.max_tokens,

"top_p": args.top_p,

"stream": True, # 开启流式输出

}

header = {

"Content-Type": "application/json",

}

if args.token:

header["Authorization"] = f"Bearer {args.token}"



response = requests.post(f"{args.server}/v1/chat/completions", json=data, headers=header, stream=True) # 设置 stream=True 参数获取实时数据流

if response.status_code != 200:

print(response.json())

exit()



result = ""

print("Assistant: ", end = "", flush = True)

for part in response.iter_lines():

if part:

if "content" in part.decode("utf-8"):

content = json.loads(part.decode("utf-8")[5:])["choices"][0]["delta"]["content"] # 字符串过滤 data: 之后转成 json 格式再取文本

result += content

print(content, end = "", flush = True)

print("\n")



return result



if __name__ == "__main__":

parser = argparse.ArgumentParser(description="Chat CLI Demo.")

# --server替换为实际的调用地址

parser.add_argument("--server", type=str, default="https://ms-gp6rjk2j-*******.gw.ap-shanghai.ti.tencentcs.com/ms-gp6rjk2j")

parser.add_argument("--max-tokens", type=int, default=512)

parser.add_argument("--temperature", type=float, default=0.7)

parser.add_argument("--top_p", type=float, default=1.0)

parser.add_argument("--system", type=str, default=None)

parser.add_argument("--token", type=str, default=None)

args = parser.parse_args()



messages = []

if args.system:

messages.append({"role": "system", "content": args.system})



while True:

user_input = input("User: ")

messages.append({"role": "user", "content": user_input})

response = chat(messages)

messages.append({"role": "assistant", "content": response})



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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

HTTP慢速攻击原理及解决办法

目录 引言 HTTP慢速攻击原理 解决办法 Nginx Tomcat 华宇TAS IIS 结论 引言 HTTP慢速攻击(Slow HTTP Attack)是一种拒绝服务攻击(DoS),攻击者通过故意缓慢地发送HTTP请求来耗尽服务器资源,导致合法…

[mysql]修改表和课后练习

目录 DDL数据定义语言 添加一个字段 添加一个字段到最后一个 添加到表中的第一个一个字段 选择其中一个位置: 修改一个字段:数据类型,长度,默认值(略) 重命名一个字段 删除一个字段 重命名表 删除表 清空表 DCL中事务相关内容 DCL中COMMIT和ROLLBACK的讲解 对比TR…

SpringBoot+ClickHouse集成

前面已经完成ClickHouse的搭建&#xff0c;创建账号&#xff0c;创建数据库&#xff0c;保存数据库等&#xff0c;接下来就是在SpringBoot项目中集成ClickHouse。 一&#xff0c;引入依赖 <!-- SpringBoot集成ClickHouse --> <dependency><groupId>com.baom…

搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验

品牌&#xff1a;SouVR 发票&#xff1a;支持专票、普票 单位&#xff1a;套 版本号&#xff1a;1.0 包装清单&#xff1a;软件1套 软件形式&#xff1a;U盘、光盘 运行环境&#xff1a;windows 应用对象&#xff1a;煤矿企业、高校、科研单位 系统配置&#xff1a;…

(五)Spark大数据开发实战:灵活运用PySpark常用DataFrame API

目录 一、PySpark 二、数据介绍 三、PySpark大数据开发实战 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映时间及…

单链表的实现(数据结构)

一. 单链表的实现 我们在上一篇中简单的认识了链表的组成和结构&#xff0c;并打印出链表&#xff0c;那么今天就来具体实现一下单链表对于数据增加、删减、插入等。 接下来就是我们在链表中对于数据的增、删、插的实现&#xff0c;对于我们的链表来说在任何地方增加数据都需…

Golang | Leetcode Golang题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; func singleNonDuplicate(nums []int) int {low, high : 0, len(nums)-1for low < high {mid : low (high-low)/2mid - mid & 1if nums[mid] nums[mid1] {low mid 2} else {high mid}}return nums[low] }

算法: 链表题目练习

文章目录 链表题目练习两数相加两两交换链表中的节点重排链表合并 K 个升序链表K 个一组翻转链表 总结 链表题目练习 两数相加 坑: 两个链表都遍历完后,可能需要进位. class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode cur1 l1;ListNode…

深入Pillow:处理图像下载中的意外挑战

在当今数字化时代&#xff0c;获取和处理图像数据已经成为了许多应用程序的核心功能。从社交媒体到电子商务&#xff0c;图像的获取和处理对于用户体验至关重要。下载图片不仅能够丰富我们的内容&#xff0c;还能够通过分析图像数据为我们的应用提供更多价值。然而&#xff0c;…

零基础Java第十三期:继承与多态(一)

目录 一、继承 1.1. 继承的目的 1.2. 继承的概念 1.3. 继承的语法 1.4. 父类的访问 1.5. 继承中的重载与重写 1.6. 子类的构造方法 1.7. 再谈初始化 一、继承 1.1. 继承的目的 我们来定义一个Dog和Cat的类&#xff1a; public class Dog {public int age;public Strin…

【ONLYOFFICE文档】8.2版本测评

文章目录 引言ONLYOFFICE 产品简介PDF编辑器新功能1.协作编辑 PDF&#xff0c;让团队合作更高效2.为 PDF 表单添加签名3.改进的简洁界面4.性能优化&#xff1a;更快、更高效的体验 文档编辑器中的新功能域代码功能&#xff1a;自动更新文档中的动态数据协作功能&#xff1a;轻松…

【JAVA】java 企业微信信息推送

前言 JAVA中 将信息 推送到企业微信 // 企微消息推送messageprivate String getMessage(String name, String problemType, String pushResults, Long orderId,java.util.Date submitTime, java.util.Date payTime) {String message "对接方&#xff1a;<font color\…

【RK3588 Linux 5.x 内核编程】-GPIO设备驱动与点亮LED

GPIO设备驱动与点亮LED 文章目录 GPIO设备驱动与点亮LED1、Linux中的GPIO介绍2、GPIO库和工具3、Linux内核GPIO操作步骤3.1 验证GPIO3.2 请求GPIO3.3 导出GPIO到sysfs(可选)3.4 设置GPIO为输入/输出3.5 更改GPIO的电平(值)3.6 读取GPIO的值(电平)3.7 释放GPIO4、GPIO驱动…

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…

[VUE]框架网页开发1 本地开发环境安装

前言 其实你不要看我的文章比较长&#xff0c;但是他就是很长&#xff01;步骤其实很简单&#xff0c;主要是为新手加了很多解释&#xff01; 步骤一&#xff1a;下载并安装 Node.js 访问 Node.js 官网&#xff1a; Node.js — Download Node.js 下载 Windows 64 位版本&…

[signal] void QComboBox::currentTextChanged(const QString text)

[signal] void QComboBox::currentTextChanged(const QString &text) This signal is sent whenever currentText changes. The new value is passed as text. This function was introduced in Qt 5.0. Note: Notifier signal for property currentText. 属性currentText的…

Unity中实现伤害飘字或者提示飘字效果(DoTween实现版本)

&#xff01;&#xff01;&#xff01;在实现以下效果之前&#xff0c;一定要往项目中导入DoTween插件。 一、搭建测试场景 1、在场景中新建一个带有Text组件的游戏物体A&#xff0c;并把这个游戏物体A中Text组件的Color属性中alpha值为0&#xff0c;让文字在场景中隐藏。 …

掌握PyQt5图形界面化工具及绑定爬虫程序

PyQT5——图形化界面 文章目录 PyQT5——图形化界面集成化图形界面工具为什么使用 \$ProjectFileDir$?示例场景其他 Varaiablespyuic参数解释整体含义示例使用PyQt5和pyuic 创建pyqt5的程序创建一个窗口app.exec\_()和sys.exit(app.exec_())的区别1. app.exec_()2. sys.exit(a…

从零开始在本地服务器上安装OnlyOffice并进行跨地域协同编辑文件

文章目录 前言1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 前言 本篇文章讲解如何使用Docker在本地Linux服务器上安装ONLYOFFICE&#xff0c;并结合cpolar内网穿透实现公网访问本地部署的文档编辑器与远程协作。 Community Editi…