https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/%E4%BD%BF%E7%94%A8Transformers%E6%8E%A8%E7%90%86

我们提供了命令行和Web图形界面两种方式使用原生Transformers进行推理。

以加载Chinese-Alpaca-7B模型为例(加载Chinese-Alpaca-Plus的方式见下面的加载Chinese-Alpaca-Plus)说明启动方式。

命令行交互形式

python scripts/inference_hf.py \
--base_model path_to_original_llama_hf_dir \
--lora_model path_to_chinese_llama_or_alpaca_lora \
--with_prompt \
--interactive

如果之前已执行了merge_llama_with_chinese_lora_to_hf.py脚本将lora权重合并,那么无需再指定--lora_model,启动方式更简单:

python scripts/inference_hf.py \
--base_model path_to_merged_llama_or_alpaca_hf_dir \
--with_prompt \
--interactive

参数说明:

  • --base_model {base_model} :存放HF格式的LLaMA模型权重和配置文件的目录。如果之前合并生成的是PyTorch格式模型,请转换为HF格式
  • --lora_model {lora_model} :中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用Model Hub模型调用名称。若不提供此参数,则只加载--base_model指定的模型
  • --tokenizer_path {tokenizer_path}:存放对应tokenizer的目录。若不提供此参数,则其默认值与--lora_model相同;若也未提供--lora_model参数,则其默认值与--base_model相同
  • --with_prompt:是否将输入与prompt模版进行合并。如果加载Alpaca模型,请务必启用此选项!
  • --interactive:以交互方式启动,以便进行多次单轮问答(此处不是llama.cpp中的上下文对话)
  • --data_file {file_name}:非交互方式启动下,按行读取file_name中的的内容进行预测
  • --predictions_file {file_name}:非交互式方式下,将预测的结果以json格式写入file_name
  • --use_cpu: 仅使用CPU进行推理
  • --gpus {gpu_ids}: 指定使用的GPU设备编号,默认为0。如使用多张GPU,以逗号分隔,如0,1,2

Web图形界面交互形式

该方式将启动Web前端页面进行交互,并且支持多轮对话。除transformers之外,需要安装gradio和mdtex2html:

pip install gradio
pip install mdtex2html

启动命令如下:

python scripts/gradio_demo.py \
--base_model path_to_original_llama_hf_dir \
--lora_model path_to_chinese_alpaca_lora

同样,如果已经执行了merge_llama_with_chinese_lora_to_hf.py脚本将lora权重合并,那么无需再指定--lora_model:

python scripts/gradio_demo.py --base_model path_to_merged_alpaca_hf_dir

参数说明:

  • --base_model {base_model} :存放HF格式的LLaMA模型权重和配置文件的目录。如果之前合并生成的是PyTorch格式模型,请转换为HF格式
  • --lora_model {lora_model} :中文Alpaca LoRA解压后文件所在目录,也可使用Model Hub模型调用名称。若不提供此参数,则只加载--base_model指定的模型
  • --tokenizer_path {tokenizer_path}:存放对应tokenizer的目录。若不提供此参数,则其默认值与--lora_model相同;若也未提供--lora_model参数,则其默认值与--base_model相同
  • --use_cpu: 仅使用CPU进行推理
  • --gpus {gpu_ids}: 指定使用的GPU设备编号,默认为0。如使用多张GPU,以逗号分隔,如0,1,2

加载Chinese-Alpaca-Plus

目前两个脚本都不支持直接从LoRA权重加载Chinese-Alpaca-Plus进行推理;如要进行Chinese-Alpaca-Plus进的推理,请先合并模型,流程如下:

  1. 使用merge_llama_with_chinese_lora.py合并lora,生成完整的hf格式模型权重:
python scripts/merge_llama_with_chinese_lora.py \
--base_model path_to_hf_llama \
--lora_model path_to_chinese_llama_plus_lora,path_to_chinese_alpaca_plus_lora \
--output_type huggingface \
--output_dir path_to_merged_chinese_alpaca_plus
  1. 使用inference_hf.py或gradio_demo.py加载合并后的模型进行推理,如:
python scripts/inference_hf.py \
--base_model path_to_merged_chinese_alpaca_plus \
--with_prompt --interactive

注意事项

  • 因不同框架的解码实现细节有差异,该脚本并不能保证复现llama.cpp的解码效果
  • 该脚本仅为方便快速体验用,并未对推理速度做优化
  • 如在CPU上运行7B模型推理,请确保有32GB内存;如在GPU上运行7B模型推理,请确保有20GB显存

[转帖]使用Transformers推理的更多相关文章

  1. 偶尔转帖:AI会议的总结(by南大周志华)

    偶尔转帖:AI会议的总结(by南大周志华) 说明: 纯属个人看法, 仅供参考. tier-1的列得较全, tier-2的不太全, tier-3的很不全. 同分的按字母序排列. 不很严谨地说, tier ...

  2. 美团:WSDM Cup 2019自然语言推理任务获奖解题思路

    WSDM(Web Search and Data Mining,读音为Wisdom)是业界公认的高质量学术会议,注重前沿技术在工业界的落地应用,与SIGIR一起被称为信息检索领域的Top2. 刚刚在墨 ...

  3. Transformers 中使用 TorchScript | 四

    作者|huggingface 编译|VK 来源|Github 注意:这是我们使用TorchScript进行实验的开始,我们仍在探索可变输入大小模型的功能.它是我们关注的焦点,我们将在即将发布的版本中加 ...

  4. Transformers 库常见的用例 | 三

    作者|huggingface 编译|VK 来源|Github 本章介绍使用Transformers库时最常见的用例.可用的模型允许许多不同的配置,并且在用例中具有很强的通用性.这里介绍了最简单的方法, ...

  5. 【推理引擎】从源码看ONNXRuntime的执行流程

    目录 前言 准备工作 构造 InferenceSession 对象 & 初始化 让模型 Run 总结 前言 在上一篇博客中:[推理引擎]ONNXRuntime 的架构设计,主要从文档上对ONN ...

  6. 使用英特尔 Sapphire Rapids 加速 PyTorch Transformers 模型

    大约一年以前,我们 展示 了如何在第三代 英特尔至强可扩展 CPU (即 Ice Lake) 集群上分布式训练 Hugging Face transformers 模型.最近,英特尔发布了代号为 Sa ...

  7. 基于 Hugging Face Datasets 和 Transformers 的图像相似性搜索

    基于 HuggingFace Datasets 和 Transformers 的图像相似性搜索 通过本文,你将学习使用 Transformers 构建图像相似性搜索系统.找出查询图像和潜在候选图像之间 ...

  8. 上篇 | 使用 🤗 Transformers 进行概率时间序列预测

    介绍 时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新.ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下. 概率预测 通常,经 ...

  9. 下篇 | 使用 🤗 Transformers 进行概率时间序列预测

    在<使用 Transformers 进行概率时间序列预测>的第一部分里,我们为大家介绍了传统时间序列预测和基于 Transformers 的方法,也一步步准备好了训练所需的数据集并定义了环 ...

  10. Transformers Pipelines

    pipelines 是使用模型进行推理的一种很好且简单的方法.这些pipelines 是从库中抽象出大部分复杂代码的对象,提供了一个简单的API,专门用于多个任务,包括命名实体识别.屏蔽语言建模.情感 ...

随机推荐

  1. C# 将XML转为Word(附VB.NET代码)

    本文介绍如何通过C#程序代码方法将XML文件转换为Word文档,包括转为.doc /.docx等格式.并附VB.NET代码,有需要可供参考. 程序中所需必要程序集如下图: ★  程序集获取:官方地址: ...

  2. 据说有人面试栽在了Thread类的stop()方法和interrupt()方法上

    摘要:今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别. 本文分享自华为云社区<[高并发]又一个朋友面试栽在了Thread类的stop()方法和inter ...

  3. 硬核化解ISV四大痛点,华为云智联生活行业加速器助力伙伴实现商业成功

    摘要:场景化展现合作伙伴.客户的案例,以期针对性的解决行业痛点,帮助伙伴共筑全场景智联生活. 本文分享自华为云社区<硬核化解ISV四大痛点,华为云智联生活行业加速器助力伙伴实现商业成功>, ...

  4. 如何在跨平台的环境中创建可以跨平台的后台服务,它就是 Worker Service。

    一.简介 最近,有一个项目要使用 Windows 服务,来做为一个软件项目的载体.我想了想,都已经到了跨平台的时代了,会不会有替换 Windows 服务的技术出现呢?于是,在网络上疯狂的搜索了一番,真 ...

  5. 错误: -source 1.7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    Modules 把 Language level 调成 8

  6. MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例

    LLM发展历史 - 2013年word2vec提出,但效果不好 - 2017年Transformer结构提出,降低网络复杂度 - 2018年BERT预训练语言模型效果显著提升 - 2019年GPT-3 ...

  7. WPF 水印装饰器

    使用AdornerDecorator装饰器实现WPF水印 水印装饰器WatermarkAdorner类代码: using System; using System.Collections.Generi ...

  8. Java ElasticSearch 操作

    pom 文件中添加: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId ...

  9. Redis系列:使用 Redis Module 扩展功能

    ★ Redis24篇集合 1 啥是Redis Module Redis Module是Redis的一种扩展模块,从 4.0版本开始,允许用户自定义扩展模块,在Redis内部实现新的数据类型和功能,使用 ...

  10. Codeforce:208A. Dubstep (字符串处理,正则表达式)

    Vasya works as a DJ in the best Berland nightclub, and he often uses dubstep music in his performanc ...