大模型开发和微调工具Llama-Factory-->推理与评估

news/2024/12/4 14:39:40/

推理

LLaMA-Factory 支持多种推理方式。

您可以使用 llamafactory-cli chat inference_config.yamlllamafactory-cli webchat inference_config.yaml 进行推理与模型对话。

对话时配置文件只需指定原始模型 model_name_or_pathtemplate ,并根据是否是微调模型指定 adapter_name_or_pathfinetuning_type

如果您希望向模型输入大量数据集并记录推理输出,您可以使用 llamafactory-cli train inference_config.yaml 使用数据集或 llamafactory-cli api 使用 api 进行批量推理。

Note:
使用任何方式推理时,模型 model_name_or_path 需要存在且与 template 相对应。

1.原始模型推理配置

对于原始模型推理, inference_config.yaml 中 只需指定原始模型 model_name_or_pathtemplate 即可。

### examples/inference/llama3.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3

2.微调模型推理配置

对于微调模型推理,除原始模型和模板外,还需要指定适配器路径 adapter_name_or_path 和微调类型 finetuning_type

### examples/inference/llama3_lora_sft.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora

3.多模态模型

对于多模态模型,如下

llamafactory-cli webchat examples/inferece/llava1_5.yaml

examples/inference/llava1_5.yaml 的配置示例如下:

model_name_or_path: llava-hf/llava-1.5-7b-hf
template: vicuna
visual_inputs: true

4.vllm 推理框架

若使用vllm推理框架,请在配置中指定: infer_backendvllm_enforce_eager

### examples/inference/llama3_vllm.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: vllm
vllm_enforce_eager: true

5.批量推理

1.数据集

使用数据集批量推理时,您需要指定模型、适配器(可选)、评估数据集、输出路径等信息并且指定 do_predicttrue

下面提供一个 示例,您可以通过 llamafactory-cli train examples/train_lora/llama3_lora_predict.yaml 使用数据集进行批量推理。

如果您需要多卡推理,则需要在配置文件中指定 deepspeed 参数。

# examples/train_lora/llama3_lora_predict.yaml
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sftdeepspeed: examples/deepspeed/ds_z3_config.yaml # deepspeed配置文件### method
stage: sft
do_predict: true
finetuning_type: lora### dataset
eval_dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 1024
max_samples: 50
overwrite_cache: true
preprocessing_num_workers: 16### output
output_dir: saves/llama3-8b/lora/predict
overwrite_output_dir: true### eval
per_device_eval_batch_size: 1
predict_with_generate: true
ddp_timeout: 180000000

只有 stagesft 的时候才可设置 predict_with_generatetrue

2.api

如果您需要使用 api 进行批量推理,您只需指定模型、适配器(可选)、模板、微调方式等信息。

下面是一个配置文件的示例:

# examples/inference/llama3_lora_sft.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora

下面是一个启动并调用 api 服务的示例:

您可以使用 API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml 启动 api 服务并运行以下示例程序进行调用:

# api_call_example.py
from openai import OpenAI
client = OpenAI(api_key="0",base_url="http://0.0.0.0:8000/v1")
messages = [{"role": "user", "content": "Who are you?"}]
result = client.chat.completions.create(messages=messages, model="meta-llama/Meta-Llama-3-8B-Instruct")
print(result.choices[0].message)

评估

在完成模型训练后,您可以通过 llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml 来评估模型效果。

配置示例文件 examples/train_lora/llama3_lora_eval.yaml 具体如下:

### examples/train_lora/llama3_lora_eval.yaml
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft # 可选项### method
finetuning_type: lora### dataset
task: mmlu_test
template: fewshot
lang: en
n_shot: 5### output
save_dir: saves/llama3-8b/lora/eval### eval
batch_size: 4

在 批量推理 的过程中,模型的 BLEU 和 ROUGE 分数会被自动计算并保存,您也可以通过此方法评估模型。

下面是相关参数的介绍:

参数名称类型介绍
taskstr评估任务的名称,可选项有 mmlu_test, ceval_validation, cmmlu_test
task_dirstr包含评估数据集的文件夹路径,默认值为 evaluation
batch_sizeint每个GPU使用的批量大小,默认值为 4
seedint用于数据加载器的随机种子,默认值为 42
langstr评估使用的语言,可选值为 enzh。默认值为 en
n_shotintfew-shot 的示例数量,默认值为 5
save_dirstr保存评估结果的路径,默认值为 None。 如果该路径已经存在则会抛出错误。
download_modestr评估数据集的下载模式,默认值为 DownloadMode.REUSE_DATASET_IF_EXISTS。如果数据集已经存在则重复使用,否则则下载。

http://www.ppmy.cn/news/1552296.html

相关文章

卷积神经网络(CNN)的层次结构

卷积神经网络(CNN)是一种以其处理图像和视频数据的能力而闻名的深度学习模型,其基本结构通常包括以下几个层次,每个层次都有其特定的功能和作用: 1. 输入层(Input Layer): 卷积神经网…

BGP基础

EGP:早期的外部网关协议,用于在自治系统间动态交换路由信息,但设计简单,无法避免环路问题 BGP:取代EGP的另外一种外部网关协议,能够进行路由优选,避免路由环路,提供更高效的路由传递…

李宏毅深度学习-Pytorch Tutorial2作业

一、任务描述 什么是张量? 张量(Tensor)是深度学习和机器学习中一个非常基础且重要的概念。在数学上,张量可以被看作是向量和矩阵的泛化。简单来说,张量是一种多维数组,它可以表示标量(0维&am…

Linux系统:网络

目录 一、网络协议 1.网络协议概念 2.协议分层 3.OSI七层模型和TCP/IP五层(或四层)模型 4.为什么要有网络协议? 5.网络通信协议的原理 二、网络传输的基本流程 1.局域网的网络传输流程 1.MAC地址 2.局域网通信原理(以太网…

远程桌面协助控制软件 RustDesk v1.3.3 多语言中文版

RustDesk 是一款开源的远程桌面软件,支持多平台操作,包括Windows、macOS、Linux、iOS、Android和Web。它提供端到端加密和基于角色的访问控制,确保安全性和隐私保护。使用简单,无需复杂配置,通过输入ID和密码即可快速连…

无线网络设备驱动开发

文章目录 一、总线设备驱动层二、网络设备驱动层1. 网络接口层2. 设备接口层3. 设备驱动功能层4. 网络设备和媒介层 无线网卡驱动可以借助PCI,SDIO,UART,USB来用于总线通讯。MAC层可以用软件来实现,也可以用硬件来实现。一般有mac…

每次执行 git pull 时都需要输入账号和密码

每次执行 git pull 时都需要输入账号和密码,可能是因为你的 Git 仓库使用的是 HTTPS 协议进行连接,而 HTTPS 协议默认需要每次请求时都进行身份验证。为了提高 convenience 和安全性,你可以采取以下几种方法来避免每次都输入账号和密码&#…

在Scala中Array不可变的学习

package gjhs114import scala.collection.mutable.ArrayBuffer object Arrray114 {// 不可变数组:Array// def main(args: Array[String]): Unit {1 创建不可变数组// val arr1 Array(1,2,3)//2 访问.数组名(下标)。下标是从0开始到…