接着切割子图,把模型参数分组在参数办事器上,图计算操作分组在运算Worker上。下图为一种可行的图切割策略:
Distributed Master会根据模型参数的分区情况进行切割边,在Task间插入发送和接收Tensor信息的通信节点,如下图所示:
接着Distributed Master经由过程RegisterGraph办法发送子图分片给Task,如下图所示:
Master经由过程RunGraph触发子图运算,Worker会应用GPU/CPU运算设备履行TensorFlow Kernel运算。在本节点的CPU和GPU之间,应用cudaMemcpyAsync传输数据;在本节点GPU和GPU之间,应用peer-to-peer DMA传输数据,避免经由过程CPU复制数据。TensorFlow应用gRPC(TCP)和RDMA (Converged Ethernet)技巧,实现Worker间的数据通信及传输,如下图所示:
高机能法度榜样设计
TensorFlow内核采取C/C++开辟,并供给了C++,Python,Java,Go说话的Client API。特别是Python API,是今朝主流的TensorFlow模型开辟接口。但为什么还须要采取C++ API去练习模型呢?本文基于如下 两点推敲 ,起首当我们采取Python API去练习模型的时刻,须要赓续地用Python API调用C/C++底层接口,反复的接口调用必定程度上影响了法度榜样的履行机能。更为重要的是,在GPU上练习模型的时刻须要大年夜量的内存交换;如不雅采取C++ API去练习模型,可供给更好的运算机能及更好地控制GPU内存的分派。
下图为Python API的运算架构:在模型练习的每次迭代中,法度榜样经由过程Python API攫取Batch Data,然后经由过程TensorFlow Session Run接口,传递数据给C++,并触发神经收集练习。如下图所示:
下图为C++ API的运算架构:在模型练习的每次迭代中,经由过程C++ API攫取Batch Data后,直接触发模型训疗鹕眭少了不合说话间API接口的轮回调用及数据传输。如下图所示:
下面为应用Python API定义练习模型的示例:
with tf.Session() as sess:
- #定义Placeholder Tensor接入练习数据
- x = tf.placeholder(tf.float32, [None, 32], name="x")
- y = tf.placeholder(tf.float32, [None, 8], name="y")
- #定义练习模型
- w1 = tf.Variable(tf.truncated_normal([32, 16], stddev=0.1))
- b1 = tf.Variable(tf.constant(0.0, shape=[16]))
- w2 = tf.Variable(tf.truncated_normal([16, 8], stddev=0.1))
推荐阅读
物联网(IOT)正大年夜根本上改变着科技与我们日常生活的接洽。大年夜可追踪活动状况的穿戴设备到赞助我们节能的智能恒温器,毋庸置疑物联网晋升了我们的生活品德。在企业中,物联网经由过程主动简化营业,发掘新的营业>>>详细阅读
本文标题:深度学习利器:TensorFlow系统架构及高性能程序设计
地址:http://www.17bianji.com/lsqh/34926.html
1/2 1