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

相关推荐
封步宇AIGC22 分钟前
量化交易系统开发-实时行情自动化交易-4.2.1.简单移动平均线实现
人工智能·python·机器学习·数据挖掘
封步宇AIGC28 分钟前
量化交易系统开发-实时行情自动化交易-4.1.4.A股布林带(BOLL)实现
人工智能·python·机器学习·数据挖掘
HengCeResearch8830 分钟前
中国【食品检测实验室自动化】程度相对欧美等发达国家相对落后,并且技术层面存在明显的代差,未来有比较大的发展空间
人工智能·百度·自动化
飞起来fly呀1 小时前
AI驱动电商新未来:提升销售效率与用户体验的创新实践
人工智能·ai
李歘歘1 小时前
Stable Diffusion经典应用场景
人工智能·深度学习·计算机视觉
饭碗、碗碗香1 小时前
OpenCV笔记:图像去噪对比
人工智能·笔记·opencv·计算机视觉
段传涛1 小时前
AI Prompt Engineering
人工智能·深度学习·prompt
西电研梦1 小时前
考研倒计时30天丨和西电一起向前!再向前!
人工智能·考研·1024程序员节·西电·西安电子科技大学
催催122 小时前
手机领夹麦克风哪个牌子好,哪种领夹麦性价比高,热门麦克风推荐
网络·人工智能·经验分享·其他·智能手机
孤华暗香2 小时前
吴恩达《提示词工程》(Prompt Engineering for Developers)课程详细笔记
人工智能·笔记·prompt