LLM部署-Fastllm

本文介绍了fastllm的使用,其model支持ChatGLM的API函数,转好的模型可导出到本地。还对FastLLM chatglm - 6b模型导出进行解析,包括torch2flm.py文件实现模型导出步骤,chatglm_export.py代码解析,以及在FastLLM中支持新模型的流程。

fastllm使用

# 这是原来的程序,通过huggingface接口创建模型
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code = True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code = True)

# 加入下面这两行,将huggingface模型转换成fastllm模型
# 目前from_hf接口只能接受原始模型,或者ChatGLM的int4, int8量化模型,暂时不能转换其它量化模型
from fastllm_pytools import llm
model = llm.from_hf(model, tokenizer, dtype = "float16") # dtype支持 "float16", "int8", "int4"

# 注释掉这一行model.eval()
#model = model.eval()
  • model支持了ChatGLM的API函数chat, stream_chat,因此ChatGLM的demo程序无需改动其他代码即可运行

  • model还支持下列API用于生成回复

# 生成回复
print(model.response("你好"))

# 流式生成回复
for response in model.stream_response("你好"):
    print(response, flush = True, end = "")
  • 转好的模型也可以导出到本地文件,之后可以直接读取,也可以使用fastllm cpp接口读取
model.save("model.flm"); # 导出fastllm模型
new_model = llm.model("model.flm"); # 导入fastllm模型

FastLLM chatglm-6b模型导出解析

torch2flm.py

首先来看 fastllm/tools/fastllm_pytools/torch2flm.py 这个文件,这个文件实现了一个tofile函数用于将一个训练好的模型导出到一个文件中。具体来说,它包括以下几个步骤:

  1. 打开一个二进制文件,准备写入模型的数据。
  2. 写入一个版本号,用于后续的兼容性检查。
  3. 获取模型的配置信息,并将它们写入文件。如果提供了一些额外的配置参数,如 pre_prompt,user_role,bot_role,history_sep,也将它们添加到配置信息中。
  4. 如果提供了分词器(tokenizer),将分词器的词汇表写入文件。如果分词器是一个句子片段模型(sentence piece model),那么还会写入一些额外的信息。
  5. 获取模型的权重(包含在模型的状态字典中),并将它们写入文件。权重的名字和形状都会被写入文件,以便于后续正确地加载模型。
  6. 在每写入一个权重后,打印进度信息,以便于用户知道当前的进度。
  7. 最后,关闭文件。
# struct 是Python的一个内置模块,提供了一些函数来解析打包的二进制数据。
# 在这个代码中,它被用于将整数和字符串转换为二进制格式。
import struct
import numpy as np

# 定义一个函数 writeString,它接受两个参数:一个文件对象 fo 和一个字符串 s。
def writeString(fo, s):
    # struct.pack 函数将 len(s)(字符串 s 的长度)打包为一个二进制字符串,
    # 然后 fo.write 将这个二进制字符串写入文件。
    fo.write(struct.pack('i', len(s)));
    # s.encode() 将字符串 s 转换为二进制格式,然后 fo.write 将这个二进制字符串写入文件。
    fo.write(s.encode());

# 定义一个函数 writeKeyValue,它接受三个参数:一个文件对象 fo,一个键 key 和一个值 value。
def writeKeyValue(fo, key, value):
    writeString(fo, key);
    writeString(fo, value);

# 这段Python代码的主要作用是将模型的状态字典(state_dict)以及一些模型的配置信息保存到一个文件中。
# 定义了一个函数 tofile,它接受七个参数:一
### TensorRT-LLM 部署指南 TensorRT-LLM 是一种高效的工具,用于加速大型语言模型LLMs)在 NVIDIA GPU 上的推理性能。以下是关于其部署的具体说明: #### 1. 安装与环境准备 为了成功部署 TensorRT-LLM,需先完成必要的安装和配置工作。这包括以下几个方面: - **安装 TensorRT-LLM**:通过官方文档或项目地址获取最新版本并进行安装[^2]。 - **启动容器**:推荐使用 Docker 或 Singularity 创建隔离的运行环境,以便管理依赖项。 - **Python 依赖**:确保已安装所有必需的 Python 库,这些库通常可以通过 `requirements.txt` 文件指定。 ```bash pip install -r requirements.txt ``` #### 2. 转化模型格式 由于 TensorRT-LLM 使用特定优化后的张量表示形式来存储权重数据,因此需要将原始模型文件转换为目标格式。此过程可能涉及以下操作: - 加载预训练模型参数; - 将其序列化为兼容 TensorRT 的二进制结构。 具体实现可以参考如下代码片段: ```python from tensorrt_llm import Model, BuilderConfig model_path = "/path/to/pretrained/model" output_engine_file = "./converted_model.engine" builder_config = BuilderConfig() llm_instance = Model.from_pretrained(model_path) with open(output_engine_file, 'wb') as f: engine_data = llm_instance.build(builder_config) f.write(engine_data.serialize()) ``` 上述脚本展示了如何加载一个预先存在的 LLM 并将其编译成适合 TensorRT 执行引擎使用的 `.engine` 文件[^1]。 #### 3. 运行与部署 一旦完成了前两步,则可着手于实际应用阶段——即让构建好的 TRT Engine 开始处理输入请求。这里有两种主要方式可供选择: - 利用内置的 Python 接口直接调用; - 构建独立的服务端程序并通过 RESTful API 提供外部访问接口。 对于前者而言,只需简单实例化 Runtime 类即可;而对于后者来说,则还需要额外考虑诸如负载均衡、错误恢复机制等问题。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值