chatglm微调

我要开发同款
匿名用户2024年07月31日
29阅读
所属分类ai、chatglm、pytorch
开源地址https://modelscope.cn/models/wyj123456/chatglm_etuing
授权协议other

作品详情

中文 | English

基于TencentPretrain的LLaMa推理

本项目主要支持基于TencentPretrain的LLaMa模型量化推理以及简单的微服务部署。也可以扩展至其他模型,持续更新中。


特性

  • Int8推理 支持bitsandbytes库的int8推理,相比tencentpretrain中的LM推理脚本,加入了Batch推理。
  • 优化推理逻辑 在Multi-head Attention中加入了key和value的cache,每次inference只需要输入新生成的token。
  • 大模型多卡推理 支持张量并行的多卡推理。
  • 微服务部署 支持简单的flask部署以及gradio在线可视化部署。
  • LoRA模型推理 施工中,计划支持使用LoRA训练的模型。

tips:当前脚本只支持cuda推理,未来计划更多的量化部署推理的功能,敬请期待。


依赖环境

  • Python >= 3.7
  • torch >= 1.9
  • bitsandbytes
  • argparse


输入参数参考

  • --loadmodelpath (必填项),预训练好的模型,默认是fp16的(如果需要fp32,修改llama_infer.py的L41为对应的精度)
  • --test_path (必填项),输入的prompts,每一行是一个prompts。
  • --prediction_path (必填项),输出结果保存的路径。
  • --config_path (必填项),模型参数配置文件,可以保存在config文件夹中。
  • --spmmodelpath (必填项),模型tokenizer存放的路径。
  • --batch_size (可选),默认为1。批处理大小,注意按需使用,因为attention cache会根据这个大小来构造tensor并且保存在显存中。
  • --seq_length (可选),默认为128。生成句子的总长度,等于prompts + 模型生成的长度。
  • --world_size (可选),默认为1。使用多少张卡进行张量并行推理。
  • --use_int8 (可选),默认为False。是否使用int8推理。
  • --topk (可选),默认为40。句子的生成会针对topk做采样,影响生成多样性。
  • --topp (可选),默认为0.95。句子的生成会针对累积概率topp做采样,影响生成多样性。
  • --temperature (可选),默认为0.8。对最后的probabilities做一次放缩,影响token采样结果。
  • --repetitionpenaltyrange (可选),默认为1024。重复出现token的惩罚范围。
  • --repetitionpenaltyslope (可选),默认为0。重复出现token的惩罚slope。
  • --repetition_penalty (可选),默认为1.15。重复出现token的惩罚系数。


快速开始

FP16/Int8推理

fp16推理:

python llama_infer.py --test_path ./prompts.txt --prediction_path ./result.txt  \
                      --load_model_path xxx.bin \
                      --config_path ./config/llama_7b_config.json \
                      --spm_model_path ./tokenizer.model

如果要使用int8推理的话,加入--use_int8:

python llama_infer.py --test_path ./prompts.txt --prediction_path ./result.txt  \
                      --load_model_path xxx.bin --use_int8 \
                      --config_path ./config/llama_7b_config.json \
                      --spm_model_path ./tokenizer.model


多轮对话

有可选参数keeplengthratio,表示保留多少比例的上下文。输入clear会进行新的一轮对话,输入exit会退出。

python llama_dialogue.py --load_model_path xxxx.bin \
                         --config_path config.json \
                         --spm_model_path tokenizer.model \
                         --world_size 2


gradio部署

需要安装gradio

pip install gradio
python llama_gradio.py --load_model_path xxxx.bin \
                       --config_path config.json \
                       --spm_model_path tokenizer.model

然后在网页上打开:http://127.0.0.1:7860/


微服务部署

需要安装flask

pip install flask
python llama_server.py --load_model_path xxxx.bin \
                       --config_path config.json \
                       --spm_model_path tokenizer.model

查询命令:

curl -H 'Content-Type: application/json' http://127.0.0.1:8888/chat -d '{"question": "xxx"}' 


多卡张量并行推理

需要安装tensorparallel 参数worldsize为希望使用多少gpu(gpu的id从0开始)

pip install tensor_parallel
python llama_infer.py --test_path ./prompts.txt --prediction_path ./result.txt \
                      --load_model_path xxxx.bin \
                      --config_path config.json \
                      --spm_model_path tokenizer.model \
                      --world_size 2

示例代码

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
pipe = pipeline(task=Tasks.text_generation, model='AI-ModelScope/ChatFlow-7B', device_map='auto', model_revision='v1.0.0')
inputs = 'What do you think of OpenAI organization?'
result = pipe(inputs,batch_size=1, world_size=2, seq_length=118, 
            use_int8=False, top_k=30, top_p=1, temperature=0.85, repetition_penalty_range=1024,
            repetition_penalty_slope=0, repetition_penalty=1.15)
print(result) 
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论