Tensorflow serving学习笔记1: 框架和流程解析

背景

  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}
  1. 模型状态查询:
Client -> ModelService.GetModelStatus
Request:
- model_spec: {name: "model_name", version: 1}
Response:
- model_version_status: [
   {version: 1, state: AVAILABLE}
 ]
  1. 分类请求:
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计算图执行   │
└───────────────────────────────┘
 │
 ▼
┌───────────────────────────────┐
│        [响应层]               │
│ 处理推理结果                   │
└───────────────────────────────┘
 │
 ▼
返回客户端响应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值