Skip to content

inference_with_transformers_zh

Ziqing Yang edited this page Aug 3, 2023 · 14 revisions

使用transformers进行推理

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

下面以加载Chinese-LLaMA-2-7B/Chinese-Alpaca-2-7B模型为例说明启动方式。

命令行交互形式

使用完整版模型

如果你下载的是完整版权重,或者之前已执行了merge_llama2_with_chinese_lora_low_mem.py脚本将LoRA权重与原版Llama-2合并,可直接加载完整版模型(请勿指定--lora_model)。

python scripts/inference/inference_hf.py \
    --base_model path_to_merged_llama2_or_alpaca2_hf_dir \
    --with_prompt \
    --interactive

使用LoRA模型

如果你不想合并模型,也不想下载完整版模型,请通过加载原版Llama-2-hf和我们的LoRA模型进行推理。

python scripts/inference/inference_hf.py \
    --base_model path_to_original_llama_2_hf_dir \
    --lora_model path_to_chinese_llama2_or_alpaca2_lora \
    --with_prompt \
    --interactive

使用vLLM进行推理加速

可以使用vLLM作为LLM后端进行推理,需要额外安装vLLM库。

pip install vllm

目前vLLM不支持加载LoRA模型(--lora_model),仅支持使用8bit推理(--load_in_8bit)或者纯CPU部署(--only_cpu)。

python scripts/inference/inference_hf.py \
    --base_model path_to_merged_llama2_or_alpaca2_hf_dir \
    --with_prompt \
    --interactive \
    --use_vllm

参数说明

  • --base_model {base_model} :存放HF格式的LLaMA-2模型权重和配置文件的目录
  • --lora_model {lora_model} :中文LLaMA-2/Alpaca-2 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
  • --only_cpu:仅使用CPU进行推理
  • --gpus {gpu_ids}:指定使用的GPU设备编号,默认为0。如使用多张GPU,以逗号分隔,如0,1,2
  • --alpha {alpha}:使用NTK方法拓展上下文长度的系数,可以提升可处理的输入长度。默认为1。如果不知道怎么设置,可以保持默认值,或设为"auto"
  • --load_in_8bit--load_in_4bit:使用8bit或4bit方式加载模型,降低显存占用
  • --system_prompt {system_prompt}:指定system prompt,默认为alpaca-2.txt中的内容。
  • --use_vllm:使用vLLM作为LLM后端进行推理

Web图形界面交互形式

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

pip install gradio
pip install mdtex2html

使用完整版模型

如果你下载的是完整版权重,或者之前已执行了merge_llama2_with_chinese_lora_low_mem.py脚本将LoRA权重与原版Llama-2合并,可直接加载完整版模型(请勿指定--lora_model)。

python scripts/inference/gradio_demo.py --base_model path_to_merged_alpaca2_hf_dir 

使用LoRA加载模型

如果你不想合并模型,也不想下载完整版模型,请通过加载原版Llama-2-hf和我们的LoRA模型进行推理。

python scripts/inference/gradio_demo.py \
	--base_model path_to_original_llama_2_hf_dir \
	--lora_model path_to_chinese_alpaca2_lora

如果之前已执行了merge_llama2_with_chinese_lora_low_mem.py脚本将LoRA权重合并,那么无需再指定--lora_model

使用vLLM加速推理

可以使用vLLM作为LLM后端进行推理,需要额外安装vLLM库(安装过程8-10分钟)。

pip install vllm

目前vLLM不支持加载LoRA模型(--lora_model),仅支持使用8bit推理(--load_in_8bit)或者纯CPU部署(--only_cpu)。

python scripts/inference/gradio_demo.py --base_model path_to_merged_alpaca2_hf_dir --use_vllm

参数说明

  • --base_model {base_model} :存放HF格式的LLaMA-2模型权重和配置文件的目录
  • --lora_model {lora_model} :中文Alpaca-2 LoRA解压后文件所在目录,也可使用🤗Model Hub模型调用名称。若不提供此参数,则只加载--base_model指定的模型
  • --tokenizer_path {tokenizer_path}:存放对应tokenizer的目录。若不提供此参数,则其默认值与--lora_model相同;若也未提供--lora_model参数,则其默认值与--base_model相同
  • --only_cpu: 仅使用CPU进行推理
  • --gpus {gpu_ids}: 指定使用的GPU设备编号,默认为0。如使用多张GPU,以逗号分隔,如0,1,2
  • --alpha {alpha}:使用NTK方法拓展上下文长度的系数,可以提升有效上下文长度。默认为1。如果不知道怎么设置,可以保持默认值,或设为"auto"。关于取值对性能的影响可参考#23
  • --load_in_8bit--load_in_4bit:使用8bit或4bit方式加载模型
  • --max_memory:多轮对话历史中存储的最大序列长度(以token计),默认1024
  • --use_vllm:使用vLLM作为LLM后端进行推理

注意事项

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