人工智能大模型部署与工程化落地实战
大模型部署涵盖需求分析、硬件选型、软件配置、模型优化及框架实战。内容详解量化、剪枝、蒸馏等优化技术,对比 FastAPI、TorchServe、TensorFlow Serving 及 Kubernetes 部署方案。包含服务监控指标设计、性能调优策略、版本控制与合规风险控制,并通过 10B 参数 LLM 集群部署案例验证全流程有效性,为不同场景提供工程化实践指南。

大模型部署涵盖需求分析、硬件选型、软件配置、模型优化及框架实战。内容详解量化、剪枝、蒸馏等优化技术,对比 FastAPI、TorchServe、TensorFlow Serving 及 Kubernetes 部署方案。包含服务监控指标设计、性能调优策略、版本控制与合规风险控制,并通过 10B 参数 LLM 集群部署案例验证全流程有效性,为不同场景提供工程化实践指南。

在部署大模型前,必须先明确业务需求与应用场景,这是后续资源配置、模型优化与部署方案选择的基础。不同场景对模型的性能、响应速度、并发量、成本预算的要求差异显著,直接决定了部署方案的设计方向。
性能需求:模型的推理精度要求(如文本生成的连贯性、图像识别的准确率),是否需要达到预训练模型的全精度效果,还是可接受一定程度的精度损失以换取性能提升。
响应速度需求:单次请求的延迟阈值(如实时对话场景要求延迟≤500ms,批量处理场景可放宽至 10s),这直接影响硬件选型与模型优化策略。
并发量需求:峰值并发用户数(如电商客服高峰期并发量 1000+,企业内部工具并发量 100-),决定了部署架构是单机还是集群,是否需要负载均衡。
成本预算:硬件采购、云服务器租赁、带宽消耗等成本限制,需在性能与成本之间寻找平衡点。
| 应用场景 | 精度要求 | 延迟要求 | 并发量 | 成本敏感度 | 部署模式推荐 |
|---|---|---|---|---|---|
| 实时智能对话 | 中高 | ≤500ms | 高(1000+) | 中 | 云原生集群部署 |
| 文档批量处理 | 中 | ≤10s | 低(100-) | 低 | 单机/分布式部署 |
| 自动驾驶感知 | 高 | ≤100ms | 中(500+) | 低 | 边缘计算+GPU 部署 |
| 中小企业内部工具 | 中低 | ≤3s | 低(50-) | 高 | 轻量模型 + 云服务器 |
| AI 绘画生成 | 中高 | ≤2s | 高(2000+) | 中 | 混合云集群部署 |
大模型的推理过程对硬件资源要求极高,尤其是 GPU 的算力、显存容量,直接决定了模型能否正常运行及运行效率。需根据模型规模(参数量)、输入输出长度、并发量需求选择合适的硬件。
算力:以 GPU 的 TFLOPS(每秒万亿次浮点运算)为核心指标,FP16(半精度)、FP32(单精度)算力需匹配模型推理需求。大模型(如 10B+ 参数量)优先选择 A100、H100 等高端 GPU,中小模型(1B 以下)可选择 T4、A10 等性价比型号。
显存容量:需容纳模型权重、中间计算结果及批量输入数据,显存不足会导致模型加载失败或推理报错。一般来说,显存容量需≥模型权重占用空间的 1.5-2 倍(FP16 精度下,1B 参数量约占用 2GB 显存)。
CPU 与内存:CPU 主要负责数据预处理、请求分发等辅助任务,内存需容纳操作系统、部署框架及批量数据缓存。推荐配置:CPU≥16 核(Intel Xeon 或 AMD EPYC),内存≥64GB(若为多卡部署,内存≥128GB)。
存储与带宽:存储需满足模型文件(10B 模型约 20GB,175B 模型约 350GB)、日志数据的存储需求,推荐使用 SSD(读写速度≥2GB/s)以加快模型加载速度;网络带宽需匹配并发请求的数据传输需求,集群部署时推荐 RDMA 高速网络(带宽≥100Gbps)。
| 模型参数量 | 推荐 GPU 型号 | 显存要求 | CPU 配置 | 内存要求 | 适用部署模式 |
|---|---|---|---|---|---|
| <1B | T4、P40、RTX 3090 | ≥8GB | 16 核 Xeon | ≥32GB | 单机部署 |
| 1B-10B | A10、RTX 4090、A30 | ≥24GB | 24 核 Xeon | ≥64GB | 单机/小规模集群 |
| 10B-100B | A100 40GB/80GB、H100 | ≥40GB | 32 核 Xeon | ≥128GB | 集群部署 |
| >100B | 8×A100 80GB、H100 集群 | ≥320GB | 64 核+ Xeon | ≥256GB | 大规模集群部署 |
注意:硬件选型需预留一定冗余,避免峰值负载时资源不足;若采用云服务器,可选择弹性伸缩配置,根据实际并发量动态调整资源。
软件环境的兼容性直接影响部署流程的顺畅度与模型的运行稳定性,需统一配置操作系统、Python 环境、深度学习框架及依赖库版本。
推荐使用 Linux 系统(如 Ubuntu 20.04/22.04、CentOS 7/8),其对 GPU 驱动、深度学习框架的兼容性更好,且支持多线程、集群部署等功能。不推荐 Windows 系统(部分部署框架与 GPU 驱动兼容性较差)。
GPU 驱动安装:根据 GPU 型号安装对应版本的 NVIDIA 驱动(推荐≥510.x 版本),需支持 CUDA 11.0+(大部分主流大模型依赖)。 安装命令(Ubuntu):
# 添加 NVIDIA 驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# 安装驱动(替换为对应版本)
sudo apt install nvidia-driver-535
# 验证安装
nvidia-smi
CUDA 与 CuDNN 配置:CUDA 是 GPU 加速计算的核心工具包,CuDNN 是深度学习优化库,需与 GPU 驱动、深度学习框架版本匹配。
# 验证 CUDA 版本
nvcc -V
# 验证 CuDNN 可用性
python -c "import torch; print(torch.backends.cudnn.version())"
Python 环境与依赖库安装:推荐使用 Python 3.8-3.10,通过 conda 创建独立环境,避免依赖冲突。 核心依赖库:
# 创建 conda 环境
conda create -n llm-deploy python=3.9
conda activate llm-deploy
# 安装深度学习框架(二选一,根据模型训练框架)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
# 或
# pip install tensorflow==2.12.0
# 安装部署相关库
pip install fastapi uvicorn gunicorn transformers sentencepiece accelerate
# 监控相关
pip install prometheus-client
# 数据处理
pip install pyarrow
注意:所有依赖库的版本需提前验证兼容性,可参考模型官方文档的推荐版本(如 Hugging Face 模型卡片中的 requirements)。
大模型(尤其是 10B+ 参数量)的原始版本通常存在显存占用高、推理速度慢、并发能力弱等问题,直接部署难以满足实际应用需求。需通过模型优化技术,在保证精度损失可控的前提下,降低显存占用、提升推理速度。
量化是将模型权重、激活值从高精度(如 FP32、FP16)转换为低精度(如 INT8、INT4)的技术,可大幅减少显存占用和计算量,提升推理速度(通常可提升 2-4 倍),且精度损失较小(一般≤3%)。
| 量化类型 | 精度转换 | 显存占用降低比例 | 精度损失 | 适用场景 |
|---|---|---|---|---|
| FP16 量化 | FP32 → FP16 | 50% | 几乎无 | 显存不足但需保证高精度 |
| INT8 量化 | FP32 → INT8 | 75% | 1-3% | 大部分场景(对话、生成) |
| INT4 量化 | FP32 → INT4 | 87.5% | 3-5% | 边缘设备、高并发场景 |
以 7B 参数量的 LLaMA 2 模型为例,使用 transformers 库的 BitsAndBytesConfig 实现 INT8 量化:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
# 配置 INT8 量化参数
bnb_config = BitsAndBytesConfig(
load_in_8bit=True,
bnb_8bit_use_double_quant=True,
bnb_8bit_quant_type="nf4",
bnb_8bit_compute_dtype=torch.float16
)
# 加载量化后的模型
model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
# 验证量化效果
print(f"模型设备:{model.device}")
print(f"模型参数量:{model.num_parameters()/1e9:.2f}B")
# 推理测试
inputs = tokenizer("请介绍人工智能大模型的部署流程", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
技巧:量化后的模型推理速度可通过 torch.backends.cudnn.benchmark = True 进一步优化,开启 GPU 计算优化。
需从显存占用、推理速度、精度三个维度验证量化效果:
import time
import torch
# 显存占用测试(量化前 vs 量化后)
def test_memory_usage(model, inputs):
torch.cuda.empty_cache()
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=200)
memory_used = torch.cuda.max_memory_allocated() / 1024**3
return memory_used
# 推理速度测试
def test_inference_speed(model, inputs, repeat=10):
torch.cuda.empty_cache()
total_time = 0
with torch.no_grad():
for _ in range(repeat):
start = time.time()
outputs = model.generate(**inputs, max_new_tokens=200)
total_time += time.time() - start
avg_time = total_time / repeat
return avg_time
# 测试结果对比(示例)
# 量化前(FP16):显存占用~14GB,平均推理时间~1.8s
# 量化后(INT8):显存占用~4GB,平均推理时间~0.6s
剪枝是去除模型中冗余的权重参数(如接近 0 的权重),减少模型参数量和计算量,同时保持模型精度。适用于参数量过大、计算资源有限的场景(如边缘设备部署)。
以 BERT 模型的注意力头剪枝为例:
import torch
from transformers import BertModel, BertTokenizer
from torchprune import Pruner
# 加载预训练模型
model_name = "bert-base-chinese"
model = BertModel.from_pretrained(model_name)
tokenizer = BertTokenizer.from_pretrained(model_name)
# 配置剪枝器(剪枝 20% 的注意力头)
pruner = Pruner(
model,
pruning_rate=0.2,
pruning_type="structured",
target_modules=["attention.self"],
metric="l1_norm"
)
# 剪枝并微调(避免精度损失)
# 1. 剪枝
pruned_model = pruner.prune()
# 2. 微调(使用任务数据集,如文本分类数据集)
# 此处省略微调代码(需加载任务数据,训练 3-5 个 epoch)
pruned_model.save_pretrained("./pruned_bert_model")
# 验证剪枝效果
print(f"原始模型参数量:{model.num_parameters()/1e6:.2f}M")
print(f"剪枝后模型参数量:{pruned_model.num_parameters()/1e6:.2f}M")
# 推理测试
inputs = tokenizer("人工智能剪枝技术", return_tensors="pt")
outputs = pruned_model(**inputs)
print(f"输出维度:{outputs.last_hidden_state.shape}")
注意:剪枝后需进行微调,否则可能导致精度大幅下降;剪枝比例需根据模型和任务调整,一般建议不超过 40%。
蒸馏是通过'教师模型'(大模型,高精度)指导'学生模型'(小模型,高效率)训练,使小模型在保持接近大模型精度的同时,具备更快的推理速度和更低的资源占用。适用于需要平衡精度与效率的场景(如移动端、嵌入式设备)。
以 LLaMA 2 7B(教师模型)蒸馏到 DistilLLaMA 1.3B(学生模型)为例:
from transformers import (
AutoModelForCausalLM, AutoTokenizer, DataCollatorForLanguageModeling,
TrainingArguments, Trainer
)
import torch.nn as nn
# 加载教师模型和学生模型
teacher_model_name = "meta-llama/Llama-2-7b-chat-hf"
student_model_name = "distilbert/distilllama-1.3b"
teacher_tokenizer = AutoTokenizer.from_pretrained(teacher_model_name)
teacher_model = AutoModelForCausalLM.from_pretrained(teacher_model_name).to("cuda:0")
student_tokenizer = AutoTokenizer.from_pretrained(student_model_name)
student_model = AutoModelForCausalLM.from_pretrained(student_model_name).to("cuda:0")
# 准备蒸馏数据集(示例:使用教师模型生成文本作为训练数据)
def generate_distillation_data(teacher_model, tokenizer, num_samples=1000):
prompts = [
"请解释量子计算的基本原理",
"如何提升深度学习模型的泛化能力",
"介绍区块链技术的应用场景"
]
data = []
for _ in range(num_samples):
prompt = prompts[_ % len(prompts)]
inputs = tokenizer(prompt, return_tensors="pt").to(teacher_model.device)
outputs = teacher_model.generate(**inputs, max_new_tokens=300, do_sample=True)
text = tokenizer.decode(outputs[0], skip_special_tokens=True)
data.append(text)
return data
distillation_data = generate_distillation_data(teacher_model, teacher_tokenizer)
# 数据预处理
def preprocess_function(examples):
return student_tokenizer(examples, truncation=True, max_length=512, return_special_tokens_mask=True)
from datasets import Dataset
dataset = Dataset.from_dict({: distillation_data})
tokenized_dataset = dataset.(preprocess_function, batched=)
data_collator = DataCollatorForLanguageModeling(tokenizer=student_tokenizer, mlm=)
(nn.Module):
():
().__init__()
.temperature = temperature
.ce_loss = nn.CrossEntropyLoss()
():
kl_loss = nn.functional.kl_div(
nn.functional.log_softmax(student_logits / .temperature, dim=-),
nn.functional.softmax(teacher_logits / .temperature, dim=-),
reduction=
) * (.temperature ** )
task_loss = .ce_loss(student_logits.view(-, student_logits.size(-)), labels.view(-))
* kl_loss + * task_loss
training_args = TrainingArguments(
output_dir=,
overwrite_output_dir=,
num_train_epochs=,
per_device_train_batch_size=,
learning_rate=,
logging_steps=,
save_steps=,
fp16=
)
():
():
labels = inputs.pop()
student_outputs = model(**inputs)
student_logits = student_outputs.logits
torch.no_grad():
teacher_outputs = teacher_model(**inputs)
teacher_logits = teacher_outputs.logits
loss_fn = DistillationLoss(temperature=)
loss = loss_fn(student_logits, teacher_logits, labels)
(loss, student_outputs) return_outputs loss
trainer = DistillationTrainer(
model=student_model,
args=training_args,
train_dataset=tokenized_dataset,
data_collator=data_collator,
)
trainer.train()
student_model.save_pretrained()
student_tokenizer.save_pretrained()
技巧:蒸馏温度(temperature)控制教师模型输出分布的平滑程度,一般取值 1.0-4.0,温度越高,分布越平滑,学生模型越容易学习。
| 优化技术 | 显存降低效果 | 速度提升效果 | 精度损失 | 实施难度 | 适用场景 |
|---|---|---|---|---|---|
| 量化 | 高(40%-80%) | 中高(2-4 倍) | 低(1-5%) | 低 | 大部分部署场景(优先选择) |
| 剪枝 | 中(30%-60%) | 中(1.5-3 倍) | 中(3-8%) | 中 | 边缘设备、资源极度有限场景 |
| 蒸馏 | 高(60%-90%) | 高(3-5 倍) | 中(5-10%) | 高 | 移动端、嵌入式设备、高并发场景 |
选择建议:
根据部署规模(单机/集群)、应用场景(实时/批量)、技术栈(PyTorch/TensorFlow)的不同,需选择合适的部署框架。本节重点介绍 4 种主流框架的实战流程:FastAPI(轻量实时部署)、TorchServe(PyTorch 模型专用)、TensorFlow Serving(TensorFlow 模型专用)、Kubernetes(云原生集群部署)。
FastAPI 是一款高性能的 Python API 框架,支持异步请求,部署流程简单,适合中小规模模型(≤10B 参数量)的实时推理服务。
from fastapi import FastAPI, Request, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
app = FastAPI(title="LLaMA 2 实时推理服务", version="1.0")
# 配置跨域(允许前端调用)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class InferenceRequest(BaseModel):
prompt: str
max_new_tokens: int = 200
temperature: float = 0.7
top_p: float = 0.9
@app.on_event("startup")
async def load_model():
global model, tokenizer
bnb_config = BitsAndBytesConfig(
load_in_8bit=True,
bnb_8bit_use_double_quant=True,
bnb_8bit_quant_type="nf4",
bnb_8bit_compute_dtype=torch.float16
)
model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
model.eval()
@app.post("/inference", summary=)
():
:
inputs = tokenizer(
request.prompt,
return_tensors=,
truncation=,
max_length=
).to(model.device)
torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=request.max_new_tokens,
temperature=request.temperature,
top_p=request.top_p,
do_sample=,
num_return_sequences=,
pad_token_id=tokenizer.eos_token_id
)
result = tokenizer.decode(outputs[], skip_special_tokens=)
{
: request.prompt,
: result,
:
}
Exception e:
HTTPException(status_code=, detail=)
():
{: , : }
# 单机部署,4 个工作进程,绑定 8000 端口
gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app
安装依赖:
pip install fastapi uvicorn gunicorn
{"prompt":"请介绍 FastAPI 部署大模型的优势","result":"FastAPI 部署大模型具有以下核心优势:1. 高性能...","status":"success"}
curl 命令:
curl -X POST http://localhost:8000/inference \
-H "Content-Type: application/json" \
-d '{ "prompt": "请介绍 FastAPI 部署大模型的优势", "max_new_tokens": 300, "temperature": 0.6 }'
async def 定义接口,提升并发处理能力。TorchServe 是 PyTorch 官方推出的部署框架,支持模型管理、批量推理、A/B 测试等功能,适合 PyTorch 训练的大模型部署,兼容性好、功能完善。
模型打包:将 PyTorch 模型转换为 TorchServe 支持的.mar 格式。 打包模型(将模型文件、Tokenizer、handler.py 打包为.mar):
torch-model-archiver --model-name llama2-7b --version 1.0 \
--model-file ./model_config.py --serialized-file ./pytorch_model.bin \
--handler ./handler.py --extra-files "./tokenizer_config.json,./vocab.json,./merges.txt" \
--export-path ./model_store
(注:需先将 LLaMA 2 模型文件下载到本地目录,包括 pytorch_model.bin、tokenizer_config.json 等)
编写模型处理脚本(handler.py):
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from ts.torch_handler.base_handler import BaseHandler
class LLMHandler(BaseHandler):
def initialize(self, context):
properties = context.system_properties
model_dir = properties.get("model_dir")
bnb_config = BitsAndBytesConfig(
load_in_8bit=True,
bnb_8bit_use_double_quant=True,
bnb_8bit_quant_type="nf4",
bnb_8bit_compute_dtype=torch.float16
)
self.tokenizer = AutoTokenizer.from_pretrained(model_dir)
self.model = AutoModelForCausalLM.from_pretrained(
model_dir,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
self.model.eval()
def preprocess(self, data):
prompts = []
for item in data:
if "body" in item:
prompts.append(item["body"]["prompt"])
else:
prompts.append(item.get("prompt", ""))
return prompts
def inference(self, data, *args, **kwargs):
inputs = self.tokenizer(
data,
return_tensors="pt",
truncation=True,
max_length=,
padding=
).to(.model.device)
torch.no_grad():
outputs = .model.generate(
**inputs,
max_new_tokens=,
temperature=,
top_p=,
do_sample=
)
results = .tokenizer.batch_decode(outputs, skip_special_tokens=)
results
():
[{: output} output inference_output]
安装 TorchServe:
pip install torchserve torch-model-archiver
启动 TorchServe 服务:
# 启动服务,指定模型存储目录和端口
torchserve --start --model-store ./model_store --models llama2-7b=llama2-7b.mar --port 8080 --management-port 8081
接口测试:
{"prompt":"请解释 TorchServe 的核心功能"}
TensorFlow Serving 是 TensorFlow 官方部署框架,支持模型热更新、高并发、低延迟,适合 TensorFlow/Keras 训练的大模型(如 T5、BERT 等)部署。
import tensorflow as tf
from transformers import TFAutoModelForSeq2SeqLM, AutoTokenizer
model_name = "t5-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = TFAutoModelForSeq2SeqLM.from_pretrained(model_name)
@tf.function(input_signature=[tf.TensorSpec(shape=(None,), dtype=tf.string, name="prompt")])
def serving_fn(prompt):
inputs = tokenizer(
prompt.numpy().decode("utf-8") if prompt.shape[0] == 1 else [x.decode("utf-8") for x in prompt.numpy()],
return_tensors="tf",
truncation=True,
max_length=512,
padding=True
)
outputs = model.generate(
inputs["input_ids"],
attention_mask=inputs["attention_mask"],
max_new_tokens=200,
temperature=0.7
)
results = tokenizer.batch_decode(outputs, skip_special_tokens=True)
return tf.convert_to_tensor(results, dtype=tf.string, name="output")
export_dir = "./t5-savedmodel/1"
tf.saved_model.save(model, export_dir, signatures={"serving_default": serving_fn})
使用 Docker 启动 TensorFlow Serving(推荐,避免环境配置麻烦):
# 拉取 TensorFlow Serving 镜像
docker pull tensorflow/serving:latest-gpu
# 启动容器(GPU 版本)
docker run -p 8501:8501 -p 8500:8500 \
--gpus all \
-v $(pwd)/t5-savedmodel:/models/t5-model \
-e MODEL_NAME=t5-model \
-t tensorflow/serving:latest-gpu
接口测试: 预期响应:
{"outputs":"人工智能部署非常重要。"}
REST API 测试:
curl -X POST http://localhost:8501/v1/models/t5-model:predict \
-H "Content-Type: application/json" \
-d '{ "inputs": "translate English to Chinese: Artificial intelligence deployment is very important." }'
对于高并发、高可用的生产环境,需采用 Kubernetes(K8s)进行集群部署,支持弹性伸缩、负载均衡、故障自动恢复等功能,结合 Docker 容器化技术,实现大模型服务的规模化部署。
docker tag llm-deploy:v1.0 my-harbor.com/ai/llm-deploy:v1.0
docker push my-harbor.com/ai/llm-deploy:v1.0
构建镜像:
docker build -t llm-deploy:v1.0 .
编写 Dockerfile:# 基础镜像(含 GPU 驱动和 CUDA)
FROM nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
# 设置工作目录
WORKDIR /app
# 安装依赖
RUN apt-get update && apt-get install -y \
python3-pip \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
# 复制服务代码和模型文件
COPY main.py .
COPY ./distilled_llama_model /app/model
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "main:app"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-deployment
namespace: ai-service
spec:
replicas: 3
selector:
matchLabels:
app: llm-service
template:
metadata:
labels:
app: llm-service
spec:
containers:
- name: llm-container
image: my-harbor.com/ai/llm-deploy:v1.0
resources:
limits:
nvidia.com/gpu: 1
cpu: "16"
memory: "64Gi"
requests:
nvidia.com/gpu: 1
cpu: "8"
memory: "32Gi"
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds:
应用 K8s 配置:
kubectl create namespace ai-service
kubectl apply -f llm-pvc.yaml
kubectl apply -f llm-deployment.yaml
kubectl get pods -n ai-service
kubectl get svc -n ai-service
访问服务: 通过外部 IP 访问推理接口:
curl -X POST http://<external-ip>/inference \
-H "Content-Type: application/json" \
-d '{"prompt": "介绍 K8s 部署大模型的优势"}'
查看 Service 的外部 IP:
kubectl get svc llm-service -n ai-service
大模型服务的监控是保障稳定运行的关键,需实时跟踪硬件资源、服务性能、模型精度等指标,及时发现异常并处理。
| 指标类型 | 具体指标 | 监控工具推荐 | 阈值建议 |
|---|---|---|---|
| 硬件资源指标 | GPU 使用率、GPU 显存使用率 | nvidia-smi、Prometheus | 使用率≥90% 告警 |
| CPU 使用率、内存使用率 | Prometheus、Grafana | CPU≥80%、内存≥85% 告警 | |
| 磁盘 IO、网络带宽 | Prometheus | 磁盘 IO≥100MB/s 告警 | |
| 服务性能指标 | 接口响应时间(P95/P99) | Prometheus、Jaeger | P95≥1s 告警 |
| 并发请求数、请求成功率 | Prometheus | 成功率<99.9% 告警 | |
| 队列长度(等待处理的请求数) | Prometheus | 队列长度≥50 告警 | |
| 模型精度指标 | 推理准确率、输出连贯性评分 | 自定义脚本、A/B 测试 | 准确率下降≥5% 告警 |
from prometheus_client import Counter, Gauge, Histogram, generate_latest, CONTENT_TYPE_LATEST
from fastapi import FastAPI, Request
from fastapi.responses import Response
REQUEST_COUNT = Counter("llm_request_count", "总请求数", ["status"])
REQUEST_LATENCY = Histogram("llm_request_latency_seconds", "请求响应时间", buckets=[0.1, 0.5, 1, 2, 5])
GPU_MEM_USAGE = Gauge("llm_gpu_mem_usage_gb", "GPU 显存使用率")
CPU_USAGE = Gauge("llm_cpu_usage_percent", "CPU 使用率")
@app.get("/metrics", summary="监控指标接口")
async def metrics():
gpu_mem = torch.cuda.max_memory_allocated() / 1024**3
GPU_MEM_USAGE.set(gpu_mem)
import psutil
cpu_usage = psutil.cpu_percent()
CPU_USAGE.set(cpu_usage)
return Response(content=generate_latest(), media_type=CONTENT_TYPE_LATEST)
@app.middleware("http")
async def metrics_middleware(request: Request, call_next):
start_time = time.time()
try:
response = await call_next(request)
REQUEST_COUNT.labels(status="success").inc()
latency = time.time() - start_time
REQUEST_LATENCY.observe(latency)
return response
Exception:
REQUEST_COUNT.labels(status=).inc()
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'llm-service'
static_configs:
- targets: ['llm-service:8000']
编写 docker-compose.yml:
version: '3'
services:
prometheus:
image: prom/prometheus:v2.45.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
command: ['--config.file=/etc/prometheus/prometheus.yml']
grafana:
image: grafana/grafana:10.0.0
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
volumes:
prometheus-data:
grafana-data:
from torch.profiler import profile, record_function, ProfilerActivity
with profile(activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], record_shapes=True) as prof:
with record_function("model_inference"):
outputs = model.generate(**inputs, max_new_tokens=200)
print(prof.key_averages().table(sort_by="cuda_time_total", row_limit=10))
concurrent.futures.ThreadPoolExecutor)或 GPU 加速预处理(如使用 CuPy)。
示例:通过测试不同 batch_size 的吞吐量和延迟,选择最优值:batch_sizes = [1, 2, 4, 8, 16]
for bs in batch_sizes:
inputs = tokenizer([prompt]*bs, return_tensors="pt").to(model.device)
start = time.time()
for _ in range(10):
outputs = model.generate(**inputs, max_new_tokens=200)
avg_time = (time.time() - start) / 10
throughput = bs / avg_time
print(f"batch_size={bs}: 平均延迟={avg_time:.2f}s,吞吐量={throughput:.2f} req/s")
大模型的落地是一个持续迭代的过程,需建立完善的版本控制机制,确保模型迭代过程可追溯、可回滚。
大模型落地需遵守数据安全、隐私保护、内容合规等相关法律法规(如《网络安全法》《个人信息保护法》《生成式人工智能服务管理暂行办法》),避免法律风险。
某互联网公司需部署一款 10B 参数量的中文大模型,用于智能客服、内容生成等业务场景,核心需求:
本章详细介绍了大模型部署与工程化落地的全流程,包括部署前的需求分析、硬件选型、软件配置,模型优化技术(量化、剪枝、蒸馏),主流部署框架的实战流程(FastAPI、TorchServe、TensorFlow Serving、Kubernetes),服务监控与性能调优,以及落地过程中的版本管理、合规风险控制。通过实战案例,验证了'模型优化 + 集群部署'方案的有效性,为不同规模、不同场景的大模型落地提供了可参考的实践指南。
大模型的工程化落地是一个系统性工程,需平衡性能、成本、稳定性、合规性等多方面因素。随着技术的不断发展,模型优化技术、部署框架、硬件设备将持续迭代,开发者需保持学习,结合实际业务需求,选择最合适的部署方案,推动大模型从实验室走向实际应用,创造业务价值。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online