# 部署与工程化

URL: https://caijiao.org/nlp/deployment
Source: docs/nlp/deployment.md
Description: 本章介绍 NLP 模型的部署方式、工程化实践以及在生产环境中应用的注意事项。

在完成模型训练与评估后，将 NLP 模型应用到实际场景中需要进行部署与工程化。  
本章介绍常用部署方案、优化技巧和工程实践。

## 一、部署方式

| 方式 | 说明 | 示例场景 |
|------|------|---------|
| **本地服务部署** | 模型运行在本地服务器或电脑 | 小型实验、内部工具 |
| **Web API / 微服务** | 将模型封装为 RESTful 或 gRPC 接口 | Web 应用、移动端调用 |
| **云服务** | 使用云平台提供的推理服务 | 高并发生产环境、弹性伸缩 |
| **边缘端 / 移动端** | 将模型部署在移动设备或 IoT | 实时语音识别、聊天机器人 |

## 二、部署工具与框架

| 工具 / 框架 | 功能 | 特点 |
|-------------|------|------|
| **FastAPI / Flask / Django** | 构建 REST API 服务 | 易于集成 NLP 模型 |
| **TorchServe** | PyTorch 模型服务化 | 支持批量推理、动态输入 |
| **TensorFlow Serving** | TensorFlow 模型服务化 | 高性能、可伸缩 |
| **ONNX Runtime** | 跨框架推理 | 支持优化加速和多平台 |
| **Docker / Kubernetes** | 容器化部署 | 可移植、弹性扩展 |
| **Hugging Face Inference API** | 模型托管与推理 | 简单快速，无需运维 |

## 三、工程化优化

1. **模型压缩**
   - 量化（Quantization）  
   - 剪枝（Pruning）  
   - 知识蒸馏（Knowledge Distillation）  

2. **推理加速**
   - ONNX / TensorRT 加速  
   - GPU / TPU 加速  
   - 批量推理与异步调用  

3. **接口与服务设计**
   - 接口规范化（REST / gRPC）  
   - 请求限流与负载均衡  
   - 日志记录与监控  

4. **安全与隐私**
   - 模型接口权限控制  
   - 输入输出内容过滤  
   - 数据脱敏与隐私保护  

## 四、示例：使用 FastAPI 部署模型

```python
from fastapi import FastAPI
from transformers import pipeline

app = FastAPI()
classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")

@app.post("/predict")
def predict(text: str):
    result = classifier(text)
    return {"prediction": result}
````

运行后可通过 HTTP 请求调用模型：

```json
POST http://localhost:8000/predict
Body: {"text": "I love NLP!"}
```

返回结果：

```json
{"prediction": [{"label": "POSITIVE", "score": 0.999}]}
```

## 五、小结

- NLP 模型部署可选择本地、云端、边缘端等多种方案；
- 工程化需要考虑性能优化、接口设计、安全性与监控；
- 容器化、加速和日志监控是生产环境的关键实践。
