背景
-
梳理tensorflow serving的项目主要模块及其功能
-
梳理tensorflow serving的请求调用链路和生命周期
主要模块及其功能
- apis/
- 包含服务API定义和接口规范
- 定义了模型服务的gRPC和REST API
- 负责处理预测请求和响应的数据结构
- core/
- 项目的核心实现模块
- 包含模型加载、模型版本管理
- 处理模型生命周期
- 负责请求调度和资源管理
- model_servers/
- TensorFlow模型服务器的主要实现
- 包含服务器启动、配置和运行时管理
- 处理模型部署和服务
- servables/
- 不同类型模型服务的具体实现
- 支持TensorFlow、SavedModel等多种模型格式
- 处理模型加载和推理
- batching/
- 实现请求批处理机制
- 优化推理性能
- 管理批处理队列和调度
- config/
- 服务配置管理
- 模型配置文件解析
- 服务器参数设置
- sources/
- 模型数据源管理
- 处理模型文件的加载和更新
- 支持不同来源的模型文件
- util/
- 通用工具函数和辅助类
- 包含监控、日志等功能
- 提供各种通用功能支持
其他重要目录:
- example/: 包含示例代码和使用案例
- tools/: 包含构建和开发工具
- third_party/: 第三方依赖库
架构特点:
- 模块化设计:各个组件职责明确,耦合度低
- 可扩展性强:支持多种模型格式和服务方式
- 高性能:通过批处理和资源管理优化推理性能
- 生产级别:支持模型版本管理、监控和日志
服务接口
- 预测服务接口(prediction_service.proto)主要RPC接口:
-
Predict:通用预测接口
-
Classify:分类任务接口
-
Regress:回归任务接口
- 模型管理服务(model_service.proto)主要RPC接口:
-
GetModelStatus:获取模型状态
-
HandleReloadConfigRequest:处理模型重载请求
- 核心数据结构定义:
A. 模型相关(model.proto)
- ModelSpec:模型规范
- SignatureDef:模型签名定义
- MetaGraphDef:计算图元数据
B. 输入输出(input.proto)
- Input:通用输入格式
- ExampleList:样例列表
- ExampleListWithContext:带上下文的样例列表
C. 预测相关:
-
predict.proto:
- PredictRequest:预测请求
- PredictResponse:预测响应
-
classification.proto:
- ClassificationRequest:分类请求
- ClassificationResult:分类结果
-
regression.proto:
- RegressionRequest:回归请求
- RegressionResult:回归结果
D. 模型元数据(get_model_metadata.proto)
- GetModelMetadataRequest:获取模型元数据请求
- GetModelMetadataResponse:模型元数据响应
E. 状态监控(get_model_status.proto)
- ModelStatus:模型状态信息
- ServiceStatus:服务状态信息
F. 日志相关(logging.proto, prediction_log.proto)
- PredictionLog:预测日志
- SessionLog:会话日志
- LogMetadata:日志元数据
典型调用流程示例:
- 预测请求:
Client -> PredictionService.Predict Request: - model_spec: {name: "model_name", version: 1} - inputs: {key: tensor_data} Response: - outputs: {key: prediction_result}
- 模型状态查询:
Client -> ModelService.GetModelStatus Request: - model_spec: {name: "model_name", version: 1} Response: - model_version_status: [ {version: 1, state: AVAILABLE} ]
- 分类请求:
Client -> PredictionService.Classify Request: - model_spec: {name: "classifier"} - input: {examples: [...]} Response: - result: {classifications: [...]}
TensorFlow Serving请求调用链路
客户端请求 │ ▼ ┌───────────────────────────────┐ │ [接入层] │ │ ├──► REST API请求 ──► HTTPServer(http_server.cc) │ │ │ │ │ │ │ ▼ │ │ │ HTTPRestAPIHandler │ │ │ │ │ │ │ ▼ │ │ └──► gRPC请求 ──► PredictionServiceImpl │ └───────────────────────────────┘ │ ▼ ┌───────────────────────────────┐ │ [核心处理层] │ │ ServerCore(server_core.cc) │ │ ├──► 1. 请求验证和预处理 │ │ │ │ │ ├──► 2. 模型管理器(AspiredVersionsManager) │ │ │ │ │ │ │ ├──► 模型版本控制 │ │ │ └──► 模型生命周期管理 │ │ │ │ │ ├──► 3. 模型加载器(Loader) │ │ │ │ │ │ │ └──► 加载指定版本模型 │ │ │ │ │ ├──► 4. 批处理系统(Batching) │ │ │ │ │ │ │ └──► 请求批处理优化 │ │ │ │ │ └──► 5. 模型推理执行 │ │ │ │ │ └──► TensorFlow计算图执行 │ └───────────────────────────────┘ │ ▼ ┌───────────────────────────────┐ │ [响应层] │ │ 处理推理结果 │ └───────────────────────────────┘ │ ▼ 返回客户端响应
本文由博客一文多发平台 OpenWrite 发布!