使用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模式。

相关推荐
元让_vincent4 分钟前
论文Review 激光动态物体剔除 Dynablox | RAL2023 ETH MIT出品!
人工智能·计算机视觉·目标跟踪·机器人·自动驾驶·点云·动态物体剔除
青禾智源12 分钟前
从零看懂 AR 智能眼镜:未来 10 年技术演进与新手入门指南
人工智能
CodeDevMaster12 分钟前
Gemini CLI使用教程:在命令行中释放AI的力量
llm·ai编程·gemini
POLOAPI12 分钟前
一张照片秒变3D模型!微软Copilot 3D正在颠覆三维创作的游戏规则
人工智能·github copilot
热爱生活的五柒16 分钟前
深度学习日志及可视化过程
人工智能·深度学习
心一信息22 分钟前
修复图像、视频和3D场景的AI工具–Inpaint Anything
人工智能·3d
数字诗人22 分钟前
Trae+supabase:四小时打造一个拥有前后端完整功能的社区论坛系统
人工智能
用户51914958484522 分钟前
jank实现C++无缝互操作的技术探索
人工智能·aigc
大志说编程24 分钟前
LangChain框架入门13:从0到1学习Weaviate向量数据库
人工智能·langchain
top_designer24 分钟前
游戏美术总监级工作流:Firefly AI赋能概念设计,从2D到3D重塑开发管线!
人工智能·游戏·3d·游戏开发·设计师·游戏美术·概念设计