news 2026/4/29 2:33:50

[具身智能-504]:使用Transformers python库进行大模型的再训练、部署、使用的示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[具身智能-504]:使用Transformers python库进行大模型的再训练、部署、使用的示例

使用 Hugging Face 的Transformers库进行大模型的再训练、部署和使用,是 AI 开发的核心工作流。下面将通过一个完整的实战示例,带你从零开始,体验这三个关键环节。

我们将以阿里的Qwen2.5-7B-Instruct模型为例,展示如何对其进行微调,并将其部署为一个可调用的 API 服务。

🛠️ 环境准备

首先,你需要安装必要的 Python 库。这里我们使用pip进行安装。

bash

# 安装核心库 pip install transformers accelerate torch datasets peft bitsandbytes trl
  • transformers: Hugging Face 的核心库,用于加载模型和分词器。
  • accelerate: 简化多 GPU 和混合精度训练。
  • torch: PyTorch 深度学习框架。
  • datasets: 方便地加载和处理数据集。
  • peft:参数高效微调库,用于 LoRA/QLoRA 等高效微调方法。
  • bitsandbytes: 提供量化支持,如 4-bit/8-bit 加载,大幅降低显存占用。
  • trl: Transformer Reinforcement Learning,这里我们用它提供的SFTTrainer来简化监督微调流程。

📚 第一步:再训练(以 QLoRA 微调为例)

直接训练一个 7B 参数量的模型需要巨大的显存。QLoRA (Quantized Low-Rank Adaptation) 技术通过量化和高效参数微调,让我们能在单张消费级显卡(如 RTX 3090/4090)上完成训练

1. 准备数据集

我们使用一个 JSONL 格式的数据集,其中每一行都是一个包含instruction(指令)、input(输入)和output(期望输出)的样本。

json

{"instruction": "解释量子纠缠", "input": "", "output": "量子纠缠是量子力学中的一种现象..."} {"instruction": "将这句话翻译成英文", "input": "你好,世界", "output": "Hello, World"}
2. 编写训练脚本

下面是一个完整的 QLoRA 微调脚本,包含了量化配置、LoRA 配置和训练流程。

python

import torch from datasets import load_dataset from transformers import ( AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, TrainingArguments ) from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training from trl import SFTTrainer # --- 1. 配置 4-bit 量化 (QLoRA 核心) --- # 这将模型权重压缩到 4-bit,显存占用直接减半 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.float16, bnb_4bit_use_double_quant=True, )<websource>source_group_web_3</websource> # --- 2. 加载模型和分词器 --- MODEL_ID = "Qwen/Qwen2.5-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) # 确保分词器有 pad_token tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( MODEL_ID, quantization_config=bnb_config, # 应用量化配置 device_map="auto", # 自动分配设备 trust_remote_code=True ) # --- 3. 预处理模型以进行 k-bit 训练 --- model = prepare_model_for_kbit_training(model) # --- 4. 配置 LoRA --- # 我们只训练新增的少量参数,而不是整个模型 peft_config = LoraConfig( r=16, # 秩,决定新增参数规模 lora_alpha=32, # 缩放系数,通常是 r 的 2 倍 lora_dropout=0.05, bias="none", task_type="CAUSAL_LM", target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"] ) model = get_peft_model(model, peft_config)<websource>source_group_web_4</websource> # --- 5. 加载数据 --- dataset = load_dataset("json", data_files="data.jsonl", split="train") # --- 6. 配置训练参数 --- training_args = TrainingArguments( output_dir="./qwen_lora_finetuned", num_train_epochs=3, per_device_train_batch_size=4, gradient_accumulation_steps=4, # 模拟更大的 batch size learning_rate=2e-4, fp16=True, # 混合精度训练 logging_steps=10, save_strategy="steps", save_steps=100, load_best_model_at_end=True, ) # --- 7. 开始训练 --- trainer = SFTTrainer( model=model, args=training_args, train_dataset=dataset, tokenizer=tokenizer, ) trainer.train() # --- 8. 保存模型 --- # 保存的是 LoRA 适配器权重,体积很小 model.save_pretrained("./qwen_lora_finetuned") tokenizer.save_pretrained("./qwen_lora_finetuned")

🚀 第二步:部署(以 FastAPI 为例)

训练完成后,我们需要将模型部署为一个 Web API,以便其他应用调用。这里使用FastAPI框架,它快速且能自动生成文档

注意:部署时,你需要将基础模型和训练好的 LoRA 权重合并,或者分别加载。为简化示例,这里假设你已经将 LoRA 权重合并到了基础模型中,并保存为./qwen-7b-merged

python

from fastapi import FastAPI, Body from transformers import AutoTokenizer, AutoModelForCausalLM import torch import uvicorn app = FastAPI(title="我的大模型API") # --- 1. 服务启动时加载模型 --- # 使用 8-bit 加载以节省显存,适合部署环境 model_name = "./qwen-7b-merged" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", load_in_8bit=True, trust_remote_code=True ).eval() # 切换到评估模式 # --- 2. 定义推理接口 --- @app.post("/generate") async def generate( prompt: str = Body(..., description="输入提示词"), max_tokens: int = Body(512, description="最大生成token数"), temperature: float = Body(0.7, description="采样温度") ): # 构建输入 inputs = tokenizer(prompt, return_tensors="pt").to("cuda") # 模型推理 with torch.no_grad(): # 推理时不需要计算梯度 outputs = model.generate( **inputs, max_new_tokens=max_tokens, do_sample=True, temperature=temperature, pad_token_id=tokenizer.eos_token_id ) # 解码输出 result = tokenizer.decode(outputs, skip_special_tokens=True) return {"code": 200, "prompt": prompt, "response": result} # --- 3. 启动服务 --- if __name__ == "__main__": # 运行在 http://0.0.0.0:8000 uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务后,你可以访问http://localhost:8000/docs查看自动生成的交互式 API 文档,并直接进行测试。

💬 第三步:使用(基础推理示例)

在微调或部署之后,你也可以直接用Transformers库加载模型进行简单的推理,感受模型的能力。

python

from transformers import AutoTokenizer, AutoModelForCausalLM import torch # --- 1. 加载模型 --- model_name = "Qwen/Qwen2.5-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) # 使用 8-bit 加载,降低显存门槛 model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", load_in_8bit=True, trust_remote_code=True ).eval() # --- 2. 构建对话 --- messages = [ {"role": "system", "content": "你是一个专业的AI助手。"}, {"role": "user", "content": "请介绍一下大模型量化技术。"} ] # 应用模型的对话模板 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) model_inputs = tokenizer([text], return_tensors="pt").to("cuda") # --- 3. 生成回复 --- generated_ids = model.generate(**model_inputs, max_new_tokens=512) # 截取新生成的部分 output_ids = generated_ids[len(model_inputs.input_ids):] response = tokenizer.decode(output_ids, skip_special_tokens=True) print(response)

通过以上三个步骤,你就完成了从模型再训练、服务部署到最终使用的完整闭环。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 2:33:49

量子神经网络辐射场(QNeRF)技术解析与应用

1. 量子神经网络辐射场(QNeRF)技术解析量子计算与计算机视觉的交叉领域正在催生一系列创新性技术。作为这一领域的最新突破&#xff0c;量子神经网络辐射场(QNeRF)将传统神经辐射场(NeRF)的3D场景表示能力与量子计算的独特优势相结合&#xff0c;开创了3D重建和视角合成的新范式…

作者头像 李华
网站建设 2026/4/29 2:33:21

非易失性可编程光子集成电路的创新架构与应用

1. 非易失性可编程光子集成电路的创新架构在硅光子学领域&#xff0c;可编程光子集成电路&#xff08;PPIC&#xff09;正经历一场革命性的变革。传统PPIC虽然功能强大&#xff0c;但其功耗问题一直制约着大规模应用。想象一下&#xff0c;一个包含上千个可调谐基本单元&#x…

作者头像 李华
网站建设 2026/4/29 2:32:22

VS Code MCP服务集成深度解析(MCP 1.2+协议兼容性全解密)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code MCP服务集成深度解析&#xff08;MCP 1.2协议兼容性全解密&#xff09; VS Code 对 MCP&#xff08;Model Communication Protocol&#xff09;1.2 协议的支持标志着本地开发环境与大模型服务协…

作者头像 李华
网站建设 2026/4/29 2:31:54

汽车某变速箱上箱盖钻底面孔组合机床(6个8.5孔)

汽车变速箱上箱盖作为动力传递的关键部件&#xff0c;其加工精度直接影响整车性能。在箱盖底面钻设6个直径8.5毫米的孔位&#xff0c;是确保齿轮轴定位精准、润滑油路畅通的核心工序。传统单孔加工方式需多次装夹定位&#xff0c;不仅效率低下&#xff0c;更易因重复定位误差导…

作者头像 李华
网站建设 2026/4/29 2:28:27

零售与银行业引领AI投资浪潮

根据贝恩咨询周三发布的一项调查报告&#xff0c;相当大比例的零售和银行业高管预计将在2026年技术预算中增加最多20%的资金&#xff0c;用于人工智能和机器学习领域的投入。此次报告共在全球范围内调研了280位科技高管。AI投资持续升温&#xff0c;与此同时&#xff0c;业界也…

作者头像 李华