开发者社区 > 大数据与机器学习 > 人工智能平台PAI > 正文

机器学习PAI easy rec导出的模型执行tf.graph进行部署优化。大佬们,有研究过的吗?

机器学习PAI easy rec导出的模型执行tf.graph_util.convert_variables_to_constants、optimize_for_inference_lib.optimize_for_inference进行部署优化。大佬们,有研究过的吗?
import tensorflow as tf

model = tf.saved_model.load(
'/data_path/model_esmm_describecargo_v2/m1/1688940978/',
)

展开
收起
真的很搞笑 2023-07-16 18:52:52 101 0
2 条回答
写回答
取消 提交回答
  • 在进行模型部署优化时,确实可以使用tf.graph_util.convert_variables_to_constantsoptimize_for_inference_lib.optimize_for_inference等 TensorFlow 提供的工具和函数。这些工具可以帮助你优化模型以提高推理速度、减少模型大小等。

    下面是一个简单的示例代码,展示了如何使用这些工具来对模型进行部署优化:

    import tensorflow as tf
    from tensorflow.python.framework import graph_util
    from tensorflow.python.tools import optimize_for_inference_lib
    
    # 加载模型
    model = tf.saved_model.load('/data_path/model_esmm_describecargo_v2/m1/1688940978/')
    
    # 将变量转换为常量
    def convert_variables_to_constants(sess, input_graph_def, output_node_names):
        frozen_graph_def = graph_util.convert_variables_to_constants(
            sess,
            input_graph_def,
            output_node_names.split(",")
        )
        return frozen_graph_def
    
    # 进行推理优化
    def optimize_for_inference(frozen_graph_def, input_node_names, output_node_names):
        optimized_graph_def = optimize_for_inference_lib.optimize_for_inference(
            frozen_graph_def,
            input_node_names.split(","),
            output_node_names.split(","),
            tf.float32.as_datatype_enum
        )
        return optimized_graph_def
    
    # 获取计算图的定义
    graph_def = model.signatures['serving_default'].graph.as_graph_def()
    
    # 将变量转换为常量
    frozen_graph_def = convert_variables_to_constants(model, graph_def, "output_node_names")
    
    # 进行推理优化
    optimized_graph_def = optimize_for_inference(frozen_graph_def, "input_node_names", "output_node_names")
    
    # 保存部署优化后的模型
    with tf.io.gfile.GFile('/data_path/exported_model_optimized.pb', 'wb') as f:
        f.write(optimized_graph_def.SerializeToString())
    

    需要注意的是,您需要将代码中的input_node_namesoutput_node_names替换为您实际模型中的输入节点和输出节点的名称。

    这段代码加载了模型,然后使用convert_variables_to_constants函数将变量转换为常量,最后使用optimize_for_inference函数对模型进行推理优化。优化后的模型可以通过SerializeToString()方法序列化,并保存到文件中。

    2023-07-31 17:38:24
    赞同 展开评论 打赏
  • 在tf2中,model = tf.saved_model.load(saved_model_path) 可以直接load saved model ;不需要frozen graph,此回答整理自钉群“【EasyRec】推荐算法交流群”

    2023-07-16 19:06:35
    赞同 展开评论 打赏

人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。

相关产品

  • 人工智能平台 PAI
  • 相关电子书

    更多
    大规模机器学习在蚂蚁+阿里的应用 立即下载
    阿里巴巴机器学习平台AI 立即下载
    机器学习及人机交互实战 立即下载