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函数用于将一个训练好的模型导出到一个文件中。具体来说,它包括以下几个步骤:
- 打开一个二进制文件,准备写入模型的数据。
- 写入一个版本号,用于后续的兼容性检查。
- 获取模型的配置信息,并将它们写入文件。如果提供了一些额外的配置参数,如 pre_prompt,user_role,bot_role,history_sep,也将它们添加到配置信息中。
- 如果提供了分词器(tokenizer),将分词器的词汇表写入文件。如果分词器是一个句子片段模型(sentence piece model),那么还会写入一些额外的信息。
- 获取模型的权重(包含在模型的状态字典中),并将它们写入文件。权重的名字和形状都会被写入文件,以便于后续正确地加载模型。
- 在每写入一个权重后,打印进度信息,以便于用户知道当前的进度。
- 最后,关闭文件。
# 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,它接受七个参数:一

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





