背景

  1. 梳理tensorflow serving的项目主要模块及其功能
  2. 梳理tensorflow serving的请求调用链路和生命周期

主要模块及其功能

  1. apis/
  • 包含服务API定义和接口规范
  • 定义了模型服务的gRPC和REST API
  • 负责处理预测请求和响应的数据结构
  1. core/
  • 项目的核心实现模块
  • 包含模型加载、模型版本管理
  • 处理模型生命周期
  • 负责请求调度和资源管理
  1. model_servers/
  • TensorFlow模型服务器的主要实现
  • 包含服务器启动、配置和运行时管理
  • 处理模型部署和服务
  1. servables/
  • 不同类型模型服务的具体实现
  • 支持TensorFlow、SavedModel等多种模型格式
  • 处理模型加载和推理
  1. batching/
  • 实现请求批处理机制
  • 优化推理性能
  • 管理批处理队列和调度
  1. config/
  • 服务配置管理
  • 模型配置文件解析
  • 服务器参数设置
  1. sources/
  • 模型数据源管理
  • 处理模型文件的加载和更新
  • 支持不同来源的模型文件
  1. util/
  • 通用工具函数和辅助类
  • 包含监控、日志等功能
  • 提供各种通用功能支持

其他重要目录:

  • example/: 包含示例代码和使用案例
  • tools/: 包含构建和开发工具
  • third_party/: 第三方依赖库

架构特点:

  1. 模块化设计:各个组件职责明确,耦合度低
  2. 可扩展性强:支持多种模型格式和服务方式
  3. 高性能:通过批处理和资源管理优化推理性能
  4. 生产级别:支持模型版本管理、监控和日志

服务接口

  1. 预测服务接口(prediction_service.proto)主要RPC接口:
  • Predict:通用预测接口
  • Classify:分类任务接口
  • Regress:回归任务接口
  1. 模型管理服务(model_service.proto)主要RPC接口:
  • GetModelStatus:获取模型状态
  • HandleReloadConfigRequest:处理模型重载请求
  1. 核心数据结构定义:

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:日志元数据

典型调用流程示例:

  1. 预测请求:

    Client -> PredictionService.Predict
    Request:
    - model_spec: {name: "model_name", version: 1}
    - inputs: {key: tensor_data}
    Response:
    - outputs: {key: prediction_result}
  2. 模型状态查询:

    Client -> ModelService.GetModelStatus
    Request:
    - model_spec: {name: "model_name", version: 1}
    Response:
    - model_version_status: [
    {version: 1, state: AVAILABLE}
    ]
  3. 分类请求:

    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 发布!

jay_kay
0 声望0 粉丝

永远不要忘记,我依然爱着你