llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理

news2024/11/16 16:29:51

文章目录

    • 文章列表:
    • 背景
    • 简介
    • llama-factory vllm API 部署
      • 融合 lora 模型权重 vllm API 部署
      • HuggingFace API 部署推理
      • API 部署总结
    • vllm 不使用 API 部署,直接推理
      • 数据集 tenplate
      • vllm 代码部署

文章列表:

  1. llama-factory SFT系列教程 (一),大模型 API 部署与使用
  2. llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署
  3. llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战
  4. llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理

背景

llama-factory 提供了 vllm API 部署,但笔者在测试时,发现部署的 vllm API 没有直接用vllm推理的速度快。

简介

首先使用 llama-factory 微调,得到微调后的 lora 权重;由于 vllm 并没有支持所有的模型;
故通用的方式是 将 lora 权重和大模型融合成新的大模型,再由 vllm 推理;

在使用 alpaca 样式的数据集微调时,llama-factory 框架在训练时,会自动在prompt 添加 template 。
所以,在微调大模型后,使用vllm推理时,也要给 vllm 传入 封装好的template 。

llama-factory vllm API 部署

融合 lora 模型权重 vllm API 部署

#!/bin/bash
# DO NOT use quantized model or quantization_bit when merging lora weights

CUDA_VISIBLE_DEVICES=0 python ../../src/export_model.py \
    --model_name_or_path ZhipuAI/chatglm3-6b \
    --adapter_name_or_path output \
    --template chatglm3 \
    --finetuning_type lora \
    --export_dir new_model \
    --export_size 2 \
    --export_legacy_format False
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python ../../src/api_demo.py \
    --model_name_or_path new_model \
    --template chatglm3 \
    --finetuning_type lora \
    --infer_backend vllm

首先要融合 lora 权重变成新的大模型保存到 new_model 文件夹下,vllm 推理时显存占用达到了20G 左右;

HuggingFace API 部署推理

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python ../../src/api_demo.py \
    --model_name_or_path ZhipuAI/chatglm3-6b \
    --adapter_name_or_path output/output_train/checkpoint-2250 \
    --template chatglm3 \
    --finetuning_type lora

如果不使用 vllm 推理,使用huggingface部署,显存占用只有 13G。

API 部署总结

笔者在测试时,发现使用 vllm API 部署 和 HuggingFace API 部署的推理速度都差不多,大概每秒处理 3.15 条数据;

vllm 不使用 API 部署,直接推理

如果上述 llama-factory API 部署,已经能够满足你的需求,无需继续往下阅读;
因为笔者有大量的文本需要大模型进行处理,故期望大模型能推理的更快一点;

笔者使用 vllm 直接推理的速度可以达到 每秒处理 15.96 条,相比之前 API 部署快了 5 倍,推理时间可以大幅缩短;

如下所示:推理40万条数据,耗时6小时57分钟。

Processed prompts: 100%|███████████████████████████████| 399997/399997 
[6:57:49<00:00, 15.96it/s]

llama-factory 只提供了 API 形式的 vllm 推理,里面提供了vllm 推理的代码;

点击查看 LLaMA-Factory vllm_engine.py TODO: 读者可修改此处的代码

类似如下文章的实现:vllm 本地大模型加速推理

数据集 tenplate

lora 微调的数据集形式如下:

{
	"instruction": 
	"你是专门进行企业分类的专家。请根据提供的企业相关信息:'{'企业名称(全称)': '自动化工程有限公司', '经营范围': '(省略...)'}',将企业划分到以下类别中,企业可能属于多个类别:['文化旅游', '人工智能', '深地深海深空', '空天信息', '电磁能']。请按照列表的格式回答。 ", 
	"input": "", 
	"output": "[\"人工智能\", \"高端装备和先进基础材料\"]"
}

使用 alpaca 数据集格式微调大模型时,会根据填入的模型和template,对数据集文本添加一些特殊字符,不同的大模型还都不一样。如果后续要使用大模型进行推理,也需要将文本调整成训练的时候一样。如果直接使用 LLaMA-Factory API 部署,无需考虑prompt里面的这些特殊字符, LLaMA-Factory 会自动封装完成。

既然咱们要自己使用 vllm 推理,prompt template 的封装就得咱们自己写;

有一个简便方法,看到 LLaMA-Factory 给数据集封装的 template prompt 的样例。

如下图所示,修改该py文件的代码 https://github.com/hiyouga/LLaMA-Factory/blob/main/src/llmtuner/data/loader.py
把 dataset 的样子打印出来看看👀;

在这里插入图片描述

CUDA_VISIBLE_DEVICES=0 python ../../src/train_bash.py \
--stage sft \
--do_train \
--model_name_or_path ZhipuAI/chatglm3-6b \
--dataset_dir ../../data \
--dataset industry_class \
--template chatglm3 \
--finetuning_type lora \
--lora_target query_key_value \
--output_dir ./output_test/ \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 1 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_strategy epoch \
--learning_rate 5e-5 \
--num_train_epochs 2.0 \
--plot_loss \
--fp16

训练的数据集样例打印结果如下所示:

onverting format of dataset: 100%|█████████████████| 2804/2804 [00:00<00:00, 84459.59 examples/s]
all Dataset({
    features: ['prompt', 'response', 'system', 'tools'],
    num_rows: 2804
})
pre {'prompt': [{'role': 'user', 'content': "你是专门进行企业分类的专家。请根据提供的企业相关信息:'{'企业名称(全称)': '【保密】有限公司', '经营范围': '一般项目:金属结构制造;金属结构销售;金属材料制造;金属材料销售;机械电气设备制造;机械电气设备销售;电子元器件与机电组件设备制造;通用设备修理;电气设备修理;电子、机械设备维护;金属切割及焊接设备制造;金属切割及焊接设备销售;船舶自动化、检测、监控系统制造;船用配套设备制造;工业自动控制系统装置制造;工业自动控制系统装置销售;工业机器人制造;工业机器人安装、维修;增材制造;增材制造装备制造;增材制造装备销售;智能机器人的研发;智能基础制造装备制造;智能基础制造装备销售;海洋工程装备制造;海洋工程装备销售;海上风电相关装备销售;人工智能基础软件开发;人工智能应用软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;技术进出口;货物进出口;软件销售;软件开发;对外承包工程;工程管理服务;非居住房地产租赁;租赁服务', '所属行业': '金属制品、机械和设备修理业', '一级行业分类': '制造业', '二级行业分类': '金属制品、机械和设备修理业', '三级行业分类': '其他机械和设备修理业'}',将企业划分到以下类别中,企业可能属于多个类别:['文化旅游', '大健康和生物技术', '现代金融', '商贸物流', '绿色环保', '智能建造', '数字创意', '氢能', '高端装备和先进基础材料', '网络安全', '“光芯屏端网”新一代信息技术', '汽车制造和服务', '量子科技', '航空航天', '人工智能', '深地深海深空', '空天信息', '电磁能', '脑科学和类脑科学', '超级计算']。请按照列表的格式回答。 "}], 'response': [{'role': 'assistant', 'content': '["人工智能", "高端装备和先进基础材料"]'}], 'system': '', 'tools': ''}
Running tokenizer on dataset: 100%|██████████████████| 2804/2804 [00:02<00:00, 1112.92 examples/s]
map {'input_ids': [64790, 64792, 64795, 30910, 13, 30910, 34607, 33500, 31636, 31648, 33328, 54530, 32114, 31155, 55073, 31793, 35100, 31648, 45987, 29552, 30982, 30953, 31648, 33624, 31301, 54580, 55037, 31300, 5440, 765, 30952, 3337, 36244, 31713, 31301, 32841, 31300, 31830, 1589, 765, 32087, 32238, 5440, 765, 31873, 31671, 31211, 33948, 32126, 32273, 54659, 33948, 32126, 32172, 54659, 33948, 31976, 32273, 54659, 33948, 31976, 32172, 54659, 33024, 35989, 32077, 32273, 54659, 33024, 35989, 32077, 32172, 54659, 32157, 54751, 42052, 54619, 39984, 42708, 32077, 32273, 54659, 35753, 32077, 46991, 54659, 35989, 32077, 46991, 54659, 32157, 31201, 33024, 32077, 32487, 54659, 33948, 43314, 54643, 43964, 32077, 32273, 54659, 33948, 43314, 54643, 43964, 32077, 32172, 54659, 38331, 36244, 31201, 32348, 31201, 35189, 31739, 32273, 54659, 55745, 54571, 33818, 32077, 32273, 54659, 32068, 32679, 51868, 35343, 32273, 54659, 32068, 32679, 51868, 35343, 32172, 54659, 32068, 35200, 32273, 54659, 32068, 35200, 33441, 31201, 34888, 54659, 54866, 55179, 32273, 54659, 54866, 55179, 32273, 33610, 32273, 54659, 54866, 55179, 32273, 33610, 32172, 54659, 32093, 33290, 31664, 32569, 54659, 32093, 31811, 32273, 33610, 32273, 54659, 32093, 31811, 32273, 33610, 32172, 54659, 33187, 31713, 33610, 32273, 54659, 33187, 31713, 33610, 32172, 54659, 35688, 43228, 31724, 33610, 32172, 54659, 34797, 31811, 32602, 31936, 54659, 34797, 32002, 32602, 31936, 54659, 31668, 31645, 31201, 31668, 31936, 31201, 31668, 32539, 31201, 31668, 31964, 31201, 31668, 35928, 31201, 31668, 33129, 54659, 31668, 40321, 54659, 35980, 40321, 54659, 32602, 32172, 54659, 32602, 31936, 54659, 33522, 36231, 31713, 54659, 31713, 31641, 31645, 54659, 54836, 33269, 33934, 35741, 54659, 35741, 31645, 1589, 765, 37325, 31825, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 34453, 31825, 33328, 5440, 765, 35626, 1589, 765, 35159, 31825, 33328, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 37602, 31825, 33328, 5440, 765, 31722, 33024, 54542, 32077, 46991, 54569, 30953, 16963, 31123, 54687, 31648, 37982, 54555, 32040, 38724, 54538, 31123, 31648, 31667, 32180, 32858, 38724, 31211, 4005, 41908, 1589, 765, 54539, 31740, 54542, 53444, 1589, 765, 31999, 32021, 1589, 765, 40278, 33089, 1589, 765, 32658, 33242, 1589, 765, 32093, 34686, 1589, 765, 32224, 34357, 1589, 765, 53558, 1589, 765, 34052, 33610, 54542, 32519, 31811, 31976, 1589, 765, 39180, 1589, 765, 30989, 54853, 56508, 56033, 55396, 54766, 30991, 38157, 38078, 1589, 765, 32031, 32273, 37154, 1589, 765, 37962, 31748, 1589, 765, 45268, 1589, 765, 34797, 1589, 765, 54829, 54563, 51273, 54829, 54913, 1589, 765, 54913, 54614, 31707, 1589, 765, 43005, 54558, 1589, 765, 55514, 31760, 54542, 54931, 55514, 31760, 1589, 765, 34150, 32269, 4960, 31155, 55073, 32001, 39547, 54530, 36844, 33287, 31155, 30910, 64796, 30910, 13, 15404, 34797, 1252, 449, 34052, 33610, 54542, 32519, 31811, 31976, 5515, 2], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'labels': [-100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, ...

如上所示:

  1. 咱们提供的alpaca形式的数据集,会被 llama-factory 转成如下形式
    {
    	'prompt': [{'role': 'user', 'content': "你是专门进行企业分类的专家...请按照列表的格式回答。 "}], 
    	'response': [{'role': 'assistant', 'content': '["人工智能", "高端装备和先进基础材料"]'}], 
    	'system': '', 
    	'tools': ''
    }
    
  2. 训练的数据集样例
    针对数据集编码;
    'input_ids'
    [64790, 64792, 64795, 30910, 13, 30910, 34607, 33500, 31636, 31648, 33328, 54530, 32114, 31155, 55073, 31793, 35100, 31648, 45987, 29552, 30982, 30953, 31648, 33624, 31301, 54580, 55037, 31300, 5440, 765, 30952, 3337, 36244, 31713, 31301, 32841, 31300, 31830, 1589, 765, 32087, 32238, 5440, 765, 31873, 31671, 31211, 33948, 32126, 32273, 54659, 33948, 32126, 32172, 54659, 33948, 31976, 32273, 54659, 33948, 31976, 32172, 54659, 33024, 35989, 32077, 32273, 54659, 33024, 35989, 32077, 32172, 54659, 32157, 54751, 42052, 54619, 39984, 42708, 32077, 32273, 54659, 35753, 32077, 46991, 54659, 35989, 32077, 46991, 54659, 32157, 31201, 33024, 32077, 32487, 54659, 33948, 43314, 54643, 43964, 32077, 32273, 54659, 33948, 43314, 54643, 43964, 32077, 32172, 54659, 38331, 36244, 31201, 32348, 31201, 35189, 31739, 32273, 54659, 55745, 54571, 33818, 32077, 32273, 54659, 32068, 32679, 51868, 35343, 32273, 54659, 32068, 32679, 51868, 35343, 32172, 54659, 32068, 35200, 32273, 54659, 32068, 35200, 33441, 31201, 34888, 54659, 54866, 55179, 32273, 54659, 54866, 55179, 32273, 33610, 32273, 54659, 54866, 55179, 32273, 33610, 32172, 54659, 32093, 33290, 31664, 32569, 54659, 32093, 31811, 32273, 33610, 32273, 54659, 32093, 31811, 32273, 33610, 32172, 54659, 33187, 31713, 33610, 32273, 54659, 33187, 31713, 33610, 32172, 54659, 35688, 43228, 31724, 33610, 32172, 54659, 34797, 31811, 32602, 31936, 54659, 34797, 32002, 32602, 31936, 54659, 31668, 31645, 31201, 31668, 31936, 31201, 31668, 32539, 31201, 31668, 31964, 31201, 31668, 35928, 31201, 31668, 33129, 54659, 31668, 40321, 54659, 35980, 40321, 54659, 32602, 32172, 54659, 32602, 31936, 54659, 33522, 36231, 31713, 54659, 31713, 31641, 31645, 54659, 54836, 33269, 33934, 35741, 54659, 35741, 31645, 1589, 765, 37325, 31825, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 34453, 31825, 33328, 5440, 765, 35626, 1589, 765, 35159, 31825, 33328, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 37602, 31825, 33328, 5440, 765, 31722, 33024, 54542, 32077, 46991, 54569, 30953, 16963, 31123, 54687, 31648, 37982, 54555, 32040, 38724, 54538, 31123, 31648, 31667, 32180, 32858, 38724, 31211, 4005, 41908, 1589, 765, 54539, 31740, 54542, 53444, 1589, 765, 31999, 32021, 1589, 765, 40278, 33089, 1589, 765, 32658, 33242, 1589, 765, 32093, 34686, 1589, 765, 32224, 34357, 1589, 765, 53558, 1589, 765, 34052, 33610, 54542, 32519, 31811, 31976, 1589, 765, 39180, 1589, 765, 30989, 54853, 56508, 56033, 55396, 54766, 30991, 38157, 38078, 1589, 765, 32031, 32273, 37154, 1589, 765, 37962, 31748, 1589, 765, 45268, 1589, 765, 34797, 1589, 765, 54829, 54563, 51273, 54829, 54913, 1589, 765, 54913, 54614, 31707, 1589, 765, 43005, 54558, 1589, 765, 55514, 31760, 54542, 54931, 55514, 31760, 1589, 765, 34150, 32269, 4960, 31155, 55073, 32001, 39547, 54530, 36844, 33287, 31155, 30910, 64796, 30910, 13, 15404, 34797, 1252, 449, 34052, 33610, 54542, 32519, 31811, 31976, 5515, 2]
    
    使用解码器,decode 'input_ids' 就可以看到真正送入模型推理的 prompt 的样例。
    from modelscope import AutoTokenizer, AutoModel, snapshot_download
    model_dir = snapshot_download("ZhipuAI/chatglm3-6b")
    tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
    # model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()
    input_ids = [64790, 64792, 64795, 30910, 13, 30910, 34607, 33500, 31636, 31648, 33328, 54530, 32114, 31155, 55073, 31793, 35100, 31648, 45987, 29552, 30982, 30953, 31648, 33624, 31301, 54580, 55037, 31300, 5440, 765, 30952, 3337, 36244, 31713, 31301, 32841, 31300, 31830, 1589, 765, 32087, 32238, 5440, 765, 31873, 31671, 31211, 33948, 32126, 32273, 54659, 33948, 32126, 32172, 54659, 33948, 31976, 32273, 54659, 33948, 31976, 32172, 54659, 33024, 35989, 32077, 32273, 54659, 33024, 35989, 32077, 32172, 54659, 32157, 54751, 42052, 54619, 39984, 42708, 32077, 32273, 54659, 35753, 32077, 46991, 54659, 35989, 32077, 46991, 54659, 32157, 31201, 33024, 32077, 32487, 54659, 33948, 43314, 54643, 43964, 32077, 32273, 54659, 33948, 43314, 54643, 43964, 32077, 32172, 54659, 38331, 36244, 31201, 32348, 31201, 35189, 31739, 32273, 54659, 55745, 54571, 33818, 32077, 32273, 54659, 32068, 32679, 51868, 35343, 32273, 54659, 32068, 32679, 51868, 35343, 32172, 54659, 32068, 35200, 32273, 54659, 32068, 35200, 33441, 31201, 34888, 54659, 54866, 55179, 32273, 54659, 54866, 55179, 32273, 33610, 32273, 54659, 54866, 55179, 32273, 33610, 32172, 54659, 32093, 33290, 31664, 32569, 54659, 32093, 31811, 32273, 33610, 32273, 54659, 32093, 31811, 32273, 33610, 32172, 54659, 33187, 31713, 33610, 32273, 54659, 33187, 31713, 33610, 32172, 54659, 35688, 43228, 31724, 33610, 32172, 54659, 34797, 31811, 32602, 31936, 54659, 34797, 32002, 32602, 31936, 54659, 31668, 31645, 31201, 31668, 31936, 31201, 31668, 32539, 31201, 31668, 31964, 31201, 31668, 35928, 31201, 31668, 33129, 54659, 31668, 40321, 54659, 35980, 40321, 54659, 32602, 32172, 54659, 32602, 31936, 54659, 33522, 36231, 31713, 54659, 31713, 31641, 31645, 54659, 54836, 33269, 33934, 35741, 54659, 35741, 31645, 1589, 765, 37325, 31825, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 34453, 31825, 33328, 5440, 765, 35626, 1589, 765, 35159, 31825, 33328, 5440, 765, 33948, 35390, 31201, 33024, 54542, 32077, 46991, 54569, 1589, 765, 37602, 31825, 33328, 5440, 765, 31722, 33024, 54542, 32077, 46991, 54569, 30953, 16963, 31123, 54687, 31648, 37982, 54555, 32040, 38724, 54538, 31123, 31648, 31667, 32180, 32858, 38724, 31211, 4005, 41908, 1589, 765, 54539, 31740, 54542, 53444, 1589, 765, 31999, 32021, 1589, 765, 40278, 33089, 1589, 765, 32658, 33242, 1589, 765, 32093, 34686, 1589, 765, 32224, 34357, 1589, 765, 53558, 1589, 765, 34052, 33610, 54542, 32519, 31811, 31976, 1589, 765, 39180, 1589, 765, 30989, 54853, 56508, 56033, 55396, 54766, 30991, 38157, 38078, 1589, 765, 32031, 32273, 37154, 1589, 765, 37962, 31748, 1589, 765, 45268, 1589, 765, 34797, 1589, 765, 54829, 54563, 51273, 54829, 54913, 1589, 765, 54913, 54614, 31707, 1589, 765, 43005, 54558, 1589, 765, 55514, 31760, 54542, 54931, 55514, 31760, 1589, 765, 34150, 32269, 4960, 31155, 55073, 32001, 39547, 54530, 36844, 33287, 31155, 30910, 64796, 30910, 13, 15404, 34797, 1252, 449, 34052, 33610, 54542, 32519, 31811, 31976, 5515, 2]
    tokenizer.decode(input_ids)
    
    送入模型训练的数据集样例如下所示:
    "[gMASK]sop<|user|> \n {text} <|assistant|> \n {label}"
    
    '[gMASK]sop<|user|> \n 你是专门进行企业分类的专家。请根据提供的企业相关信息:\'{\'企业名称(全称)\': \'DIG自动化工程(武汉)有限公司\', \'经营范围\': \'一般项目:金属结构制造;金属结构销售;金属材料制造;金属材料销售;机械电气设备制造;机械电气设备销售;电子元器件与机电组件设备制造;通用设备修理;电气设备修理;电子、机械设备维护;金属切割及焊接设备制造;金属切割及焊接设备销售;船舶自动化、检测、监控系统制造;船用配套设备制造;工业自动控制系统装置制造;工业自动控制系统装置销售;工业机器人制造;工业机器人安装、维修;增材制造;增材制造装备制造;增材制造装备销售;智能机器人的研发;智能基础制造装备制造;智能基础制造装备销售;海洋工程装备制造;海洋工程装备销售;海上风电相关装备销售;人工智能基础软件开发;人工智能应用软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;技术进出口;货物进出口;软件销售;软件开发;对外承包工程;工程管理服务;非居住房地产租赁;租赁服务\', \'所属行业\': \'金属制品、机械和设备修理业\', \'一级行业分类\': \'制造业\', \'二级行业分类\': \'金属制品、机械和设备修理业\', \'三级行业分类\': \'其他机械和设备修理业\'}\',将企业划分到以下类别中,企业可能属于多个类别:[\'文化旅游\', \'大健康和生物技术\', \'现代金融\', \'商贸物流\', \'绿色环保\', \'智能建造\', \'数字创意\', \'氢能\', \'高端装备和先进基础材料\', \'网络安全\', \'“光芯屏端网”新一代信息技术\', \'汽车制造和服务\', \'量子科技\', \'航空航天\', \'人工智能\', \'深地深海深空\', \'空天信息\', \'电磁能\', \'脑科学和类脑科学\', \'超级计算\']。请按照列表的格式回答。 <|assistant|> \n ["人工智能", "高端装备和先进基础材料"]'
    
  3. 预测的数据集样例
    "[gMASK]sop<|user|> \n {text} <|assistant|>"
    
    "[gMASK]sop<|user|> \n 你是专门进行企业分类的专家。请根据提供的企业相关信息:'{'企业名称(全称)': 'DIG自动化工程(武汉)有限公司', '经营范围': '一般项目:金属结构制造;金属结构销售;金属材料制造;金属材料销售;机械电气设备制造;机械电气设备销售;电子元器件与机电组件设备制造;通用设备修理;电气设备修理;电子、机械设备维护;金属切割及焊接设备制造;金属切割及焊接设备销售;船舶自动化、检测、监控系统制造;船用配套设备制造;工业自动控制系统装置制造;工业自动控制系统装置销售;工业机器人制造;工业机器人安装、维修;增材制造;增材制造装备制造;增材制造装备销售;智能机器人的研发;智能基础制造装备制造;智能基础制造装备销售;海洋工程装备制造;海洋工程装备销售;海上风电相关装备销售;人工智能基础软件开发;人工智能应用软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;技术进出口;货物进出口;软件销售;软件开发;对外承包工程;工程管理服务;非居住房地产租赁;租赁服务', '所属行业': '金属制品、机械和设备修理业', '一级行业分类': '制造业', '二级行业分类': '金属制品、机械和设备修理业', '三级行业分类': '其他机械和设备修理业'}',将企业划分到以下类别中,企业可能属于多个类别:['文化旅游', '大健康和生物技术', '现代金融', '商贸物流', '绿色环保', '智能建造', '数字创意', '氢能', '高端装备和先进基础材料', '网络安全', '“光芯屏端网”新一代信息技术', '汽车制造和服务', '量子科技', '航空航天', '人工智能', '深地深海深空', '空天信息', '电磁能', '脑科学和类脑科学', '超级计算']。请按照列表的格式回答。 <|assistant|>"
    

vllm 代码部署

import json
import pickle
import pandas as pd
from vllm import LLM, SamplingParams


# "top_p": 0,  "n": 1,
sampling_params = SamplingParams(temperature=0, n=1, max_tokens=2048)

model_path = 'new_model'
llm = LLM(
    model=model_path,
    trust_remote_code=True,
    tokenizer=model_path,
    tokenizer_mode='auto',
    tensor_parallel_size=1
)

将本地需要预测的文本,转成 template 风格的prompt,再让大模型去预测;

prompts = []
industry_name = []
with open('data.json','r') as f:
    for line in f:
        item = json.loads(line)
        text = item["instruction"]
        prompts.append(f"[gMASK]sop<|user|> \n {text}<|assistant|>")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Django】调用django的pbkdf2_sha256加密算法测试

基于django搭建的系统中&#xff0c;用到pbkdf2_sha256&#xff08;&#xff08;Password-Based Key Derivation Function 2&#xff09;&#xff09;加密算法&#xff0c;这里做些代码测试、总结。 PBKDF2简介 PBKDF2是一种基于密码的密钥派生函数&#xff0c;用于从用户提供的…

cv2技术原理-图像旋转原理及手动实现

cv2技术原理-图像旋转原理及手动实现 1、图像旋转opencv实现2、cv2.getRotationMatrix2D函数解释3、数学原理推导旋转矩阵M4、手动计算旋转矩阵M5、旋转矩阵M的使用6、使用旋转矩阵M手动实现旋转功能 1、图像旋转opencv实现 图像旋转在对数据集数据增强&#xff08;主要是随机…

Spring 声明式事务控制

1. 编程式事务控制相关对象 1.1 PlatformTransactionManager PlatformTransactionManager 接口是 spring 的事务管理器&#xff0c;它提供了我们常用的操作事务的方法。 PlatformTransactionManager 是接口类型&#xff0c;不同的 Dao 层技术则有不同的实现类。例如:Dao层技…

Sileo安装插件报错:Depends mobilesubstrate

Sileo安装插件报错 iOS 15.8系统&#xff0c;使用palera1n越狱&#xff0c;然后使用Sileo安装插件的时候&#xff0c;有些插件会报错&#xff1a;Depends mobilesubstrate&#xff08;比如AppStore plus&#xff09; 报错的原因分析 从提示信息很容易可以看出&#xff0c;当…

upload-labs第十一十二关

第十一关 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES[upload_fil…

MySQL-进阶篇-一条sql更新语句是如何执行的(redo log和binlog)

上一篇&#xff1a;一条sql查询语句是如何执行的 http://t.csdnimg.cn/nV3EY 摘自&#xff1a;林晓斌MySQL实战45讲——第二篇 更新语句的执行过程与上一篇查询流程相同&#xff0c;本篇简写。 但多了两个重要的日志模块&#xff1a;redo log&#xff08;重做日志&#xff0…

leetcode:滑动窗口----3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

利用穷举算法求一个整数数组A中的逆序对的个数(C语言)

目录 实验内容&#xff1a; 实验过程&#xff1a; 1.算法设计 2.程序清单 3.复杂度分析 4.实验结果 实验内容&#xff1a; 给定一个整数数组A&#xff08;a0,a1,…,an-1&#xff09;&#xff0c;若i<j且ai>aj&#xff0c;则<ai,aj>就为一个逆序对&#xff0c…

STM32电机控制SDK实战

一、前言 本次测试基于ST开发板NUCLEO-F302R8&#xff0c;驱动板X-NUCLEO-IHM07M1&#xff0c;使用无刷直流电机BLDC实现FOC控制&#xff1b;采样三霍尔传感器检测电机转子位置&#xff1b;基于速度环闭环控制实现电机转动&#xff1b; 二、实战环境 软件环境&#xff1a; 1…

布隆过滤器初探

1、什么是布隆过滤器 布隆过滤器是一个很长的二进制向量和一系列随机hash函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 常见的hash函数的应用hashMap、hashSet等 回顾一下hashMap的结构 hashMap由数组链表红黑树&#xff08;java1.8后&#xff0c;链表元素长度大…

Redis入门到通关之GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。…

OpenHarmony 蓝牙相关API用法

介绍 本示例通过使用蓝牙低功耗心率服务&#xff0c;展示蓝牙相关API用法。实现了以下几点功能&#xff1a; 发现具有特定服务的设备。连接到设备。发现服务。发现服务的特征、如何读取给定特征的值、为特征设置通知等。 相关概念 BLE扫描&#xff1a;通过BLE扫描接口实现对…

【DA-CLIP】图像复原在AutoDL上部署测试

起因&#xff1a; 虽然在本机Windows部署成功运行&#xff0c;但是由于计算资源少只有6G的GPU无法计算手机拍摄图像复原和其他一些数据集测试&#xff0c;尝试租用AutoDL的服务器部署测试 租AutoDL 租的人很多&#xff0c;刚确定运行的镜像环境就报告说这个机子已经没卡了&am…

《QT实用小工具·二十八》基于qt开发的各种曲线

1、概述 源码放在文章末尾 该项目实现了各种曲线的绘制&#xff0c;下面是项目的demo演示&#xff1a; 项目部分代码如下&#xff1a; #include "frmsmoothcurve.h" #include "ui_frmsmoothcurve.h" #include "smoothcurve.h" #include "…

中颖51芯片学习7. printf重定向到串口与自定义日志输出函数

中颖51芯片学习7. printf重定向到串口与自定义日志输出函数 一、 printf 重定向1. 概念2. 实现方式3. C51 中printf数值格式化 二、日志函数1. 实现方案分析2. 代码&#xff08;1&#xff09;log_utils.h&#xff08;2&#xff09;main.c 3. 通过预定义宏实现日志分级输出&…

偏微分方程算法之二维初边值问题(紧交替方向隐格式)

目录 一、研究对象 二、理论推导 2.1 二维紧差分格式 2.2 紧交替方向格式 2.2.1 紧Peaceman-Rachford格式 2.2.2 紧D’Yakonov格式 2.2.3 紧Douglas格式 三、算例实现 四、结论 一、研究对象 继续以二维抛物型方程初边值问题为研究对象: 为了确保连续性,公式…

OpenHarmony移植的加解密库—libsodium [GN编译]

简介 libsodium主要是易用&#xff0c;可移植的加解密库。 下载安装 直接在OpenHarmony-SIG仓中搜索libsodium并下载。 使用说明 以OpenHarmony 3.1Beta的rk3568版本为例 库代码存放路径&#xff1a;./third_party/libsodium 修改添加依赖的编译脚本&#xff0c;路径&#…

区间图着色问题:贪心算法设计及实现

区间图着色问题&#xff1a;贪心算法设计及实现 1. 问题定义2. 贪心算法设计2.1 活动排序2.2 分配教室2.3 算法终止 3. 伪代码4. C语言实现5. 算法分析6. 结论7. 参考文献 在本文中&#xff0c;我们将探讨如何使用贪心算法解决一个特定的资源分配问题&#xff0c;即区间图着色问…

网站备案期间怎么关闭首页显示无法访问-文章及其它页面正常访问

自从做了开发者之后才发现每个人博主的需求都是不同的&#xff0c;的的确确颠覆了我的观点&#xff0c;无论是页面布局还是SEO相关的设置&#xff0c;可能是因为站点属性不同所以需求不同&#xff0c;慢慢的就会在主题加入一些自定接口来满足不同人的需求&#xff0c;有人需要P…

什么是IIoT?

什么是IIoT? IIoT,即工业物联网(Industrial Internet of Things),是指将物联网技术应用到工业领域,通过微型低成本传感器、高带宽无线网络等技术手段,实现工业设备、系统和服务的互联互通,从而提高生产效率、降低能耗和成本,实现智能化和自动化生产。 IIoT的应用范围…