
随着大型语言模型(LLM)技术的迅速发展,Hugging Face的Transformers库已经成为LLM开发和应用的标准工具包。作为一个开源的深度学习库,Transformers提供了丰富的预训练模型、统一的接口设计以及强大的生态系统,使得研究人员和开发者能够便捷地构建、训练和部署各类语言模型。2025年,Transformers库已经发展到5.x系列,不仅支持最新的GPU架构和量化技术,还提供了更完善的分布式训练能力和内存优化方案。
本文将深入探讨Transformers库的高级用法,重点关注模型加载与配置优化两大核心主题。我们将从基础概念出发,逐步深入到高级技术细节,并结合2025年的最新实践,为读者提供全面的Transformers库应用指南。通过本文的学习,读者将能够掌握如何高效加载大型语言模型、优化配置参数、节省内存占用、提升推理速度,以及实现分布式训练等关键技术。
在2025年,Transformers库已经形成了一个完整的技术生态系统,包括以下核心组件:
这些组件共同构成了一个完整的LLM开发流水线,从模型加载、训练到部署,为开发者提供了端到端的解决方案。
Transformers库采用了模块化的设计理念,通过几个核心类构建了完整的模型开发流程。理解这些核心类是掌握Transformers库的关键。
每个预训练模型都继承自以下三个基础类:
这三个基础类构成了Transformers库的骨架,所有具体的模型实现都是基于这三个类进行扩展和定制。
为了简化模型加载流程,Transformers库提供了自动加载机制,通过Auto系列类可以根据模型名称自动加载相应的模型、分词器和配置:
这种设计使得开发者可以使用统一的接口加载不同类型的模型,大大提高了代码的灵活性和可维护性。
Transformers库支持多种预训练模型架构,包括但不限于:
每种架构都有其独特的设计理念和适用场景,开发者需要根据具体任务选择合适的模型架构。
Transformers库使用Hugging Face Hub作为模型权重的中央存储库,开发者可以直接从Hub加载预训练权重,也可以将自定义权重上传到Hub。模型权重通常以以下几种格式存储:
在加载大型模型时,Transformers库提供了多种优化策略,如分块加载、内存映射等,以减少内存占用和加快加载速度。
加载预训练模型的基本流程如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("model_name")
# 加载模型
model = AutoModelForCausalLM.from_pretrained("model_name")在这个过程中,Transformers库会自动处理以下步骤:
对于已经下载到本地的模型,可以通过指定本地路径加载:
model = AutoModelForCausalLM.from_pretrained("/path/to/local/model")这在没有网络连接或者需要使用自定义模型时非常有用。
随着模型规模的不断增大,内存优化加载变得越来越重要。Transformers库提供了多种内存优化加载策略,帮助开发者在有限的硬件资源上加载和运行大型模型。
1. low_cpu_mem_usage=True
这个选项可以显著减少加载模型时的CPU内存占用:
model = AutoModelForCausalLM.from_pretrained("model_name", low_cpu_mem_usage=True)当设置为True时,模型会以分块的方式加载权重,而不是一次性将所有权重加载到内存中,这对于大型模型尤为重要。
2. device_map="auto"
自动设备映射功能可以将模型的不同层自动分配到可用的设备上(CPU、GPU等):
model = AutoModelForCausalLM.from_pretrained("model_name", device_map="auto")这对于多GPU环境或者内存有限的GPU特别有用,可以实现模型的分布式存储。
3. torch_dtype 指定数据类型
通过指定数据类型,可以减少模型的内存占用:
import torch
model = AutoModelForCausalLM.from_pretrained("model_name", torch_dtype=torch.bfloat16)2025年,bfloat16(BF16)和float16(FP16)已经成为LLM训练和推理的常用数据类型,它们可以在保证模型性能的同时,将内存占用减少一半。
量化是减少模型内存占用和加速推理的有效方法。Transformers库支持多种量化技术,包括:
1. 内置量化
Transformers库5.x系列内置了对GPTQ、AWQ等量化方法的支持:
model = AutoModelForCausalLM.from_pretrained(
"model_name",
load_in_4bit=True, # 4位量化
bnb_4bit_compute_dtype=torch.float16 # 计算时使用的精度
)2. 预量化模型加载
对于已经量化好的模型,可以直接加载使用:
model = AutoModelForCausalLM.from_pretrained(
"TheBloke/Llama-2-7B-GPTQ",
device_map="auto",
trust_remote_code=False,
revision="main"
)3. AWQ量化加载
AWQ(Activation-aware Weight Quantization)是2025年流行的一种量化技术,特别适合在低显存GPU上运行大型模型:
model = AutoModelForCausalLM.from_pretrained(
"model_name",
load_in_awq=True,
device_map="auto"
)这些量化技术可以将模型的内存占用减少70%-80%,同时保持较高的模型性能。
对于超大规模模型(如70B、175B参数),单卡加载往往不现实,需要使用分布式加载技术。
模型并行(Model Parallelism)是将模型的不同层分配到不同的设备上:
model = AutoModelForCausalLM.from_pretrained(
"model_name",
device_map="auto",
torch_dtype=torch.bfloat16
)当设置device_map="auto"时,Transformers库会自动使用accelerate库进行模型并行。
张量并行(Tensor Parallelism)是将单个层的参数分散到多个设备上:
from accelerate import init_empty_weights
with init_empty_weights():
model = AutoModelForCausalLM.from_pretrained(
"model_name",
torch_dtype=torch.bfloat16
)
# 使用张量并行策略
from accelerate import load_checkpoint_and_dispatch
model = load_checkpoint_and_dispatch(
model,
checkpoint="model_name",
device_map="auto",
no_split_module_classes=["LlamaDecoderLayer"]
)流水线并行(Pipeline Parallelism)是将模型分为多个阶段,每个阶段在不同的设备上执行:
# 使用accelerate配置流水线并行
from accelerate import Accelerator
accelerator = Accelerator(
mixed_precision="bf16",
device_placement=True,
split_batches=True
)
model = accelerator.prepare(model)2025年,结合模型并行、张量并行和流水线并行的混合并行策略已经成为加载超大模型的标准做法。
在某些情况下,我们可能需要修改模型的权重后再加载:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 加载模型配置
config = AutoConfig.from_pretrained("model_name")
# 修改配置
config.hidden_size = 1024
# 根据修改后的配置初始化模型
with init_empty_weights():
model = AutoModelForCausalLM.from_config(config)
# 加载部分权重
model = load_checkpoint_and_dispatch(
model,
checkpoint="model_name",
device_map="auto"
)对于自定义的模型架构,可以通过以下方式加载:
from transformers import AutoConfig, AutoModelForCausalLM
import torch.nn as nn
# 定义自定义模型类
class CustomLLM(nn.Module):
def __init__(self, config):
super().__init__()
# 自定义模型实现
pass
# 注册自定义模型
AutoModelForCausalLM.register(AutoConfig, CustomLLM)
# 加载自定义模型
model = AutoModelForCausalLM.from_pretrained("custom_model_path")模型配置文件包含了模型的所有超参数和架构信息,是理解和优化模型的关键。一个典型的配置文件包含以下内容:
{
"architectures": ["LlamaForCausalLM"],
"bos_token_id": 1,
"eos_token_id": 2,
"hidden_act": "silu",
"hidden_size": 4096,
"initializer_range": 0.02,
"intermediate_size": 11008,
"max_position_embeddings": 4096,
"model_type": "llama",
"num_attention_heads": 32,
"num_hidden_layers": 32,
"pad_token_id": 0,
"rms_norm_eps": 1e-06,
"tie_word_embeddings": false,
"torch_dtype": "float16",
"vocab_size": 32000
}了解这些配置参数的含义,可以帮助我们更好地优化模型性能。
以下是一些关键的配置参数及其优化建议:
批处理是提高推理效率的重要方法,但需要合理配置以避免内存溢出:
# 批处理参数优化
batch_size = 4
torch.backends.cudnn.benchmark = True # 启用cudnn基准测试,自动选择最佳算法
# 动态批处理
input_ids_list = [tokenizer.encode(text, return_tensors="pt") for text in texts]
# 计算最大长度
max_len = max([x.shape[1] for x in input_ids_list])
# 填充到相同长度
padded_inputs = [torch.cat([x, torch.zeros(1, max_len - x.shape[1], dtype=torch.long)], dim=1) for x in input_ids_list]
# 堆叠成批次
batch_inputs = torch.cat(padded_inputs, dim=0)
# 推理
outputs = model.generate(batch_inputs, max_new_tokens=50)生成参数对推理质量和速度有重要影响:
def optimized_generate(prompt, max_new_tokens=100):
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 使用缓存优化重复计算
with torch.no_grad(): # 禁用梯度计算
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
do_sample=True, # 使用采样而不是贪婪解码
temperature=0.7, # 控制输出的随机性
top_k=50, # 只考虑概率最高的k个token
top_p=0.9, # 只考虑累积概率超过p的token
use_cache=True, # 使用KV缓存加速推理
pad_token_id=tokenizer.eos_token_id, # 避免生成重复的eos token
num_return_sequences=1, # 返回一个序列
repetition_penalty=1.1 # 惩罚重复的token
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)2025年,使用缓存(use_cache=True)和量化技术已经成为推理优化的标准做法。
在训练过程中,梯度累积和混合精度训练是常用的内存优化技术:
from torch.cuda.amp import autocast, GradScaler
# 混合精度训练
scaler = GradScaler()
# 梯度累积
gradient_accumulation_steps = 4
epochs = 10
total_steps = len(dataloader) * epochs // gradient_accumulation_steps
optimizer.zero_grad()
for step, batch in enumerate(dataloader):
with autocast():
outputs = model(**batch)
loss = outputs.loss / gradient_accumulation_steps
scaler.scale(loss).backward()
# 累积梯度后更新
if (step + 1) % gradient_accumulation_steps == 0:
scaler.unscale_(optimizer)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()内存泄漏是LLM开发中常见的问题,特别是在长时间运行的服务中。以下是一些检测和处理内存泄漏的方法:
# 定期清理缓存
def cleanup_cache():
torch.cuda.empty_cache()
gc.collect()
# 监控内存使用
def monitor_memory():
allocated = torch.cuda.memory_allocated() / 1024**3
reserved = torch.cuda.memory_reserved() / 1024**3
print(f"Allocated: {allocated:.2f} GB, Reserved: {reserved:.2f} GB")
# 使用上下文管理器确保资源释放
class ModelInference:
def __init__(self, model_name):
self.model = None
self.tokenizer = None
self.model_name = model_name
def __enter__(self):
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
self.model = AutoModelForCausalLM.from_pretrained(
self.model_name,
torch_dtype=torch.bfloat16,
device_map="auto"
)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
del self.model
del self.tokenizer
cleanup_cache()
# 使用示例
with ModelInference("model_name") as inference:
# 进行推理
passAccelerate库提供了配置文件来简化分布式训练的设置:
# accelerate_config.yaml
compute_environment: LOCAL_MACHINE
distributed_type: MULTI_GPU
gpu_ids: all
machine_rank: 0
main_process_ip: null
main_process_port: null
main_training_function: main
mixed_precision: "bf16"
num_machines: 1
num_processes: 8
rdzv_backend: static
tpu_name: null
tpu_zone: null
trust_remote_code: false
use_cpu: false使用配置文件启动分布式训练:
accelerate launch --config_file accelerate_config.yaml training_script.py2025年,数据并行(DDP)和完全分片数据并行(FSDP)是主流的分布式训练策略:
# 使用Accelerate配置FSDP
from accelerate import Accelerator
accelerator = Accelerator(
mixed_precision="bf16",
fsdp="full_shard", # 完全分片
fsdp_transformer_layer_cls_to_wrap=["LlamaDecoderLayer"],
gradient_accumulation_steps=4
)
# 准备模型、优化器和数据加载器
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)FSDP特别适合训练超大模型,可以显著减少每个GPU的内存占用。
量化是减少内存占用和加速推理的有效方法。2025年,多种量化技术已经得到广泛应用:
1. GPTQ量化
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("TheBloke/Llama-2-7B-GPTQ")
model = AutoModelForCausalLM.from_pretrained(
"TheBloke/Llama-2-7B-GPTQ",
device_map="auto",
trust_remote_code=False,
revision="main"
)
# 进行推理
def generate_text(prompt, max_length=100):
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_length=max_length)
return tokenizer.decode(outputs[0], skip_special_tokens=True)2. AWQ量化
AWQ是一种激活感知的权重量化方法,在保持较高精度的同时,可以实现4位量化:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("model_name")
model = AutoModelForCausalLM.from_pretrained(
"model_name",
load_in_awq=True,
device_map="auto",
awq_config={"zero_point": True, "q_group_size": 128}
)3. FP8量化
FP8是NVIDIA最新GPU架构支持的量化格式,可以进一步提高推理速度:
# 使用FP8量化
model = AutoModelForCausalLM.from_pretrained(
"model_name",
torch_dtype=torch.float16,
device_map="auto",
attn_implementation="flash_attention_2", # 使用Flash Attention 2加速
fp8=True # 启用FP8量化
)注意力机制是Transformer模型的核心,优化注意力计算可以显著提升性能:
1. Flash Attention 2
model = AutoModelForCausalLM.from_pretrained(
"model_name",
attn_implementation="flash_attention_2", # 使用Flash Attention 2
torch_dtype=torch.bfloat16,
device_map="auto"
)Flash Attention 2可以减少内存访问并提高计算效率,特别适合长序列。
2. 稀疏注意力
对于特别长的序列,可以使用稀疏注意力来减少计算量:
from transformers import AutoConfig, AutoModelForCausalLM
# 配置稀疏注意力
config = AutoConfig.from_pretrained("model_name")
config.use_sparse_attention = True
config.sparse_attention_config = {
"block_size": 16,
"num_heads": 8
}
# 加载模型
model = AutoModelForCausalLM.from_config(config)混合精度训练使用FP16/BF16进行前向和反向传播,但使用FP32更新权重,可以在保持模型精度的同时提高训练速度:
# 使用Accelerate进行混合精度训练
from accelerate import Accelerator
accelerator = Accelerator(mixed_precision="bf16")
model, optimizer, train_dataloader = accelerator.prepare(
model, optimizer, train_dataloader
)
for epoch in range(num_epochs):
for batch in train_dataloader:
optimizer.zero_grad()
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()梯度检查点是一种以计算换内存的技术,可以显著减少训练过程中的内存占用:
# 启用梯度检查点
model.gradient_checkpointing_enable()
# 优化器设置
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5, fused=True)使用梯度检查点通常会增加15-20%的计算时间,但可以将内存占用减少50%以上,对于训练大模型非常有用。
单机多卡是最常见的分布式训练场景:
# 使用Accelerate进行单机多卡训练
from accelerate import Accelerator
import torch
from torch.utils.data import DataLoader
from transformers import AutoModelForCausalLM, AutoTokenizer, AdamW
# 初始化Accelerator
accelerator = Accelerator(
mixed_precision="bf16",
gradient_accumulation_steps=4
)
# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained("model_name")
tokenizer = AutoTokenizer.from_pretrained("model_name")
# 准备数据
# ...
dataloader = DataLoader(dataset, batch_size=4, shuffle=True)
# 准备优化器
optimizer = AdamW(model.parameters(), lr=5e-5)
# 加速准备
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
# 训练循环
for epoch in range(epochs):
for batch in dataloader:
optimizer.zero_grad()
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()对于超大规模模型,需要使用多机多卡训练:
# 使用Accelerate配置多机多卡
from accelerate import Accelerator
# 配置文件中设置
# distributed_type: MULTI_GPU
# num_machines: 2
# num_processes: 8 (假设每台机器4个GPU)
accelerator = Accelerator()
# 其他训练代码与单机多卡类似
# ...在多机环境中,还需要设置主进程的IP和端口,以便节点之间通信。
2025年,混合专家模型(MoE)已经成为大模型的重要架构,Transformers库提供了完善的支持:
# 加载MoE模型
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-MoE-14B",
torch_dtype=torch.bfloat16,
device_map="auto"
)最新的Qwen3-MoE模型引入了EPLB(Expert Performance Latency Balance)技术,可以在性能和延迟之间取得更好的平衡。
支持更长上下文的模型是2025年的重要趋势:
# 加载长上下文模型
model = AutoModelForCausalLM.from_pretrained(
"model_name",
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True # 通常长上下文模型需要加载自定义代码
)LMDeploy是2025年流行的大模型推理部署框架,最新的v0.9.0版本引入了分布式推理服务模块(Distserve):
# 使用LMDeploy进行分布式推理
from lmdeploy import pipeline
# 创建分布式推理管道
pipe = pipeline(
"model_name",
backend="distserve",
tensor_parallel_size=4, # 张量并行大小
pipeline_parallel_size=2 # 流水线并行大小
)
# 进行推理
response = pipe("你好,请介绍一下你自己。")Distserve支持跨节点和跨设备的分布式推理环境,可以显著提升大模型在多卡多机环境下的运行效率。
vLLM是另一个流行的推理优化框架,提供了极高的吞吐量:
from vllm import LLM, SamplingParams
# 初始化模型
llm = LLM(model="model_name", tensor_parallel_size=2)
# 设置采样参数
sampling_params = SamplingParams(temperature=0.7, top_p=0.95)
# 批量推理
prompts = ["你好,", "请介绍一下AI技术。", "如何学习编程?"]
outputs = llm.generate(prompts, sampling_params)
# 输出结果
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")vLLM使用PagedAttention技术优化注意力计算,可以将推理吞吐量提高10倍以上。
一个良好的LLM项目结构可以提高开发效率和代码可维护性:
my_llm_project/
├── configs/ # 配置文件
│ ├── model_config.yaml
│ └── training_config.yaml
├── data/ # 数据相关
│ ├── raw/
│ ├── processed/
│ └── dataloader.py
├── models/ # 模型定义
│ ├── custom_model.py
│ └── model_loader.py
├── train/ # 训练代码
│ ├── trainer.py
│ └── train.py
├── inference/ # 推理代码
│ ├── pipeline.py
│ └── api.py
├── utils/ # 工具函数
│ ├── memory_utils.py
│ └── logging_utils.py
├── scripts/ # 脚本
│ ├── preprocess.py
│ ├── train.sh
│ └── deploy.sh
├── requirements.txt
└── README.md在2025年,性能监控已经成为LLM开发的重要环节:
import torch
from pynvml import *
def get_gpu_info():
nvmlInit()
device_count = nvmlDeviceGetCount()
gpu_info = []
for i in range(device_count):
handle = nvmlDeviceGetHandleByIndex(i)
name = nvmlDeviceGetName(handle)
memory_info = nvmlDeviceGetMemoryInfo(handle)
utilization = nvmlDeviceGetUtilizationRates(handle)
gpu_info.append({
"index": i,
"name": name,
"memory_total": memory_info.total,
"memory_used": memory_info.used,
"memory_free": memory_info.free,
"gpu_utilization": utilization.gpu,
"memory_utilization": utilization.memory
})
nvmlShutdown()
return gpu_info
# 定期监控GPU状态
import time
for _ in range(10):
gpu_info = get_gpu_info()
for gpu in gpu_info:
print(f"GPU {gpu['index']} ({gpu['name']}): "
f"Memory: {gpu['memory_used']/1024**3:.2f}GB / {gpu['memory_total']/1024**3:.2f}GB, "
f"Utilization: {gpu['gpu_utilization']}%")
time.sleep(5)通过监控GPU状态,可以及时发现性能瓶颈并进行调优。
在这个案例中,我们将从零开始构建一个基于Transformers库的LLM应用,包括模型加载、配置优化、推理加速等关键步骤。
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# 安装必要的库
pip install -U transformers datasets evaluate accelerate torchfrom transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 选择模型
model_name = "meta-llama/Llama-2-7b-chat-hf" # 需要Hugging Face访问权限
# 优化加载配置
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16, # 使用BF16减少内存占用
device_map="auto", # 自动分配到可用设备
low_cpu_mem_usage=True, # 减少CPU内存使用
use_cache=True # 启用KV缓存
)
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_name)def generate_optimized(prompt, max_new_tokens=100):
# 输入处理
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 优化的生成参数
generation_config = {
"max_new_tokens": max_new_tokens,
"do_sample": True,
"temperature": 0.7,
"top_k": 50,
"top_p": 0.9,
"use_cache": True,
"pad_token_id": tokenizer.eos_token_id,
"repetition_penalty": 1.1
}
# 使用torch.no_grad()减少内存使用
with torch.no_grad():
outputs = model.generate(**inputs, **generation_config)
# 解码输出
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
return result
# 测试生成
prompt = "请解释什么是大型语言模型及其应用场景。"
response = generate_optimized(prompt, max_new_tokens=200)
print(response)# 使用4位量化加载模型
quantized_model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
device_map="auto"
)
# 使用量化模型进行推理
def generate_quantized(prompt, max_new_tokens=100):
inputs = tokenizer(prompt, return_tensors="pt").to(quantized_model.device)
with torch.no_grad():
outputs = quantized_model.generate(**inputs, max_new_tokens=max_new_tokens)
return tokenizer.decode(outputs[0], skip_special_tokens=True)def batch_generate(prompts, max_new_tokens=100):
# 编码所有提示
encoded_prompts = [tokenizer(prompt, return_tensors="pt") for prompt in prompts]
# 找出最大长度
max_length = max([x.input_ids.shape[1] for x in encoded_prompts])
# 填充到相同长度
input_ids = []
attention_masks = []
for enc in encoded_prompts:
pad_length = max_length - enc.input_ids.shape[1]
input_id = torch.cat([
enc.input_ids,
torch.full((1, pad_length), tokenizer.pad_token_id, dtype=torch.long)
], dim=1)
attention_mask = torch.cat([
enc.attention_mask,
torch.zeros((1, pad_length), dtype=torch.long)
], dim=1)
input_ids.append(input_id)
attention_masks.append(attention_mask)
# 堆叠成批次
batch_input_ids = torch.cat(input_ids, dim=0).to(model.device)
batch_attention_masks = torch.cat(attention_masks, dim=0).to(model.device)
# 批量推理
with torch.no_grad():
outputs = model.generate(
input_ids=batch_input_ids,
attention_mask=batch_attention_masks,
max_new_tokens=max_new_tokens
)
# 解码结果
results = []
for i, output in enumerate(outputs):
# 只获取新生成的部分
prompt_length = encoded_prompts[i].input_ids.shape[1]
generated = output[prompt_length:]
results.append(tokenizer.decode(generated, skip_special_tokens=True))
return results使用FastAPI部署模型服务:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
app = FastAPI(title="LLM Inference Service")
class PromptRequest(BaseModel):
prompt: str
max_new_tokens: int = 100
temperature: float = 0.7
class BatchPromptRequest(BaseModel):
prompts: list[str]
max_new_tokens: int = 100
temperature: float = 0.7
@app.post("/generate")
async def generate(request: PromptRequest):
try:
# 设置生成参数
generation_config = {
"max_new_tokens": request.max_new_tokens,
"temperature": request.temperature,
"do_sample": True,
"top_k": 50,
"top_p": 0.9
}
# 处理输入
inputs = tokenizer(request.prompt, return_tensors="pt").to(model.device)
# 生成响应
with torch.no_grad():
outputs = model.generate(**inputs, **generation_config)
# 解码输出
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return {"prompt": request.prompt, "response": response}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# 启动服务
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)本文深入探讨了Transformers库的高级用法,重点关注模型加载与配置优化两大核心主题。通过学习本文,读者应该能够掌握以下关键技能:
Transformers库作为LLM开发的标准工具包,其重要性不言而喻。通过合理使用本文介绍的技术和方法,开发者可以更加高效地构建、训练和部署大型语言模型应用,充分发挥大模型的潜力。
随着技术的不断发展,Transformers库和LLM生态将继续完善,为AI应用开发带来更多可能性。建议开发者保持学习的热情,不断跟进最新技术进展,将理论知识与实践相结合,开发出更优秀的AI应用。