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

推理

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/sft

deepspeed: 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。如果数据集已经存在则重复使用,否则则下载。
### LLaMA-Factory 推理使用指南 对于希望利用LLaMA-Factory进行推理开发者而言,理解其基本工作流程至关重要。安装完成后,通过加载预训练模型并提供输入数据来启动推理过程[^1]。 #### 加载预训练模型 为了执行推理任务,需先下载官方支持的一个或多个版本的权重文件,并将其放置于指定目录下。之后,在Python环境中导入必要的库函数: ```python from llama_factory import Model, Tokenizer ``` 创建`Model`实例时传入路径参数指向本地存储的模型权重位置;同样地初始化`Tokenizer`用于处理文本编码解码操作。 #### 执行推理任务 准备好上述组件后即可构建完整的推理管道。下面是一个简单的例子展示如何完成这一目标: ```python model_path = "./path/to/model_weights" tokenizer = Tokenizer() model = Model(model_path) input_text = "你好世界!" inputs = tokenizer.encode(input_text).unsqueeze(0) # 增加批次维度 outputs = model.generate(inputs) generated_text = tokenizer.decode(outputs.squeeze().tolist()) print(generated_text) ``` 此段代码实现了从给定提示(`input_text`)到生成响应(`generated_text`)的过程转换。 ### 故障排除技巧 当遇到运行错误或其他异常情况时,可以尝试以下几种方法来进行排查修复: - **环境配置问题**:确认已按照文档说明正确设置了依赖项以及环境变量。 - **资源不足报错**:如果出现内存溢出等问题,则考虑减少批量大小(batch size),降低GPU显存占用率,或者优化程序逻辑以提高效率。 - **API调用失败**:仔细检查接口参数设置是否合理合法,确保遵循最新版SDK手册中的指导原则。 - **网络连接不稳定**:如果是远程服务器部署方案的话,请测试连通性延迟状况,必要时切换至更稳定的线路服务提供商。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值