In-graph 与 Between-graph 副本模式
下图显示两者差异,而这边也在进行描述。
In-graph:只有一个 Clinet(主要呼叫tf::Session行程),并将里面变数与 op 指定给对应的 Job 完成,因此资料分发只由一个 Client 完成。这种方式设定简单,其他节点只需要 join 操作,并提供一个 gRPC 位址来等待任务。但是训练资料只在单一节点,因此要把资料分发到不同机器时,会影响平行训练效能。可理解成所有 op 都在同一个 Graph 中,伺服器只需要做join()功能.
Between-graph:多个独立Client 建立相同Graph(包含变数),并透过tf.train.replica_device_setter将这些参数映射到ps 上,即训练的变数储存在Parameter Server,而资料不用分发,资料分片(Shards )会存在个计算节点,因此个节点自己算自己的,算完后,把要更新变数告知Parameter Server 进行更新。适合在 TB 级别的资料量使用,节省大量资料传输时间,也是深度学习推荐模式。
然而又随着各家科技巨头们,纷纷透过开放式原始码方式,释出自家的深度学习与机器学习框架后,使许多中小型企业得以参与这场AI 全民运动,并希望利用该技术从既有的公司资源中,萃取出有价值的模型,来增加公司产品的优势。其中在开源码深度学习框架中,又以 Brain Team 开源的 TensorFlow 最受欢迎,其利用开源方式来获得社群共享的力量,在短短时间内加速了机器学习的进展。
TensorFlow
TensorFlow™是利用资料流图(Data Flow Graphs)来表达数值运算的开放式原始码函式库。资料流图中的节点(Nodes)被用来表示数学运算,而边(Edges)则用来表示在节点之间互相联系的多维资料阵列,即张量(Tensors)。它灵活的架构让你能够在不同平台上执行运算,例如 PC 中的一个或多的 CPU(或GPU)、智慧手持装置与伺服器等。 TensorFlow 最初是机器智能研究所的研究员和工程师开发而成,主要用于机彩票开奖器学习与深度神经网路方面研究。
TensorFlow 其实在意思上是要用两个部分来解释,Tensor 与 Flow:
Tensor:是中文翻译是张量,其实就是一个n维度的阵列或列表。如一维 Tensor 就是向量,二维 Tensor 就是矩阵等等.
Flow:是指 Graph 运算过程中的资料流.
Data Flow Graphs
资料流图(Data Flow Graphs)是一种有向图的节点(Node)与边(Edge)来描述计算过程。图中的节点表示数学操作,亦表示资料I/O 端点; 而边则表示节点之间的关系,用来传递操作之间互相使用的多维阵列(Tensors),而Tensor 是在图中流动的资料表示。一旦节点相连的边传来资料流,这时节点就会被分配到运算装置上异步(节点之间)或同步(节点之内)的执行。