【问题标题】:Where to import tensorflow using ray actors?使用射线演员在哪里导入张量流?
【发布时间】:2020-01-26 17:56:41
【问题描述】:

使用 ray actor 并行运行多个 tensorflow 模型,我问自己在哪里导入 tensorflow:

# [1] maybe import tensorflow here?

@ray.remote(num_cpus=1)
class Remote_Runner:
    # [2] maybe import tensorflow here?
    def __init__(self, weights):
        # [3] maybe import tensorflow here?
        self.model=My_model()
        self.model.set_weights(wegihts)

    def do_something_with_model:
        self.model.do_something()

由于“导入 TensorFlow 和设置全局状态的副作用”,文档中给出的示例提到在 actor 中导入 tensorflow,但仅给出了光线远程函数的示例。那么我应该在 [1]、[2] 或 [3] 甚至其他地方运行“import tensorflow as tf”吗?这里是否有最佳实践可以遵循,[1]、[2] 和 [3] 之间有什么区别,即在每种情况下我如何访问 tensorflow 以及它们何时执行?

【问题讨论】:

    标签: python tensorflow import python-import ray


    【解决方案1】:

    现在可能已解决此问题,但要考虑的最安全的选择是在 [3] 处导入 tensorflow。

    【讨论】:

      【解决方案2】:

      根据 https://docs.ray.io/en/latest/using-ray-with-tensorflow.html 中提到的最佳实践,最好在 My_model() 中导入 tensorflow

      你可以考虑下面的例子

      def create_keras_model():
          from tensorflow import keras
          from tensorflow.keras import layers
          model = keras.Sequential()
          # Adds a densely-connected layer with 64 units to the model:
          model.add(layers.Dense(64, activation="relu", input_shape=(32, )))
          # Add another:
          model.add(layers.Dense(64, activation="relu"))
          # Add a softmax layer with 10 output units:
          model.add(layers.Dense(10, activation="softmax"))
      
          model.compile(
              optimizer=keras.optimizers.RMSprop(0.01),
              loss=keras.losses.categorical_crossentropy,
              metrics=[keras.metrics.categorical_accuracy])
          return model
      
      import ray
      import numpy as np
      
      ray.init()
      
      def random_one_hot_labels(shape):
          n, n_class = shape
          classes = np.random.randint(0, n_class, n)
          labels = np.zeros((n, n_class))
          labels[np.arange(n), classes] = 1
          return labels
      
      
      # Use GPU wth
      # @ray.remote(num_gpus=1)
      @ray.remote
      class Network(object):
          def __init__(self):
              self.model = create_keras_model()
              self.dataset = np.random.random((1000, 32))
              self.labels = random_one_hot_labels((1000, 10))
      
          def train(self):
              history = self.model.fit(self.dataset, self.labels, verbose=False)
              return history.history
      
          def get_weights(self):
              return self.model.get_weights()
      
          def set_weights(self, weights):
              # Note that for simplicity this does not handle the optimizer state.
              self.model.set_weights(weights)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        相关资源
        最近更新 更多