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
英文地址,請注明出處:http://en.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 版本