拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PaddleSpeech 服务端 ONNX 推理会话配置详解:读懂 `paddlespeech.server.utils.onnx_infer` 的 `get_sess` 实现

人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载本篇技术指南围绕 PaddleSpeech 服务端工具模块paddlespeech.server.utils.onnx_infer文档入口见 paddlespeech.server.utils.onnx_infer 模块 API展开深入剖析其核心函数get_sess如何基于 ONNX Runtime 创建推理会话、如何通过配置字典控制执行设备、图优化级别与线程数。读完本文你将能够看懂服务端 ASR / TTS 在线引擎的 ONNX 推理参数体系并能在实际部署配置文件中精准调优sess_conf。一、模块定位服务端 ONNX 推理的统一入口在 PaddleSpeech 的服务端架构中paddlespeech/server/utils/onnx_infer.py承担着为 ONNX 模型创建推理会话这一基础职责。整个模块非常精炼只对外暴露一个函数get_sess(model_path, sess_conf)读取一个.onnx模型文件路径和一份会话配置字典返回一个onnxruntime.InferenceSession实例。从源码结构看见 onnx_infer.py该函数内部完成了三件核心工作组装onnxruntime.SessionOptions图优化级别、执行模式、线程数依据配置选择 ExecutionProviderCPU / CUDA / TensorRT调用ort.InferenceSession完成会话创建。它与服务端另一套基于 Paddle Inference 的工具模块paddle_predictor.py形成对照前者面向 ONNX Runtime 推理路径后者面向 Paddle Inference 推理路径二者在服务端引擎层通过不同的engine_type被选择使用。二、get_sess源码逐段拆解以下是get_sess的完整实现摘自 onnx_infer.pydef get_sess(model_path: Optional[os.PathLike]None, sess_conf: dictNone): logger.debug(fort sessconf: {sess_conf}) sess_options ort.SessionOptions() sess_options.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL if sess_conf.get(graph_optimization_level, 99) 0: sess_options.graph_optimization_level ort.GraphOptimizationLevel.ORT_DISABLE_ALL sess_options.execution_mode ort.ExecutionMode.ORT_SEQUENTIAL # gpu:0 providers [CPUExecutionProvider] if gpu in sess_conf.get(device, ): device_id int(sess_conf[device].split(:)[1]) providers [(CUDAExecutionProvider, {device_id: device_id})] # fastspeech2/mb_melgan cant use trt now! if sess_conf.get(use_trt, 0): providers [TensorrtExecutionProvider] logger.debug(fort providers: {providers}) if cpu_threads in sess_conf: sess_options.intra_op_num_threads sess_conf.get(cpu_threads, 0) else: sess_options.intra_op_num_threads sess_conf.get( intra_op_num_threads, 0) sess_options.inter_op_num_threads sess_conf.get(inter_op_num_threads, 0) sess ort.InferenceSession( model_path, providersproviders, sess_optionssess_options) return sess2.1 SessionOptions 的默认策略图优化级别默认全开函数默认设置graph_optimization_level ORT_ENABLE_ALL这是 ONNX Runtime 提供的最高级别图优化含基本优化、扩展优化与布局优化仅在配置中显式传入graph_optimization_level: 0时才降级为ORT_DISABLE_ALL。执行模式固定为顺序执行execution_mode ORT_SEQUENTIAL即算子按拓扑顺序逐个执行。对于语音服务这类以推理延迟为主要指标的在线场景顺序执行通常已足够若需要图内算子并行可考虑ORT_PARALLEL当前模块未开放该选项。2.2 Provider 选择逻辑CPU / CUDA / TensorRTdevice字段的取值格式为gpu:id或cpu未配置或配置为cpu使用[CPUExecutionProvider]配置为gpu:0这类字符串解析冒号后的数字作为device_id使用[(CUDAExecutionProvider, {device_id: device_id})]在 GPU 基础上再开启use_trt: True直接切换到[TensorrtExecutionProvider]。源码注释特别强调了一个兼容性约束fastspeech2/mb_melgan cant use trt now!意味着 FastSpeech2 声学模型与 MB-MelGAN 声码器当前无法配合 TensorRT 使用配置use_trt前需要确认目标模型的支持情况。2.3 线程数配置的两种写法线程配置体现了对两套配置命名习惯的兼容优先读取cpu_threads服务端 TTS 配置中使用若不存在则回退读取intra_op_num_threads服务端 ASR 配置中使用二者本质都作用于sess_options.intra_op_num_threads即节点内部算子并行执行的线程数inter_op_num_threads控制图中跨节点并行执行的线程数独立读取。intra_op_num_threads与inter_op_num_threads的含义与 onnxruntime 官方InferenceSession参数一致前者决定单个算子内部的数据并行线程数后者决定整个计算图中多个算子之间的并行度。对延迟敏感的在线推理通常建议inter_op_num_threads保持为 0由 Runtime 自动决定或设小值避免线程调度开销影响单请求延迟。三、服务端引擎中的实际调用链3.1 在线 ASRonnx 引擎在 asr_engine.py 中ASRServerExecutor.init_model对deepspeech2系列模型调用self.am_predictor onnx_infer.get_sess( model_pathself.am_model, sess_confself.am_predictor_conf)配置从self.config.am_predictor_conf注入见 asr_engine.py即服务端 yaml 中asr_online-onnx段落下的am_predictor_conf字段。该引擎通过CommonTaskResource(taskasr, model_formatonnx, inference_modeonline)管理模型资源下载ONNX 引擎只使用am_modelonnx 静态图文件am_params会被断言为 None。3.2 在线 TTSonnx 引擎在 tts_engine.py 中get_sess被复用多次覆盖声学模型与声码器两类子模型FastSpeech2fastspeech2_csmsc_onnx单个 onnx 模型创建self.am_sesstts_engine.pyFastSpeech2 CNN Decoderfastspeech2_cnndecoder_csmsc_onnx支持流式 AM 推理需要三个子模型 encoder / decoder / postnet分别创建self.am_encoder_infer_sess、self.am_decoder_sess、self.am_postnet_sesstts_engine.py同时加载am_stat中的均值方差用于归一化声码器mb_melgan_csmsc_onnx/hifigan_csmsc_onnx创建self.voc_sesstts_engine.py。可以看出get_sess是服务端onnx 化在线推理的最小公共原语无论模型形态是单个 onnx 文件还是多个子图文件统一通过它生成推理会话上层引擎只负责按需调用。四、服务端配置文件中的sess_conf参数对照get_sess实际消费的配置键与两个官方服务端配置文件的对应关系如下配置键默认行为作用典型配置出处devicecpu默认 CPUExecutionProvider选择推理设备gpu:id触发 CUDA Providertts_online_application.yaml、ws_ds2_application.yamluse_trt0GPU 下切换 TensorrtExecutionProviderFastSpeech2/MB-MelGAN 暂不支持tts_online_application.yamlgraph_optimization_level非 0 时启用 ORT_ENABLE_ALL显式为0时 ORT_DISABLE_ALL控制 onnxruntime 图优化级别ws_ds2_application.yamlcpu_threads0不设置则回退读取 intra_op_num_threadsintra_op 线程数TTS 命名风格tts_online_application.yamlintra_op_num_threads0节点内算子并行线程数ASR 命名风格ws_ds2_application.yamlinter_op_num_threads0图内跨节点并行线程数ws_ds2_application.yaml其中log_severity_level、log_verbosity_level两个日志相关键在配置中给出见 ws_ds2_application.yaml用于控制会话加载与初始化阶段的日志级别属于 onnxruntime 会话级日志配置get_sess当前实现中未直接消费但保留在配置中以备排查问题。在线 TTS 配置实例流式 TTS 服务端配置tts_online_application.yaml中tts_online-onnx引擎对 AM 与声码器分别给出会话配置tts_online-onnx: am: fastspeech2_cnndecoder_csmsc_onnx am_ckpt: # list am_sess_conf: device: cpu use_trt: False cpu_threads: 4 voc: hifigan_csmsc_onnx voc_sess_conf: device: cpu use_trt: False cpu_threads: 4配合流式推理参数am_block: 72、am_pad: 12CNN Decoder 流式 AM 的块长与 paddingam_pad设为 12 时流式合成结果与非流式一致以及voc_block: 36、voc_pad: 14MB-MelGAN 声码器流式参数这些参数与get_sess创建的会话共同构成完整的流式 TTS 推理链路。若am选fastspeech2_csmsc_onnxam_ckpt只需单个 ckpt若选fastspeech2_cnndecoder_csmsc_onnx则am_ckpt需按 [encoder, decoder, postnet] 顺序给出三个模型文件。在线 ASR 配置实例流式 ASR 服务端配置ws_ds2_application.yaml中asr_online-onnx引擎的配置示例asr_online-onnx: model_type: deepspeech2online_wenetspeech am_model: # the pdmodel file of onnx am static model [optional] lang: zh sample_rate: 16000 device: cpu am_predictor_conf: device: cpu graph_optimization_level: 0 intra_op_num_threads: 0 inter_op_num_threads: 0 log_severity_level: 2 log_verbosity_level: 0chunk_buffer_conf段则与 VAD/分帧相关frame_duration_ms、window_n、shift_n等描述流式输入的音频分块策略与推理会话配置相互独立。五、配置要点与调优建议结合get_sess实现与服务端配置文件部署时建议关注以下几点CPU 推理默认即 CPU Provider。可调cpu_threads/intra_op_num_threads提升单算子并行度由于服务端推理以单请求延迟为主inter_op_num_threads建议保持默认0由 Runtime 决定过大会引入线程调度开销。GPU 推理将device设为gpu:0按实际卡号调整get_sess会自动携带device_id创建 CUDAExecutionProvider。TensorRT 限制use_trt仅对支持 TensorRT 的模型生效FastSpeech2 与 MB-MelGAN 系列当前不能使用源码注释明确提示配置前应确认模型类别。图优化开关默认ORT_ENABLE_ALL适合绝大多数场景若遇到算子兼容性问题或需要逐算子调试可显式配置graph_optimization_level: 0关闭优化。命名兼容cpu_threads与intra_op_num_threads均可配置get_sess优先读取前者跨引擎复制配置时注意不要两者同时设置造成困惑。六、小结paddlespeech.server.utils.onnx_infer.get_sess是 PaddleSpeech 服务端 ONNX 推理的底层会话工厂一段不足 30 行的实现统一封装了图优化、执行模式、Provider 选择CPU/CUDA/TensorRT与线程数配置被在线 ASRdeepspeech2 onnx与在线 TTSFastSpeech2 系列 onnx 流式声码器引擎复用。理解它的行为就能读懂am_predictor_conf/am_sess_conf/voc_sess_conf等配置段的全部语义进而在实际部署中对推理性能与兼容性进行精准控制。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 在线 ASR ONNX 引擎深度解析基于 onnxruntime 的流式语音识别服务端实现PaddleSpeech 在线 ASR ONNX 引擎深度解析基于 onnxruntime 的流式语音识别服务端实现 本文围绕 PaddleSpeech 服务人工智能语音音频NLP媒体生成使用 Label Studio 与 ReactCode 审阅 Langfuse 追踪数据的完整实战指南使用 Label Studio 与 ReactCode 审阅 Langfuse 追踪数据的完整实战指南 本指南面向 LLM 应用开发者与评估工程师将 Lang人工智能语音音频AutoAgent 会话数据持久化实战通过 config.toml 配置 file_store 与 jwt_secret 实现服务重启后的会话恢复AutoAgent 会话数据持久化实战通过 config.toml 配置 file_store 与 jwt_secret 实现服务重启后的会话恢复 本指南基于人工智能大模型AI AgentAgent 框架工具调用自主智能体RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门