Tensorflow通信将CPU交叉到多GPU

时间:2017-06-02 02:54:56

标签: multithreading tensorflow tensorflow-serving

来自tensorflow白皮书和来自@mrry的https://devcenter.heroku.com/articles/nodejs-support,tensorFlow添加Rendezvous操作来复制数据跨设备边界,并使用noblocking send, blocking recv来完成实际工作。在张量流中交叉不同设备的通信方法是Send

在从输入数据队列中读取,解析和批处理后,似乎(请纠正我)如果我使用GPU进行训练,批量示例将从CPU发送到GPU。

  1. 我想知道何时使用多GPU,CPU中的批量示例是如何发送到多GPU的? CPU中是否有多个Send操作符,每个操作符都与一个GPU匹配,每个GPU获得一个batch_size示例?或者CPU中只有一个inter_op_parallelism_threads op?

  2. 从文档this answerRecv选项配置并行执行的线程池,如注释所述:

      

    //执行阻塞操作的节点在一个池中排队   // inter_op_parallelism_threads可用于每个流程。

  3. 是否意味着在设置inter_op_parallelism_threads选项时,可以在多线程中执行阻塞操作class SecondViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var textbox1: UILabel! @IBOutlet weak var textbox2: UILabel! @IBOutlet weak var dropdown1: UIPickerView! @IBOutlet weak var dropdown2: UIPickerView! var age = ["10-20", "20-30", "30-40"] var Gender = ["Male", "Female"] func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { var countrows : Int = age.count if pickerView == dropdown2 { countrows = self.Gender.count } return countrows } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView == dropdown1 { let titleRow = age[row] return titleRow } else if pickerView == dropdown2 { let titleRow = Gender[row] return titleRow } return "" } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView == dropdown1 { self.textbox1.text = self.age[row] } else if pickerView == dropdown2 { self.textbox2.text = self.Gender[row] } } }

    如果对问题的描述不清楚,请进一步询问我。感谢。

1 个答案:

答案 0 :(得分:0)

根据我对源代码的深入了解后对tensorflow的理解:

  1. 有多个发送/接收操作。由于为每个跨设备边创建了发送/接收操作对。
  2. Recv是一个异步操作,永远不会阻止执行。当数据为recv op做好准备时,将调用done回调。