ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Navi 如何用 run_tf2.sh 首次启动 TensorFlow 模型服务并配置模型目录?

Navi 如何用 run_tf2.sh 首次启动 TensorFlow 模型服务并配置模型目录? Navi 如何用 run_tf2.sh 首次启动 TensorFlow 模型服务并配置模型目录【免费下载链接】the-algorithmSource code for the X Recommendation Algorithm项目地址: https://gitcode.com/GitHub_Trending/th/the-algorithmthe-algorithm 仓库中的 Navi 是一个用 Rust 实现的机器学习推理服务其 gRPC API 与 TensorFlow Serving 客户端兼容见 navi/README.md。本文的任务是第一次使用仓库自带的run_tf2.sh脚本在本地把 Navi 的 TensorFlow 模型服务跑起来。为此需要完成三件事准备so/tf2TensorFlow 运行时库目录、创建带版本子目录的模型目录、执行脚本并通过启动日志确认服务已加载模型。需要说明的是仓库本身没有附带任何模型文件——README 明确说出于数据安全考虑未包含测试、基准代码和各种配置文件因此 SavedModel 需要你自行准备并放入models目录。准备运行环境在navi/navi目录下操作。README 的 Run 一节明确写道“In navi/navi, you can run the following commands:scripts/run_tf2.sh”而脚本内部用cargo run编译运行所以必须在 Cargo 项目目录内执行。脚本第一行设置了LD_LIBRARY_PATHso/tf2这意味着运行时要从navi/navi下的so/tf2目录查找 TensorFlow 共享库启动前需要把 TensorFlow 运行时库放到该路径下。构建侧的事实Cargo.toml 中navi这个二进制声明了required-features[tf]tffeature 对应tensorflow 0.18.0依赖脚本里的--features tf就是启用该 feature 的入口。创建模型目录与版本子目录Navi 从--model-dir指定的目录读取模型。README 要求创建 models 目录并在其中创建若干版本子目录版本名建议使用 epoch 时间例如1679693908377。README 给出的目录结构示例文档示例models/ -web_click - 1809000 - 1809010即模型名web_click下有两个版本1809000、1809010。结合脚本对应的布局是models/click/版本号/每个版本子目录里放该版本的 SavedModel 导出。模型目录遵循两条由源码定义的行为模型名model spec取--model-dir路径的最后一级目录名。cli_args.rs 的get_model_specs对每个--model-dir去掉尾部/后取最后一段。脚本传models/click/因此模型名是click。默认加载目录下最大的版本。predict_service.rs 的扫描逻辑会读取--model-dir下所有子目录忽略META.json取目录名最大者加载当最大版本变化时会在轮询周期内重新加载。目录不存在或为空时会记录read dir error或no dir found hence no max日志并保持当前版本不变。可选配置模型所在父目录可以放一个META.json按模型名为键配置该模型的version、intra_op_parallelism、inter_op_parallelism见 lib.rs 的read_config/get_config_or与META_INFO META.json。未传--meta-json-dir时meta 目录取第一个--model-dir中模型名之前的一级目录脚本示例下即models/。首次启动不需要它版本完全由目录名决定。run_tf2.sh 启动脚本与参数run_tf2.sh 的完整内容#!/bin/sh RUST_LOGinfo LD_LIBRARY_PATHso/tf2 cargo run --bin navi --features tf -- --port 30 --num-worker-threads 8 --intra-op-parallelism 8 --inter-op-parallelism 8 \ --model-check-interval-secs 30 \ --model-dir models/click/ \ --input \ --output output_0各参数含义来自 cli_args.rs 的参数定义参数脚本取值含义--port30Navi 提供 gRPC 服务的端口--num-worker-threads8tokio 异步运行时的 worker 线程数--intra-op-parallelism8单个 op 内部并行计算的线程数--inter-op-parallelism8整图计算并行的线程数--model-check-interval-secs30轮询模型新版本与 META.json 配置的间隔默认 300--model-dirmodels/click/模型根目录默认models/pvideo/--input每个输入张量名留空表示由 Navi 从模型元数据自动探测--outputoutput_0每个输出张量名默认output_0两点需要注意--input 是有意的Navi 优先使用显式传入的输入张量名传空时加载模型阶段改为从 serving signature 读取输入名并记录日志input spec is empty for model 0, auto detect later。--output output_0必须是模型 serving signature 中真实存在的输出张量名。tf_model.rs 加载时用SavedModelBundle::load以serve标签读取模型并逐个按名字在 signature 中查找输出查不到会报error finding output op info一类错误。换成你自己的模型时把output_0改成其真实输出张量名。另外服务默认在 9000 端口--prometheus-port默认 9000提供 Prometheus metrics该端点通过 warp 挂载在 HTTP 的metrics路径上见 predict_service.rs 的init。验证服务启动bootstrap.rs 与 predict_service.rs 中包含若干可用于判断状态的日志。按脚本参数启动且模型目录正常时会看到如下格式的日志示例结果具体数值取决于你实际创建的模型目录与版本号Prometheus server started: 0.0.0.0: 9000 Prediction server started: 0.0.0.0:30 ***polling for models*** scanned models/click/, latest_version: 1679693908377 now we serve new model: idx: 0, tensorflow model_name:click, export_dir:models/click/1679693908377, version:1679693908377, inter:8, intra:8判断依据Prediction server started: 0.0.0.0:30表示 gRPC 服务已在脚本指定的端口监听bootstrap.rs。scanned models/click/, latest_version: 版本表示模型扫描成功且找到了最大版本若目录缺失同一位置会输出scanned models/click/, error ...。now we serve new model: ...中的export_dir指向实际加载的版本目录version为 epoch 数值说明该版本模型已成功加载并进入服务状态模型版本更新后出现的是now we serve updated model: ...。加载失败时服务不崩溃记录skip loading model due to failure: ...保留旧版本下一个轮询周期重试。出现上述日志后服务对外提供的是 TensorFlow Serving 的PredictionServicegRPC 接口主入口为predict见 bootstrap.rs 中挂载的PredictionServiceServer。README 说明该 gRPC API 与 TensorFlow Serving 客户端兼容可以直接用现有的 TensorFlow Serving gRPC 客户端向0.0.0.0:30发送预测请求。仓库未提供现成的客户端调用示例请求构造沿用你已有的 TensorFlow Serving 客户端方式即可。限制与注意仓库不包含模型文件models/click/版本/下的 SavedModel 需自行准备脚本中的目录名与输出名需要与你的模型匹配。--versions-per-model只允许 1 或 2validator.rs 有assert!(ARGS.versions_per_model 2)与 1它控制 Navi 在内存中保留的版本数用于滚动升级模型。Navi 的 TensorFlow 运行时目前是多个运行时中功能最完整的支持 float、int、string 等多种类型的多输入张量Onnx 主要支持单个 string 输入张量PyTorch 尚为实验状态README 的 Current State 一节。如果模型目录里存在assets.extra/tf_serving_warmup_requests文件加载完成后 Navi 会自动执行 warmup最多读取--max-warmup-records默认 500条记录见 tf_model.rs 的warmup。Onnx 运行时使用另一个脚本 run_onnx.sh与本文的 TensorFlow 路径互不相关不需要时忽略即可。启动后如果日志停在***polling for models***且始终没有scanned ... latest_version行先检查so/tf2库是否就位、models/click/下是否存在非META.json的版本子目录加载报错时对照export_dir指向的版本目录确认该版本的 SavedModel 是否完整。【免费下载链接】the-algorithmSource code for the X Recommendation Algorithm项目地址: https://gitcode.com/GitHub_Trending/th/the-algorithm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表