使用PaddleNLP调用大模型ChatGLM3-6b进行信息抽取

ChatGLM一直是非常不错的语言大模型,这次使用ChatGLM3-6b模型进行信息抽取工作

安装PaddleNLP并shell执行推理

直接使用星河社区的AI环境,因为星河社区可以直接创建Paddle3.0的调试环境,可以简化飞桨PaddlePaddle的安装过程,避免很多坑。

然后安装PaddleNLP,先下载源代码并设置环境变量PYTHONPATH:

复制代码
git clone https://github.com/PaddlePaddle/PaddleNLP.git
export PYTHONPATH=/home/aistudio/PaddleNLP:$PYTHONPATH

PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,使用之前需要预先安装自定义算子库:

复制代码
#GPU设备安装自定义算子
cd PaddleNLP/csrc && python setup_cuda.py install

到达运行目录,即可开始:

复制代码
cd PaddleNLP/llm

比如gpu的推理:

复制代码
# 动态图模型推理命令参考
python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn

但是这需要float16位支持,V100不支持,所以没有做实验了。

可以使用api的方式来使用大模型

API方式使用llm大模型推理

首先安装PaddleNLP

复制代码
pip install --upgrade paddlenlp==3.0.0b1

然后就可以使用API来调用大模型了:

复制代码
from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b")
model = AutoModelForCausalLM.from_pretrained("THUDM/chatglm3-6b", dtype="float16")
input_features = tokenizer("你好!请自我介绍一下。", return_tensors="pd")
outputs = model.generate(**input_features, max_length=128)
print(tokenizer.batch_decode(outputs[0], skip_special_tokens=True))
['我是一个AI语言模型,我可以回答各种问题,包括但不限于:天气、新闻、历史、文化、科学、教育、娱乐等。请问您有什么需要了解的吗?']

PaddleNLP会自动下载模型和token文件,比如我们的问题是:

你好!请提供下面食谱的主要原料,并提供它们的营养成分表:

\n材料:\n- 2个鸡蛋\n- 1/2杯番茄\n- 1/4杯切碎的葱花\n- 1/4杯切碎的姜末\n- 1/4杯切碎的蒜末\n- 1/4杯切碎的盐\n- 1/4杯切碎的黑胡椒粉\n- 1/4杯切碎的香菜\n- 适量的油\n步骤:\n1. 将鸡蛋打散,加入适量的盐和黑胡椒粉搅拌均匀。\n2. 热锅凉油,将葱花、姜末、蒜末和盐、黑胡椒粉混合均匀,加入鸡蛋液中,用铲子快速搅拌均匀。\n3. 加入切碎的番茄,继续搅拌均匀。\n4. 加入适量的水,煮沸后转小火煮10分钟,直到鸡蛋液变稠。\n5. 加入香菜,翻炒均匀即可。

复制代码
prompt = """
你好!请提供下面食谱的主要原料,并提供它们的营养成分表:
\n材料:\n- 2个鸡蛋\n- 1/2杯番茄\n- 1/4杯切碎的葱花\n- 1/4杯切碎的姜末\n- 1/4杯切碎的蒜末\n- 1/4杯切碎的盐\n- 1/4杯切碎的黑胡椒粉\n- 1/4杯切碎的香菜\n- 适量的油\n步骤:\n1. 将鸡蛋打散,加入适量的盐和黑胡椒粉搅拌均匀。\n2. 热锅凉油,将葱花、姜末、蒜末和盐、黑胡椒粉混合均匀,加入鸡蛋液中,用铲子快速搅拌均匀。\n3. 加入切碎的番茄,继续搅拌均匀。\n4. 加入适量的水,煮沸后转小火煮10分钟,直到鸡蛋液变稠。\n5. 加入香菜,翻炒均匀即可。
"""

input_features = tokenizer(prompt, return_tensors="pd")
outputs = model.generate(**input_features, max_length=128)
print(tokenizer.batch_decode(outputs[0], skip_special_tokens=True))

输出显示:

复制代码
['\n主要原料:鸡蛋、番茄、葱花、姜末、蒜末、盐、黑胡椒粉、香菜。\n\n营养成分表(每100克):\n\n能量:125千卡\n蛋白质:6.3克\n脂肪:11克\n碳水化合物:2.2克\n纤维素:0.4克\n维生素A:167国际单位\n维生素C:28毫克\n钙:18毫克\n铁:0.8毫克\n钾:75毫克\n钠:625毫克\n水分:86克 您好!这是一道美味的番茄炒蛋']

可以看到,输出了番茄炒蛋的主要原料,并输出了该菜的营养成分表。

总结:

飞桨的PaddleNLP大模型还是非常不错的,LLama、ChatGLM3等大模型都支持的不错,推理效果也不错,值得我们学习和使用。

V100不通shell推理算遗留问题。

现在的问题是能否用更小的模型来抽取信息,因为用7b或6b模型来抽取还是有些慢。这个有待后续解决。

调试

GPU设备安装自定义算子时报错

复制代码
FLOAT162_CONVERSIONS__ -Igpu/cutlass_kernels -Ithird_party/cutlass/include -Ithird_party/nlohmann_json/single_include -Igpu/fp8_gemm_with_
/home/aistudio/PaddleNLP/csrc/gpu/quant_int8.cu(68): error: no suitable user-defined conversion from "__nv_bfloat16" to "__half" exists

1 error detected in the compilation of "/home/aistudio/PaddleNLP/csrc/gpu/quant_int8.cu".
error: command '/usr/local/cuda/bin/nvcc' failed with exit code 1

看到issue:[Bug]: 安装paddle_ops算子时出现报错 · Issue #8910 · PaddlePaddle/PaddleNLP · GitHub

当前算子仅支持在支持bf16环境上编译安装,当前星河社区可使用A100 40G进行安装,V100环境暂无法安装

所以没有安装paddle_ops算子,只好不用shell,用api模式。

相关推荐
新缸中之脑1 分钟前
将CodeBERTa压缩到10KB以下
人工智能
Faker66363aaa2 分钟前
鲶鱼目标检测与识别:基于fovea_r50_fpn_gn-head-align模型的COCO数据集训练_1
人工智能·目标检测·计算机视觉
【赫兹威客】浩哥4 分钟前
交通违章识别数据集与YOLO系列模型训练成果
人工智能·深度学习·机器学习
B站计算机毕业设计超人4 分钟前
计算机毕业设计hadoop+spark+hive在线教育可视化 课程推荐系统 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·人工智能·hive·hadoop·scrapy·spark·课程设计
B站计算机毕业设计超人5 分钟前
计算机毕业设计PySpark+Hive+Django小红书评论情感分析 小红书笔记可视化 小红书舆情分析预测系统 大数据毕业设计(源码+LW+PPT+讲解)
大数据·人工智能·hive·爬虫·python·spark·课程设计
roamingcode8 分钟前
我是如何 Vibe Coding,将 AI CLI 工具从 Node.js 迁移到 Rust 并成功发布的
人工智能·rust·node.js·github·claude·github copilot
下午写HelloWorld11 分钟前
生成对抗网络GAN的简要理解
人工智能·神经网络·生成对抗网络
Lethehong15 分钟前
探索高效工作流的秘密:GLM-4.7 与 Dify 平台深度集成实践
大数据·人工智能·算法
Yeats_Liao16 分钟前
微调决策树:何时使用Prompt Engineering,何时选择Fine-tuning?
前端·人工智能·深度学习·算法·决策树·机器学习·prompt
传说故事17 分钟前
【论文自动阅读】GREAT MARCH 100:100项细节导向任务用于评估具身AI agent
人工智能·具身智能