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

发布于:2024-09-19 ⋅ 阅读:(8) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到