graph pp_topology {
	rankdir=BT;
	subgraph cluster_node0 {
		style=filled;
		color=lightgrey;
		node [style=filled, color=white, shape=box];
		label = "机器0"

		pserver0 [label="Parameter \n Server 0"]
		trainer0 [label="Trainer 0"]
	}
	subgraph cluster_node1 {
		style=filled;
		color=lightgrey;
		node [style=filled, color=white, shape=box];
		label = "机器1"

		pserver1 [label="Parameter \n Server 1"]
		trainer1 [label="Trainer 1"]
	}

	subgraph cluster_node2 {
		style=filled;
		color=lightgrey;
		node [style=filled, color=white, shape=box];
		label = "机器2"

		pserver2 [label="Parameter \n Server 2"]
		trainer2 [label="Trainer 2"]
	}

	subgraph cluster_node3 {
		style=filled;
		color=lightgrey;
		node [style=filled, color=white, shape=box];
		label = "机器3"

		pserver3 [label="Parameter \n Server 3"]
		trainer3 [label="Trainer 3"]
	}

	data [label="数据", shape=hexagon]

	trainer0 -- pserver0
	trainer0 -- pserver1
	trainer0 -- pserver2
	trainer0 -- pserver3

	trainer1 -- pserver0
	trainer1 -- pserver1
	trainer1 -- pserver2
	trainer1 -- pserver3

	trainer2 -- pserver0
	trainer2 -- pserver1
	trainer2 -- pserver2
	trainer2 -- pserver3

	trainer3 -- pserver0
	trainer3 -- pserver1
	trainer3 -- pserver2
	trainer3 -- pserver3

	data -- trainer0
	data -- trainer1
	data -- trainer2
	data -- trainer3
}
