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

咨询个机器学习PAI问题哈:ev 必须定义在特定的scope下吗?

咨询个机器学习PAI问题哈:ev 必须定义在特定的scope下吗?ValueError: colocate_vars_with must only be passed a variable created in this tf.distribute.Strategy.scope(), not:
Failed to execute system command. (exit code: 251.)看着是和我用的分布式策略有关系?

distribution = tf.contrib.distribute.ParameterServerStrategy()

展开
收起
真的很搞笑 2023-11-19 15:08:16 54 0
3 条回答
写回答
取消 提交回答
  • 是的,ev 必须在特定的 scope 下定义。这是因为 tf.distribute.Strategy.scope() 创建了一个作用域,在这个作用域内定义的变量和操作才能被分布式策略正确处理。

    在你提供的代码中,你使用了 tf.contrib.distribute.ParameterServerStrategy(),这是一个参数服务器(Parameter Server)分布式策略。在参数服务器策略中,每个工作节点都需要将模型的参数存储在一个中心位置,称为参数服务器。这个策略通常用于大规模深度学习训练,因为它可以有效地处理大量数据和参数。

    要解决这个问题,你需要确保在 distribution.scope() 的作用域内定义 ev。例如:

    import tensorflow as tf
    
    distribution = tf.contrib.distribute.ParameterServerStrategy()
    
    with distribution.scope():
        ev = ...  # 在这里定义你的变量或操作
    

    这样,ev 就会在参数服务器策略的作用域内定义,从而避免了错误。

    2023-11-29 16:07:18
    赞同 展开评论 打赏
  • 是的,目前不支持,如果你仅仅是想把参数放ps,不用这个Strategy也可以的,此回答整理自钉群“DeepRec用户群”

    2023-11-19 23:27:40
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    看起来您正在使用 TensorFlow 参数服务器(Parameter Server)策略,并遇到了“colocate_vars_with 必须只在当前策略作用域中传递变量”的错误。这是因为 TensorFlow 的某些 API 只能在特定的策略作用域中使用,以确保变量在适当的设备上被分配和训练。
    为了修复此问题,您需要确保您的 ev 变量是在 Parameter Server 策略作用域中定义的,如下所示:

    1. 使用 with 语句定义策略作用域:
    with distribution.scope():
      # 定义变量
      ev = ...
    
    1. 将 ev 变量分配给适合的设备:
    with distribution.scope():
      # 定义变量
      ev = ...
    
    # 在策略作用域外分配变量
    ev = distribution.experimental colocate_variables_with(ev)
    
    2023-11-19 15:26:26
    赞同 展开评论 打赏

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

相关产品

  • 人工智能平台 PAI
  • 热门讨论

    热门文章

    相关电子书

    更多
    大规模机器学习在蚂蚁+阿里的应用 立即下载
    基于Spark的面向十亿级别特征的 大规模机器学习 立即下载
    基于Spark的大规模机器学习在微博的应用 立即下载