TensorFlow Serving学习笔记2: 模型服务

本文深入剖析 TensorFlow Serving 的核心架构与实现机制,结合源码分析揭示其如何实现高可用、动态更新的生产级模型服务。

一、TensorFlow Serving 核心架构

1.1 分层架构设计

TensorFlow Serving 采用模块化分层设计,各组件职责分明:

组件职责源码位置
Servables可服务对象(如模型),基础服务单元core/servable.h
Loaders管理模型加载/卸载生命周期core/loader.h
Managers管理 Servable 集合,路由请求到正确版本core/manager.h
Sources提供 Loader,通知 Manager 新版本可用core/source.h
ServerCore中枢系统,协调各组件工作model_servers/server_core.h
1.2 请求处理全流程
Client REST/gRPC PredictionService ServerCore Session HTTP/gRPC请求 路由请求 获取模型 执行session.run() 返回预测结果 封装响应 返回预测数据 Client REST/gRPC PredictionService ServerCore Session

二、核心机制深度解析

2.1 动态模型加载机制

核心流程

加载
检测新模型
创建Loader
构建LoaderHarness
状态机管理
kReady
提供服务

LoaderHarness 状态机

enum class State {kNew,        // 新建状态kLoading,     // 加载中kReady,       // 就绪状态kQuiescing,   // 静默中kUnloading,   // 卸载中kError        // 错误状态
};

关键设计

  1. 线程安全状态转换
Status LoaderHarness::Load() {mutex_lock l(mu_); // 状态锁TransitionState(State::kLoading);// ...执行加载
}
  1. 自动资源回收
LoaderHarness::~LoaderHarness() {if (state_ == State::kReady) Unload();
}
2.2 ServerCore 启动流程

BuildAndStart() 函数核心逻辑:

Status Server::BuildAndStart(const Options& opts) {// 1. 配置验证if (opts.grpc_port == 0) return errors::InvalidArgument("端口未设置");// 2. 构建ServerCore配置ServerCore::Options options;// 3. 模型配置加载if (opts.model_config_file.empty()) {options.model_server_config = BuildSingleModelConfig(...);} else {TF_RETURN_IF_ERROR(ParseProtoTextFile(...));}// 4. 资源配置session_bundle_config.mutable_session_config()->mutable_gpu_options()->set_per_process_gpu_memory_fraction(0.8); // GPU内存限制// 5. 创建ServerCore核心TF_RETURN_IF_ERROR(ServerCore::Create(std::move(options), &server_core_));// 6. 启动gRPC服务::grpc::ServerBuilder builder;builder.AddListeningPort(..., BuildServerCredentials(...));grpc_server_ = builder.BuildAndStart();// 7. 启动HTTP服务if (opts.http_port != 0) {http_server_ = CreateAndStartHttpServer(...);}return Status::OK();
}

在这里插入图片描述

三、关键设计亮点

3.1 动态更新机制
配置文件变更
PeriodicFunction轮询
触发ReloadConfig
增量加载新模型
流量无缝切换

实现代码

fs_config_polling_thread_.reset(new PeriodicFunction([this, config_file] {this->PollFilesystemAndReloadConfig(config_file);},poll_interval * 1000000  // 微秒单位
));
3.2 资源隔离设计

GPU内存隔离

// 限制单模型GPU内存使用
session_bundle_config.mutable_session_config()->mutable_gpu_options()->set_per_process_gpu_memory_fraction(0.6);

并行计算优化

// 智能并行配置
if (intra_op > 0 || inter_op > 0) {// 分别设置算子内/间并行度session_config->set_intra_op_parallelism_threads(intra_op);session_config->set_inter_op_parallelism_threads(inter_op);
} else {// 统一并行设置session_config->set_intra_op_parallelism_threads(session_parallel);session_config->set_inter_op_parallelism_threads(session_parallel);
}

四、生产级特性实现

4.1 服务高可用设计
机制实现方式效果
模型预热enable_model_warmup 参数避免冷启动延迟
失败重试max_num_load_retries 配置提升模型加载成功率
版本回滚AvailabilityPreservingPolicy 策略自动回退问题版本
4.2 安全通信保障

SSL/TLS 加密配置

::grpc::SslServerCredentialsOptions ssl_ops(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY);
ssl_ops.pem_root_certs = custom_ca;  // 自定义CA

五、核心参数大全

参数名类型默认值作用
grpc_portintgRPC服务端口(必须设置)
model_base_pathstring单模型基路径
per_process_gpu_memory_fractionfloat1.0GPU内存分配比例
tensorflow_intra_op_parallelismint0算子内并行线程数
fs_model_config_poll_wait_secondsint0配置轮询间隔(秒)
enable_model_warmupboolfalse启用模型预热减少延迟

Reference

TensorFlow 入门实操 源代码 tensorflow serving源码分析_mob6454cc6bf0b7的技术博客_51CTO博客

TensorFlow Serving源码解读_tensorflow serving 代码解析-CSDN博客

tensorflow-serving源码阅读1_tensorflow源码阅读-CSDN博客

tensorflow serving 源码 tensorflow源码阅读_柳随风的技术博客_51CTO博客

https://zhuanlan.zhihu.com/p/700830357

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87451.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

共享云桌面为什么能打败传统电脑

近年来,随着云桌面技术的快速发展,共享云桌面作为一种新型的计算模式,正在逐步改变人们的工作和生活方式。它凭借其独特的优势,正在逐步取代传统电脑,成为企业和个人用户的新选择。之所以在部分场景中展现出替代传统电…

B站PWN教程笔记-12

完结撒花。 今天还是以做题为主。 fmtstruaf 格式化字符串USER AFTER FREE 首先补充一个背景知识,指针也是有数据类型的,不同数据类型的指针xx,所加的字节数也不一样,其实是指针指的项目的下一项。如int a[20],a是…

零基础设计模式——总结与进阶 - 3. 学习资源与下一步

第五部分:总结与进阶 - 3. 学习资源与下一步 到这里,你已经完成了设计模式主要内容的学习。但这仅仅是一个开始,设计模式的精髓在于实践和持续学习。本节将为你提供一些优质的学习资源和后续学习的建议,帮助你在这条道路上走得更…

多模态大语言模型arxiv论文略读(125)

Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文标题:Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文作者:Xun Zhu, Yi…

【学习笔记】NLP 基础概念

1.1 什么是 NLP 定义: 自然语言处理(NLP)**是一种让计算机理解、解释和生成人类语言的技术。它是人工智能领域中极为活跃且重要的研究方向,旨在模拟人类对语言的认知和使用过程 特点: 多学科交叉:结合计…

RNN为什么不适合大语言模型

在自然语言处理(NLP)领域中,循环神经网络(RNN)及衍生架构(如LSTM)采用序列依序计算的模式,这种模式之所以“限制了计算机并行计算能力”,核心原因在于其时序依赖的特性&a…

微信小程序一款不错的文字动画

效果图 .js Page({data: {list:[],animation:[text-left,text-right,text-top,text-bottom],text:[[春眠不觉晓,处处闻啼鸟。,夜来风雨声,花落知多少。 ],[床前明月光,疑是地上霜。,举头望明月,低头思故乡。],[千山鸟飞绝&#…

循环神经网络(RNN):序列数据处理的强大工具

在人工智能和机器学习的广阔领域中,处理和理解序列数据一直是一个重要且具有挑战性的任务。循环神经网络(Recurrent Neural Network,RNN)作为一类专门设计用于处理序列数据的神经网络,在诸多领域展现出了强大的能力。从…

手机SIM卡通话中随时插入录音语音片段(Windows方案)

手机SIM卡通话中随时插入录音语音片段(Windows方案) --本地AI电话机器人 上一篇:手机SIM卡通话中随时插入录音语音片段(Android方案)​​​​​​​ 下一篇:​​​​​​​编写中 一、前言 书接上文《手…

阿里云通义大模型:AI浪潮中的领航者

通义大模型初印象 在当今 AI 领域蓬勃发展的浪潮中,阿里云通义大模型宛如一颗璀璨的明星,迅速崛起并占据了重要的地位。随着人工智能技术的不断突破,大模型已成为推动各行业数字化转型和创新发展的核心驱动力。通义大模型凭借其强大的技术实…

【算法篇】逐步理解动态规划模型7(两个数组dp问题)

目录 两个数组dp问题 1.最长公共子序列 2.不同的子序列 3.通配符匹配 本文旨在通过对力扣上三道题进行讲解来让大家对使用动态规划解决两个数组的dp问题有一定思路,培养大家对状态定义,以及状态方程书写的思维。 顺序: 题目链接-》算法思…

什么是 HTTP Range 请求(范围请求)

HTTP Range 请求,即范围请求,是一种 HTTP 请求方法,允许客户端请求资源的部分数据。这种请求在处理大型文件(如视频、音频、或大文件下载)时特别有用,因为它可以有效地进行断点续传和按需加载数据&#xff…

java集合(十) ---- LinkedList 类

目录 十、LinkedList 类 10.1 位置 10.2 特点 10.3 与 ArrayList 的区别 10.4 构造方法 10.5 常用方法 十、LinkedList 类 10.1 位置 LinkedList 类位于 java.util 包下 10.2 特点 是 List 接口的实现类是 Deque 接口的实现类底层使用双向循环链表结构 10.3 与 Arra…

kafka消费的模式及消息积压处理方案

目录 1、kafka消费的流程 2、kafka的消费模式 2.1、点对点模式 2.2、发布-订阅模式 3、consumer消息积压 3.1、处理方案 3.2、积压量 4、消息过期失效 5、kafka注意事项 Kafka消费积压(Consumer Lag)是指消费者处理消息的速度跟不上生产者发送消息的速度,导致消息在…

RAG实践:Routing机制与Query Construction策略

Routing机制与Query Construction策略 前言RoutingLogical RoutingChatOpenAIStructuredRouting DatasourceConclusion Semantic RoutingEmbedding & LLMPromptRounting PromptConclusion Query ConstructionGrab Youtube video informationStructuredPrompt GithubReferen…

基于python的web系统界面登录

#让我们的电脑可以支持服务访问 #需要一个web框架 #pip install Flask from flask import Flask, render_template,request from random import randint app Flask(__name__) app.route(/index) def index():uname request.args.get("uname")return f"主页&am…

MATLAB Simulink 终极入门指南:从零设计智能控制系统

为什么工程师都爱Simulink? 想象一下:不写一行代码就能设计机器人控制器、飞行算法甚至核反应堆! MATLAB Simulink正是这样的可视化神器。全球70%的汽车ECU、航天器控制系统用它开发。本文将带你从零设计一个智能温控系统,融入创新性的模糊PID控制,并生成可部署的C代码!…

vue3 javascript 复杂数值计算操作技巧

在Vue 3中处理复杂数值计算,你可以采用多种策略来确保代码的可读性、可维护性和性能。以下是一些实用的技巧和最佳实践: 1. 使用计算属性(Computed Properties) Vue 3的computed属性非常适合处理复杂的数值计算。它们是基于响应…

26.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--角色权限管理

在现代企业级应用中,角色权限管理是保障系统安全和提升用户体验的核心基础功能。一个高效的角色权限系统不仅能够有效防止越权访问,还能简化系统的维护和扩展。本文将系统性介绍角色权限管理的核心实现思路,包括架构设计、性能优化、安全机制…

[VSCode] VSCode 设置 python 的编译器

VSCode 设置 python 的编译器 快捷键:CTRL SHIFT P 弹出 VSCode 的命令框输入 Python : select Interpretor选择自己需要的 python 环境;如 python 3.8 或者 python 3.10 版本