深度解析:從模型倉(cāng)庫(kù)到推理后端的全鏈路工作機(jī)制)
模型推理服務(wù)AI 應(yīng)用后端【免費(fèi)下載鏈接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.項(xiàng)目地址https://gitcode.com/gh_mirrors/server117/server點(diǎn)擊查看免費(fèi)下載Triton Inference Server 是為云端與邊緣推理場(chǎng)景優(yōu)化的高性能推理服務(wù)框架。本文基于 docs/user_guide/architecture.md 展開(kāi)結(jié)合本倉(cāng)庫(kù)的源碼與配置系統(tǒng)講解 Triton 的高層架構(gòu)、請(qǐng)求處理鏈路、調(diào)度與批處理機(jī)制、后端擴(kuò)展方式以及模型管理與健康/指標(biāo)體系幫助你建立從客戶端發(fā)請(qǐng)求到GPU/CPU 執(zhí)行推理并返回結(jié)果的完整認(rèn)知。圖為 Triton Inference Server 的高層架構(gòu)客戶端經(jīng) HTTP/GRPC/C API 進(jìn)入服務(wù)器請(qǐng)求經(jīng) Per-Model Scheduler Queues 分發(fā)到對(duì)應(yīng)后端最終在 GPU/CPU 上執(zhí)行推理同時(shí)模型倉(cāng)庫(kù)、模型管理與健康/指標(biāo)模塊貫穿全流程。架構(gòu)總覽Triton 的高層架構(gòu)圍繞一條清晰的鏈路組織模型倉(cāng)庫(kù)提供模型 → 請(qǐng)求經(jīng)前端協(xié)議進(jìn)入 → 按模型路由到調(diào)度器 → 調(diào)度器批處理后交給后端 → 后端執(zhí)行推理并返回輸出。其核心設(shè)計(jì)要點(diǎn)包括模型倉(cāng)庫(kù)Model Repository基于文件系統(tǒng)的模型集合Triton 啟動(dòng)時(shí)通過(guò)--model-repository指定運(yùn)行期間可動(dòng)態(tài)加載、卸載與更新模型。多協(xié)議前端推理請(qǐng)求通過(guò) HTTP/REST 或 gRPC 協(xié)議 進(jìn)入也可通過(guò) C API 在進(jìn)程內(nèi)直接發(fā)起推理。按模型隔離的調(diào)度器Per-Model Scheduler每個(gè)模型擁有獨(dú)立的調(diào)度器支持多種調(diào)度與批處理算法可逐模型配置。后端Backend調(diào)度器把可選批處理后的請(qǐng)求交給與模型類型對(duì)應(yīng)的后端后端在 GPU/CPU 上完成實(shí)際推理。模型管理 API通過(guò) HTTP/REST、gRPC 或 C API 查詢與控制正在服務(wù)的模型。健康檢查與指標(biāo)readiness/liveness 探活端點(diǎn)以及利用率、吞吐、延遲等指標(biāo)方便集成進(jìn) Kubernetes 等部署框架。從本倉(cāng)庫(kù)源碼看這一架構(gòu)在 src/main.cc 中得到了直接印證StartEndpoints()根據(jù)編譯開(kāi)關(guān)與命令行參數(shù)依次啟動(dòng) gRPC 服務(wù)StartGrpcService、HTTP 服務(wù)StartHttpService、SageMaker 服務(wù)、Vertex AI 服務(wù)與指標(biāo)服務(wù)StartMetricsService每個(gè)服務(wù)都持有同一個(gè)TRITONSERVER_Server實(shí)例共同構(gòu)成對(duì)外服務(wù)的前端集合。模型倉(cāng)庫(kù)推理請(qǐng)求的來(lái)源模型倉(cāng)庫(kù)是 Triton 服務(wù)的模型的家。倉(cāng)庫(kù)路徑在啟動(dòng)時(shí)通過(guò)--model-repository指定且可以多次指定以納入多個(gè)倉(cāng)庫(kù)$ tritonserver --model-repositorymodel-repository-path倉(cāng)庫(kù)目錄布局遵循固定規(guī)范詳見(jiàn) docs/user_guide/model_repository.mdmodel-repository-path/ model-name/ [config.pbtxt] [output-labels-file ...] [configs]/ [custom-config-file ...] version/ model-definition-file version/ model-definition-file ...要點(diǎn)如下每個(gè)model-name子目錄對(duì)應(yīng)一個(gè)模型config.pbtxt描述模型的配置部分模型可省略以啟用自動(dòng)生成配置。每個(gè)模型目錄必須包含至少一個(gè)純數(shù)字命名的版本子目錄非數(shù)字命名或以0開(kāi)頭的目錄會(huì)被忽略。模型配置中的 version policy 決定哪些版本在任意時(shí)刻對(duì)外可用。版本子目錄內(nèi)是后端要求的模型文件TensorRT 為model.planONNX 為model.onnx單文件或目錄形式TorchScript 為model.ptOpenVINO 為model.xmlmodel.binPython 后端為model.pyDALI 為model.dali。默認(rèn)文件名均可通過(guò)模型配置中的default_model_filename覆蓋TensorRT Plan 因與 GPU 的 CUDA Compute Capability 綁定還需用cc_model_filenames配置關(guān)聯(lián)。倉(cāng)庫(kù)既可以位于本地文件系統(tǒng)也可以位于 Google Cloud Storagegs://前綴、Amazon S3s3://前綴、Azure Storageas://前綴。Triton 支持通過(guò)環(huán)境變量提供云憑據(jù)也支持通過(guò)TRITON_CLOUD_CREDENTIAL_PATH指向的 JSON 憑據(jù)文件Beta按最長(zhǎng)前綴匹配多套憑據(jù)遠(yuǎn)程倉(cāng)庫(kù)默認(rèn)會(huì)在臨時(shí)目錄做本地副本關(guān)機(jī)即刪可用TRITON_GCS_MOUNT_DIRECTORY、TRITON_AWS_MOUNT_DIRECTORY、TRITON_AZURE_MOUNT_DIRECTORY控制緩存位置。倉(cāng)庫(kù)暫不做文件緩存可通過(guò) repository agent API 注入代理實(shí)現(xiàn)緩存。前端協(xié)議請(qǐng)求如何進(jìn)入服務(wù)器客戶端可以通過(guò) HTTP/REST 或 gRPC 協(xié)議 訪問(wèn) Triton也可以直接使用 C API 進(jìn)行進(jìn)程內(nèi)推理。HTTP/REST 與 gRPC 端點(diǎn)基于 KServe 項(xiàng)目提出的標(biāo)準(zhǔn)推理協(xié)議predict-api v2實(shí)現(xiàn)并在此基礎(chǔ)上實(shí)現(xiàn)了 Triton 的協(xié)議擴(kuò)展。HTTP 與 gRPC 的職責(zé)劃分HTTP/REST面向跨語(yǔ)言、防火墻友好、調(diào)試便利的場(chǎng)景通過(guò)--http-port默認(rèn) 8000提供服務(wù)。gRPC面向高性能場(chǎng)景通過(guò)--grpc-port默認(rèn) 8001提供服務(wù)并額外提供雙向流式推理 RPC。文檔建議默認(rèn)使用 unary 版本的推理請(qǐng)求僅在以下場(chǎng)景考慮流式多個(gè) Triton 實(shí)例位于負(fù)載均衡器之后、需要保證同一序列的請(qǐng)求落到同一實(shí)例時(shí)流可保持單一連接貫穿生命周期需要跨網(wǎng)絡(luò)嚴(yán)格保持請(qǐng)求/響應(yīng)順序時(shí)。C API進(jìn)程內(nèi)直接調(diào)用省去網(wǎng)絡(luò)開(kāi)銷適合嵌入式或低延遲場(chǎng)景。常見(jiàn) gRPC 配置項(xiàng)配置項(xiàng)說(shuō)明--grpc-use-ssl/--grpc-use-ssl-mutual啟用 SSL/TLS含雙向認(rèn)證--grpc-server-cert/--grpc-server-key/--grpc-root-certTLS 證書、私鑰與根證書--grpc-infer-response-compression-level服務(wù)端響應(yīng)壓縮級(jí)別--grpc-keepalive-time等KeepAlive 相關(guān)參數(shù)--grpc-infer-thread-countgRPC 推理處理線程數(shù)默認(rèn) 2處理瓶頸在請(qǐng)求處理環(huán)節(jié)如 ensemble 模型時(shí)可適當(dāng)調(diào)高此外Triton 提供 BETA 的端點(diǎn)訪問(wèn)限制能力通過(guò)--grpc-restricted-protocol與--http-restricted-api聲明受限協(xié)議/API 組及其訪問(wèn)頭實(shí)現(xiàn)推理 API 與模型控制 API 使用不同憑據(jù)的權(quán)限隔離。在 src/main.cc 的StartEndpoints()中可以看到各服務(wù)HTTP、gRPC、SageMaker、Vertex AI、Metrics由編譯宏TRITON_ENABLE_HTTP、TRITON_ENABLE_GRPC等控制啟停且 SageMaker / Vertex AI 端點(diǎn)會(huì)復(fù)用 HTTP 服務(wù)的受限 API 配置這解釋了受限設(shè)置對(duì)重定向請(qǐng)求同樣生效的行為。調(diào)度器按模型隔離的請(qǐng)求路由與批處理架構(gòu)圖中每個(gè)模型都擁有獨(dú)立的Per-Model Scheduler Queue這是 Triton 實(shí)現(xiàn)逐模型調(diào)度策略的載體。調(diào)度器負(fù)責(zé)從隊(duì)列取出推理請(qǐng)求按需執(zhí)行批處理再交給后端執(zhí)行。Triton 實(shí)現(xiàn)了多種調(diào)度與批處理算法可按模型配置詳見(jiàn) docs/user_guide/scheduler.md 與 docs/user_guide/architecture.md調(diào)度器說(shuō)明Default Scheduler未在模型配置中指定任何scheduling_choice屬性時(shí)的默認(rèn)調(diào)度器把推理請(qǐng)求分發(fā)到該模型配置的所有 instance group 對(duì)應(yīng)的模型實(shí)例上Dynamic Batcher動(dòng)態(tài)批處理在滿足延遲要求的前提下把多個(gè)請(qǐng)求合并為一個(gè)批次顯著提升 GPU 吞吐。當(dāng)模型配置了大于 1 的max_batch_size且未顯式給出調(diào)度器時(shí)會(huì)自動(dòng)啟用 dynamic batchingSequence Batcher序列批處理面向有狀態(tài)、需要保持順序的序列模型如 NLP支持隱式/顯式狀態(tài)管理與控制信號(hào)Ensemble Scheduler必須用于 ensemble 模型通過(guò)模型配置中的ModelEnsembleScheduling聲明參與組合的模型及張量流轉(zhuǎn)關(guān)系從模型配置的源碼行為看instance_group的默認(rèn)值也會(huì)被自動(dòng)填充且 ensemble 模型本身沒(méi)有物理實(shí)例instance_group字段不可為其指定——組合內(nèi)的各子模型才各自聲明instance_group并獨(dú)立支持并行執(zhí)行見(jiàn) docs/user_guide/model_configuration.md。批處理為何重要單個(gè)推理請(qǐng)求可攜帶一批輸入批輸入同時(shí)執(zhí)行這對(duì) GPU 尤為關(guān)鍵——能夠大幅提升推理吞吐。但現(xiàn)實(shí)中許多請(qǐng)求并未成批到達(dá)因此服務(wù)端動(dòng)態(tài)批處理是 Triton 高吞吐的核心手段它在可配置的時(shí)間窗口與延遲預(yù)算內(nèi)把多個(gè)獨(dú)立請(qǐng)求合并為一個(gè)批次交由模型一次執(zhí)行再拆分結(jié)果返回給各請(qǐng)求方。相關(guān)參數(shù)如max_batch_size、批處理窗口、優(yōu)先級(jí)、隊(duì)列策略等與調(diào)優(yōu)建議可參考 docs/user_guide/batcher.md 與 docs/user_guide/optimization.md。后端框架無(wú)關(guān)的推理執(zhí)行層調(diào)度器完成批處理后把請(qǐng)求交給與模型類型對(duì)應(yīng)的后端Backend。后端利用批次請(qǐng)求中的輸入執(zhí)行推理、產(chǎn)生輸出并返回。Triton 的關(guān)鍵可擴(kuò)展性來(lái)自Backend C API通過(guò)該 API 可以為 Triton 增加自定義功能例如自定義前/后處理算子甚至接入全新的深度學(xué)習(xí)框架。這也解釋了倉(cāng)庫(kù)中為何存在deploy/、docker/之外按框架組織的模型與后端生態(tài)。本倉(cāng)庫(kù)的 QA 測(cè)試對(duì)后端體系做了大量覆蓋例如 qa/L0_backend_python 覆蓋 Python 后端的參數(shù)校驗(yàn)、異步執(zhí)行、BLS、解耦輸出、生命周期等場(chǎng)景qa/L0_backend_onnxruntime、qa/L0_backend_identity、qa/L0_backend_release 等分別驗(yàn)證各后端的正確性與發(fā)布形態(tài)。Python 后端本身還可作為輕量推理框架使用倉(cāng)庫(kù)的 python/ 目錄含 openai_frontend 與大量測(cè)試展示了基于 Python 的服務(wù)化實(shí)現(xiàn)。模型管理運(yùn)行期的模型生命周期控制Triton 運(yùn)行期間可通過(guò)模型管理 APIHTTP/REST、gRPC 或 C API 的一部分查詢與控制模型。服務(wù)器運(yùn)行在三種模型控制模式之一詳見(jiàn) docs/user_guide/model_management.md模式啟動(dòng)行為運(yùn)行期行為啟用方式NONE嘗試加載倉(cāng)庫(kù)中所有模型失敗的標(biāo)記為 UNAVAILABLE倉(cāng)庫(kù)變更被忽略加載/卸載請(qǐng)求返回錯(cuò)誤--model-control-modenone默認(rèn)EXPLICIT僅加載--load-model顯式指定的模型--load-model*表示加載全部必須作為唯一參數(shù)所有加載/卸載必須顯式通過(guò)模型控制協(xié)議發(fā)起--model-control-modeexplicitPOLL嘗試加載倉(cāng)庫(kù)中所有模型周期性輪詢倉(cāng)庫(kù)間隔由--repository-poll-secs控制并自動(dòng)增刪模型重載失敗時(shí)保留舊模型成功時(shí)無(wú)中斷替換--model-control-modepoll注意POLL模式下 Triton 的輪詢與倉(cāng)庫(kù)變更之間沒(méi)有同步可能觀察到不完整變更官方文檔不推薦在生產(chǎn)環(huán)境使用該模式。在EXPLICIT模式下頻繁加載/卸載模型時(shí)若觀察到內(nèi)存增長(zhǎng)可能并非真正泄漏而是系統(tǒng)malloc的內(nèi)存釋放啟發(fā)式所致文檔建議嘗試用LD_PRELOAD注入tcmalloc或jemalloc兩者均已預(yù)裝在 Triton 容器內(nèi)并根據(jù)負(fù)載實(shí)測(cè)選擇更優(yōu)者。健康檢查與指標(biāo)可觀測(cè)性與部署集成Triton 提供 readiness/liveness 健康探活端點(diǎn)以及利用率、吞吐、延遲等指標(biāo)這些能力使 Triton 能夠被 Kubernetes 等部署框架平滑集成。指標(biāo)端點(diǎn)默認(rèn)位于http://localhost:8002/metrics采用 Prometheus 明文格式可直接curl查看$ curl localhost:8002/metrics開(kāi)關(guān)與端口--allow-metricsfalse關(guān)閉全部指標(biāo)--allow-gpu-metricsfalse/--allow-cpu-metricsfalse分別關(guān)閉 GPU/CPU 指標(biāo)--metrics-port換端口--metrics-address單獨(dú)指定指標(biāo)綁定地址默認(rèn)復(fù)用--http-address未啟用 HTTP 服務(wù)時(shí)綁定0.0.0.0。采樣間隔--metrics-interval-ms控制Per Interval類指標(biāo)的輪詢/更新間隔Per Request類指標(biāo)不受此影響。指標(biāo)類別包括推理請(qǐng)求指標(biāo)Request/Inference/Execution Count 等可用于計(jì)算平均批大小 Inference Count / Execution Count、GPU 指標(biāo)、CPU 指標(biāo)、Pinned Memory 指標(biāo)、Response Cache 指標(biāo)與自定義指標(biāo)詳見(jiàn) docs/user_guide/metrics.md。在源碼層面指標(biāo)服務(wù)同樣由 src/main.cc 的StartMetricsService()啟動(dòng)與 HTTP 服務(wù)共用HTTPServer實(shí)現(xiàn)但獨(dú)立端口/地址參數(shù)這與文檔所述行為一一對(duì)應(yīng)。從請(qǐng)求到響應(yīng)一條完整鏈路綜合上述模塊一次推理請(qǐng)求的完整旅程如下客戶端經(jīng) HTTP/REST、gRPC 或 C API 把推理請(qǐng)求送入服務(wù)器請(qǐng)求進(jìn)入對(duì)應(yīng)模型的Per-Model Scheduler Queue該模型的調(diào)度器按配置執(zhí)行批處理dynamic batching、sequence batching 等把可選的批次請(qǐng)求交給對(duì)應(yīng)后端后端使用批次輸入執(zhí)行推理產(chǎn)出請(qǐng)求的輸出輸出經(jīng)原協(xié)議返回給客戶端。貫穿始終的是模型管理 API 對(duì)模型加載/卸載的控制以及健康端點(diǎn)與指標(biāo)對(duì)服務(wù)狀態(tài)的持續(xù)暴露。這一按模型隔離調(diào)度、框架無(wú)關(guān)后端、多協(xié)議統(tǒng)一入口的設(shè)計(jì)正是 Triton 能夠在多模型、多框架、多硬件GPU/CPU的生產(chǎn)環(huán)境中靈活部署的基礎(chǔ)。進(jìn)一步閱讀模型倉(cāng)庫(kù)詳解 與 模型配置推理協(xié)議與 API調(diào)度器、批處理器、Ensemble 模型模型管理、指標(biāo)后端實(shí)現(xiàn)與測(cè)試qa/L0_backend_python、qa/L0_backend_onnxruntime部署形態(tài)參考deploy/ 下的 Helm Chartaws、gcp、k8s-onprem、oci、fleetcommand 等贊分享模型推理服務(wù)AI 應(yīng)用后端【免費(fèi)下載鏈接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.項(xiàng)目地址https://gitcode.com/gh_mirrors/server117/server點(diǎn)擊查看免費(fèi)下載相關(guān)推薦從Java客戶端到高性能推理Triton Inference Server全鏈路實(shí)戰(zhàn)指南從Java客戶端到高性能推理Triton Inference Server全鏈路實(shí)戰(zhàn)指南 你是否在Java應(yīng)用中集成AI模型時(shí)遇到過(guò)性能瓶頸還在為多模型并行模型推理服務(wù)AI 應(yīng)用后端Ultralytics TritonBackend 深度解析連接 NVIDIA Triton Inference Server 的遠(yuǎn)程推理后端Ultralytics TritonBackend 深度解析連接 NVIDIA Triton Inference Server 的遠(yuǎn)程推理后端 本文圍繞 Ul人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)預(yù)訓(xùn)練TensorRT 引擎部署到 Triton Inference Server 實(shí)戰(zhàn)從 ONNX 優(yōu)化、模型倉(cāng)庫(kù)配置到客戶端推理TensorRT 引擎部署到 Triton Inference Server 實(shí)戰(zhàn)從 ONNX 優(yōu)化、模型倉(cāng)庫(kù)配置到客戶端推理 本文基于 TensorRT 倉(cāng)人工智能推理引擎深度學(xué)習(xí)本地部署模型優(yōu)化創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考