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计算图执行 │
└───────────────────────────────┘
 │
 ▼
┌───────────────────────────────┐
│ [响应层] │
│ 处理推理结果 │
└───────────────────────────────┘
 │
 ▼
返回客户端响应

本文由博客一文多发平台 OpenWrite 发布!

作者:saboxu原文地址:https://www.cnblogs.com/saboxu/p/18906909

%s 个评论

要回复文章请先登录注册