当运行TF图时,哪些函数应该使用CPU,哪些函数应该在我们有多GPU时使用GPU?

时间:2017-09-15 14:25:54

标签: tensorflow gpu

我们可以使用 tf.device(' cpu或gpu')来分配不同的设备以在Tensorflow图中执行不同的操作,目前尚不清楚如何划分他们。 其他的事情是,如果我们使用默认的东西,TF是否总是使用GPU,如果有GPU?

更新

何时有两个GPU如何划分操作。 allow_soft_device_placement 可以自动执行此操作吗?

1 个答案:

答案 0 :(得分:3)

在TF中查找设备的工作方式如下:

  1. 检查是否有Apollo GraphQL Dev Tools
  2. 完整性检查是否手动将节点分配给这些设备上的设备devices at all
  3. 更喜欢can really run作为设备放置的提示
  4. 检查consumer nodes只使用有效设备
  5. 使用默认设备all constraints
  6. 有一个可以理解的测试: if no other devices is chosen 归结为

    TEST(VirtualPlacerTest, LocalDevices) {
      // Create a virtual cluster with a local CPU and a local GPU
      std::unordered_map<string, DeviceProperties> devices;
      devices[".../cpu:0"] = cpu_device;
      devices[".../device:GPU:0"] = gpu_device;
    
      NodeDef node;
      node.set_op("Conv2D");
      // node.device() is empty, but GPU is default device if there is.
      EXPECT_EQ("GPU", placer.get_device(node).type());
    
      node.set_device("CPU");
      EXPECT_EQ("CPU", placer.get_device(node).type());
    
      node.set_device("GPU:0");
      EXPECT_EQ("GPU", placer.get_device(node).type());
    
    }
    

    我们从哪里获得默认设备?每个设备都是https://github.com/tensorflow/tensorflow/blob/3bc73f5e2ac437b1d9d559751af789c8c965a7f9/tensorflow/core/grappler/costs/virtual_placer_test.cc#L26-L54,优先级为:

    void DeviceFactory::Register(const string& device_type, DeviceFactory* factory,int priority)
    

    评论registered很有意思,快速here给出了:

    • “CPU”,ThreadPoolDeviceFactory,60
    • “CPU”,GPUCompatibleCPUDeviceFactory,70
    • “GPU”,GPUDeviceFactory,210

    如果可能,TF-placer使用具有更高优先级的设备。 因此,只要有可用的GPU ,就会有针对GPU的操作的注册内核没有进行手动分配=&gt;它使用GPU。

    如果您关心效率,那么您的第二个问题(“如何划分它们”)就无法轻易回答。在大多数情况下,无需将操作放在CPU上。

    根据经验:如果您觉得不需要手动分配设备,请相信幕后的启发式方法。

    编辑:在编辑问题时,以下是其他详细信息:

    soft_device_placement仅为search,无法在预期的设备上运行。考虑在GPU上进行培训并在笔记本电脑上进行推理。由于每个Op-Kernel仅注册到applied to nodes不能直接在不同的GPU之间分配Op(它们是相同的设备类型)。

    主要有{​​{3}}分发培训。你应该关心变量的放置位置。我不确定你在找什么。但TF允许您device type (CPU, GPU)通过所有GPU。

    请允许我再补充一条说明: 由于我只使用two ways,因此我知道它支持balance the placement中的分布式培训,如TensorPack所示。所以说它会关注场景背后的所有这些。