LLaMA-Factory微调Qwen3模型完了,怎么直接用vllm推理模型?

环境:

LLaMA-Factory

vllm0.8.5

Qwen3-8b

问题描述:

LLaMA-Factory微调Qwen3模型完了,怎么直接用vllm推理模型?
在这里插入图片描述

解决方案:

一、合并 LoRA 权重与基础模型
vLLM 需要完整的模型文件(含合并后的权重),而非单独的 LoRA 适配器。需先合并权重:

  1. 修改LLaMA-Factory合并配置文件

训练配置文件

### model
model_name_or_path: /mnt/program/LLaMA-Factory/LLaMA-Factory/Qwen/Qwen3-8B
trust_remote_code: true

### method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 16
lora_target: all

### dataset
dataset: sjj_train
template: qwen
cutoff_len: 2048
max_samples: 8000
overwrite_cache: true
preprocessing_num_workers: 16
dataloader_num_workers: 8

### output
output_dir: saves/Qwen3-8b/lora/sft
logging_steps: 1000
save_steps: 5000
plot_loss: true
overwrite_output_dir: true
save_only_model: false
report_to: none  # choices: [none, wandb, tensorboard, swanlab, mlflow]

### train
per_device_train_batch_size: 8
gradient_accumulation_steps: 8
learning_rate: 2.0e-4
num_train_epochs: 2.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true
ddp_timeout: 180000000
resume_from_checkpoint: null

### eval
#val_size: 0.2
#per_device_eval_batch_size: 2
#eval_strategy: steps
#eval_steps: 5

合并配置文件内容

目录文件merge_lora/qwen3-8b_lora_sft.yaml

### Note: DO NOT use quantized model or quantization_bit when merging lora adapters

### model
model_name_or_path: /mnt/program/LLaMA-Factory/LLaMA-Factory/Qwen/Qwen3-8B
adapter_name_or_path: saves/qwen3-8b/lora/sft/checkpoint-186
template: qwen
trust_remote_code: true

### export
export_dir: output/Qwen3_8b_lora_sft
export_size: 5
export_device: gpu:1
export_legacy_format: false
  1. 执行合并命令
CUDA_VISIBLE_DEVICES=1 llamafactory-cli export examples/merge_lora/qwen3-8b_lora_sft.yaml

查看合并后的文件夹,包含 model.safetensors 和配置文件

ubuntu@VM-0-2-ubuntu:~$ ls /mnt/program/LLaMA-Factory/LLaMA-Factory/output/Qwen3_8b_lora_sft
added_tokens.json  generation_config.json  model-00001-of-00004.safetensors  model-00003-of-00004.safetensors  Modelfile                     special_tokens_map.json  tokenizer.json
config.json        merges.txt              model-00002-of-00004.safetensors  model-00004-of-00004.safetensors  model.safetensors.index.json  tokenizer_config.json    vocab.json

二、配置 vLLM 推理服务

使用合并后的完整模型启动 vLLM 服务:

  1. 安装 vLLM 依赖
    确保已安装 vLLM 支持包:

    pip install -e '.[vllm]'  # 在 LLaMA-Factory 项目目录下执行
    
  2. 启动 vLLM API 服务

    通过命令行部署兼容 OpenAI 的 API:

CUDA_VISIBLE_DEVICES=0,1 nohup sh -c "VLLM_USE_MODELSCOPE=true VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve /mnt/program/LLaMA-Factory/LLaMA-Factory/output/Qwen3_8b_lora_sft --host 0.0.0.0 --port 8700 --gpu-memory-utilization 0.8 --max-num-seqs 200 --served-model-name Qwen3-8b --tensor-parallel-size 2 --enable-auto-tool-choice --tool-call-parser hermes --rope-scaling '{\"rope_type\":\"yarn\",\"factor\":4.0,\"original_max_position_embeddings\":32768}' --max-model-len 24096" > vllm.log 2>&1 &

``

关键参数说明:

  • --tensor-parallel-size:多卡推理时需匹配 GPU 数量。
  • --gpu-memory-utilization:建议设为 0.9 避免 OOM。

三、验证服务可用性

通过 curl 或 Python 测试 API:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8700/v1", api_key="sk-xxx")

response = client.chat.completions.create(
    model="你的模型名称",  # 与 --served-model-name 一致
    messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)

⚠️ 常见问题与优化

  1. 显存不足
    • 降低 --tensor-parallel-size(如单卡设为 1)。

    • 减小 --max-model-len 或启用 --quantization(如 awq)。

  2. 多卡部署
    通过 CUDA_VISIBLE_DEVICES 指定 GPU:

    CUDA_VISIBLE_DEVICES=0,1,2,3 vllm serve --tensor-parallel-size 4 ...
    
  3. 性能优化
    • 使用 --enforce-eager 模式避免内核编译错误(牺牲部分速度)。

    • 监控 GPU 利用率调整 --batch-size

合并后的模型可直接被 vLLM 加载,无需额外转换。若需进一步量化(如 GPTQ),可在合并时配置 export_quantization_bit 参数,但需注意量化可能影响精度。

### 显存不足解决方案 当微调 Qwen 2.5VL 模型时遇到显存不足的问题,可以尝试以下方法来优化资源利用: #### 减少批量大小 降低 `batch_size` 参数可以帮助减少 GPU 的内存占用。通过调整配置文件中的参数设置,例如在 YAML 文件中指定较小的批次尺寸[^1]。 #### 使用梯度累积 如果单次前向传播所需的样本数量较大而无法一次性加载到显卡上,则可以通过启用 **gradient accumulation** 技术,在多次迭代后再更新权重从而模拟更大的有效批处理规模而不增加即时需求量 [^3] 。此功能通常可以在训练脚本或者超参定义部分找到对应选项开启并设定步数。 #### 启用混合精度训练 (Mixed Precision Training) 采用 FP16 或 BF16 数据类型代替默认全浮点运算能够显著节省一半以上的存储空间消耗同时维持相近甚至更优性能表现 ^{[2]} 。这需要确认所使用的框架支持此类特性,并且正确地修改相关代码片段以激活该模式;对于 PyTorch 用户来说可能涉及引入 torch.cuda.amp 自动混精机制等功能模块。 #### 分布式数据平行化(Distributed Data Parallelism, DDP) 为了进一步缓解单一设备上的压力,考虑将整个计算任务拆分至多张独立GPU共同完成即所谓的DDP方式。这样每一块参与工作的硬件只需负责一小部分内容因而极大程度降低了各自的负担水平^{[1]}。具体实现方面需按照官方文档指导安装必要依赖库以及相应改造原始程序结构使之适配新的运行环境条件。 ```python import os os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,...' # 设置可见gpu编号列表 from torch.nn.parallel import DistributedDataParallel as DDP ... model = YourModel() if use_cuda: model.to(device) ddp_model = DDP(model) ``` #### 调整序列长度 适当缩短输入文本的最大允许长度也能有效减轻模型推理过程期间产生的临时变量占据过多可用RAM单元的情况发生概率^[3]^。一般而言这是通过对预处理器类实例初始化阶段传入特定数值达成目标效果比如max_seq_len字段值设得更低一点即可满足要求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩人工智能的辣条哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值