[具身智能-504]:使用Transformers python库进行大模型的再训练、部署、使用的示例
使用 Hugging Face 的Transformers库进行大模型的再训练、部署和使用是 AI 开发的核心工作流。下面将通过一个完整的实战示例带你从零开始体验这三个关键环节。我们将以阿里的Qwen2.5-7B-Instruct模型为例展示如何对其进行微调并将其部署为一个可调用的 API 服务。️ 环境准备首先你需要安装必要的 Python 库。这里我们使用pip进行安装。bash# 安装核心库 pip install transformers accelerate torch datasets peft bitsandbytes trltransformers: 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 配置和训练流程。pythonimport 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_4bitTrue, bnb_4bit_quant_typenf4, bnb_4bit_compute_dtypetorch.float16, bnb_4bit_use_double_quantTrue, )websourcesource_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_configbnb_config, # 应用量化配置 device_mapauto, # 自动分配设备 trust_remote_codeTrue ) # --- 3. 预处理模型以进行 k-bit 训练 --- model prepare_model_for_kbit_training(model) # --- 4. 配置 LoRA --- # 我们只训练新增的少量参数而不是整个模型 peft_config LoraConfig( r16, # 秩决定新增参数规模 lora_alpha32, # 缩放系数通常是 r 的 2 倍 lora_dropout0.05, biasnone, task_typeCAUSAL_LM, target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj] ) model get_peft_model(model, peft_config)websourcesource_group_web_4/websource # --- 5. 加载数据 --- dataset load_dataset(json, data_filesdata.jsonl, splittrain) # --- 6. 配置训练参数 --- training_args TrainingArguments( output_dir./qwen_lora_finetuned, num_train_epochs3, per_device_train_batch_size4, gradient_accumulation_steps4, # 模拟更大的 batch size learning_rate2e-4, fp16True, # 混合精度训练 logging_steps10, save_strategysteps, save_steps100, load_best_model_at_endTrue, ) # --- 7. 开始训练 --- trainer SFTTrainer( modelmodel, argstraining_args, train_datasetdataset, tokenizertokenizer, ) 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。pythonfrom 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_codeTrue) model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, load_in_8bitTrue, trust_remote_codeTrue ).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_tensorspt).to(cuda) # 模型推理 with torch.no_grad(): # 推理时不需要计算梯度 outputs model.generate( **inputs, max_new_tokensmax_tokens, do_sampleTrue, temperaturetemperature, pad_token_idtokenizer.eos_token_id ) # 解码输出 result tokenizer.decode(outputs, skip_special_tokensTrue) return {code: 200, prompt: prompt, response: result} # --- 3. 启动服务 --- if __name__ __main__: # 运行在 http://0.0.0.0:8000 uvicorn.run(app, host0.0.0.0, port8000)启动服务后你可以访问http://localhost:8000/docs查看自动生成的交互式 API 文档并直接进行测试。 第三步使用基础推理示例在微调或部署之后你也可以直接用Transformers库加载模型进行简单的推理感受模型的能力。pythonfrom transformers import AutoTokenizer, AutoModelForCausalLM import torch # --- 1. 加载模型 --- model_name Qwen/Qwen2.5-7B-Instruct tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) # 使用 8-bit 加载降低显存门槛 model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, load_in_8bitTrue, trust_remote_codeTrue ).eval() # --- 2. 构建对话 --- messages [ {role: system, content: 你是一个专业的AI助手。}, {role: user, content: 请介绍一下大模型量化技术。} ] # 应用模型的对话模板 text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) model_inputs tokenizer([text], return_tensorspt).to(cuda) # --- 3. 生成回复 --- generated_ids model.generate(**model_inputs, max_new_tokens512) # 截取新生成的部分 output_ids generated_ids[len(model_inputs.input_ids):] response tokenizer.decode(output_ids, skip_special_tokensTrue) print(response)通过以上三个步骤你就完成了从模型再训练、服务部署到最终使用的完整闭环。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564257.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!