Support summary in while loop.
Major changes: 1. For a while loop, if an input is loop invariant and only used in outside compilation, lift it out of the while loop. We only need to send it to host once outside the while loop. 2. If a lifted arg node is further moved out of TPU computation (by MoveHeadOutsideCompilationToHost()), leave a Placeholder outside compilation node in TPU computation. Reconnect lifted arg node and outside compilation node in DistributedTPURewritePass. TODO: 1. Do the same for If/function; 2. Support non-resource input. PiperOrigin-RevId: 255640267
This commit is contained in:
parent
750b4f365b
commit
7d77191f36
@ -409,12 +409,14 @@ Node* KeyPlaceholder(const string& call_node,
|
||||
}
|
||||
|
||||
Node* RecvAtHost(ops::NodeOut key_input, const string& cluster,
|
||||
const string& oc_cluster, absl::Span<const DataType> dtypes,
|
||||
const string& new_func_name, const string& oc_cluster,
|
||||
absl::Span<const DataType> dtypes,
|
||||
const GraphDefBuilder::Options& opts) {
|
||||
if (opts.HaveError()) return nullptr;
|
||||
string key = absl::StrCat("host_compute_channel_", cluster, "_", oc_cluster);
|
||||
string name =
|
||||
absl::StrCat("outside_compilation_", cluster, "_", oc_cluster, "_recv");
|
||||
string key = absl::StrCat("host_compute_channel_", cluster, "_",
|
||||
new_func_name, "_", oc_cluster);
|
||||
string name = absl::StrCat("outside_compilation_", cluster, "_",
|
||||
new_func_name, "_", oc_cluster, "_recv");
|
||||
NodeBuilder node_builder(opts.WithName(name).GetNameForOp("_XlaRecvAtHost"),
|
||||
"_XlaRecvAtHost", opts.op_registry());
|
||||
node_builder.Input(std::move(key_input));
|
||||
@ -427,13 +429,14 @@ Node* RecvAtHost(ops::NodeOut key_input, const string& cluster,
|
||||
}
|
||||
|
||||
Node* SendFromHost(ops::NodeOut key_input, const string& cluster,
|
||||
const string& oc_cluster,
|
||||
const string& new_func_name, const string& oc_cluster,
|
||||
const std::vector<ops::NodeOut>& inputs,
|
||||
const GraphDefBuilder::Options& opts) {
|
||||
if (opts.HaveError()) return nullptr;
|
||||
string key = absl::StrCat("host_compute_channel_", cluster, "_", oc_cluster);
|
||||
string name =
|
||||
absl::StrCat("outside_compilation_", cluster, "_", oc_cluster, "_send");
|
||||
string key = absl::StrCat("host_compute_channel_", cluster, "_",
|
||||
new_func_name, "_", oc_cluster);
|
||||
string name = absl::StrCat("outside_compilation_", cluster, "_",
|
||||
new_func_name, "_", oc_cluster, "_send");
|
||||
NodeBuilder node_builder(opts.WithName(name).GetNameForOp("_XlaSendFromHost"),
|
||||
"_XlaSendFromHost", opts.op_registry());
|
||||
node_builder.Input(inputs);
|
||||
@ -907,21 +910,22 @@ TEST(EncapsulateSubgraphsTest, OneFunctionOneOutside) {
|
||||
GraphDefBuilder shape(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape.opts());
|
||||
Node* recv = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
shape.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv, 0), ops::NodeOut(recv, 1),
|
||||
shape.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = test::function::XTimesTwo();
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"}, {"f_0_retval_retval:float"}, {},
|
||||
@ -939,7 +943,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionOneOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const DataType>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -959,7 +963,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionOneOutside) {
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv, 0), ops::NodeOut(recv, 1),
|
||||
b2.opts()
|
||||
@ -967,9 +971,10 @@ TEST(EncapsulateSubgraphsTest, OneFunctionOneOutside) {
|
||||
.WithControlInputs({recv})
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
Node* send =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* s = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv, send}),
|
||||
@ -1035,24 +1040,24 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv, 0), ops::NodeOut(recv, 1),
|
||||
shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
{
|
||||
GraphDefBuilder shape2(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape2.opts());
|
||||
Node* recv1 = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
shape2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv1, 0), ops::NodeOut(recv1, 1),
|
||||
shape2.opts()
|
||||
@ -1060,7 +1065,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* recv2 = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT, DT_FLOAT},
|
||||
shape2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* g = Binary(e, ops::NodeOut(recv2, 0),
|
||||
shape2.opts()
|
||||
@ -1072,15 +1077,17 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
.WithName("H")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O2"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O2", {g, h},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {g, h},
|
||||
shape2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape2, "F1_O2", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape2, "F1_F1_O2", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph1, shape_inference_graph2;
|
||||
shape_inference_graph1.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph2.set_name("_outside_compilation_shape_inference_F1_O2");
|
||||
shape_inference_graph1.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
shape_inference_graph2.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O2");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"g_0_retval_retval:float", "i_0_retval_retval:float"}, {},
|
||||
@ -1101,7 +1108,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O2"},
|
||||
{"key", "host_compute_channel_F1_F1_O2"},
|
||||
{"shape_inference_graph", shape_inference_graph2},
|
||||
{"shapes", absl::Span<const DataType>({})},
|
||||
{"_outside_compilation_subgraph", "O2"},
|
||||
@ -1116,7 +1123,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph1},
|
||||
{"shapes", absl::Span<const DataType>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -1137,7 +1144,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv1, 0), ops::NodeOut(recv1, 1),
|
||||
b2.opts()
|
||||
@ -1145,12 +1152,13 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
.WithControlInputs({recv1})
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* recv2 = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* g = Binary(e, ops::NodeOut(recv2, 0),
|
||||
b2.opts()
|
||||
@ -1164,7 +1172,7 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O2"));
|
||||
Node* send2 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O2", {g, h},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {g, h},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* s = Sequencer(b2.opts()
|
||||
@ -1249,7 +1257,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1276,7 +1284,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F2_O1"},
|
||||
{"key", "host_compute_channel_F2_F2_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1296,7 +1304,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
Node* key_constant1 =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(
|
||||
ops::NodeOut(key_constant1, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant1, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Binary(ops::NodeOut(recv1, 0), ops::NodeOut(recv1, 1),
|
||||
b2.opts()
|
||||
@ -1304,9 +1312,10 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
.WithControlInputs({recv1})
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant1, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant1, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv1, send1}),
|
||||
"F1");
|
||||
@ -1319,7 +1328,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
Node* key_constant2 =
|
||||
KeyPlaceholder("F2", b2.opts().WithName("F2_key_placeholder"));
|
||||
Node* recv2 = RecvAtHost(
|
||||
ops::NodeOut(key_constant2, 0), "F2", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant2, 0), "F2", "F2", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* h = Binary(recv2, ops::NodeOut(recv2, 1),
|
||||
b2.opts()
|
||||
@ -1327,7 +1336,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
|
||||
.WithAttr("_encapsulate", "F2")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send2 =
|
||||
SendFromHost(ops::NodeOut(key_constant2, 0), "F2", "O1", {h},
|
||||
SendFromHost(ops::NodeOut(key_constant2, 0), "F2", "F2", "O1", {h},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* s2 = Sequencer(
|
||||
@ -1406,7 +1415,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1430,7 +1439,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F2_O1"},
|
||||
{"key", "host_compute_channel_F2_F2_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1449,7 +1458,7 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
|
||||
|
||||
Node* key_constant1 =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant1, 0), "F1", "O1",
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant1, 0), "F1", "F1", "O1",
|
||||
{DT_FLOAT, DT_FLOAT}, b2.opts());
|
||||
Node* e = Binary(ops::NodeOut(recv1, 0), ops::NodeOut(recv1, 1),
|
||||
b2.opts()
|
||||
@ -1457,8 +1466,8 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
|
||||
.WithControlInputs({recv1})
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant1, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant1, 0), "F1", "F1", "O1",
|
||||
{e}, b2.opts().WithControlInput(e));
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv1, send1}),
|
||||
"F1");
|
||||
@ -1470,14 +1479,14 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
|
||||
|
||||
Node* key_constant2 =
|
||||
KeyPlaceholder("F2", b2.opts().WithName("F2_key_placeholder"));
|
||||
Node* recv2 = RecvAtHost(ops::NodeOut(key_constant2, 0), "F2", "O1",
|
||||
Node* recv2 = RecvAtHost(ops::NodeOut(key_constant2, 0), "F2", "F2", "O1",
|
||||
{DT_FLOAT}, b2.opts());
|
||||
Node* h = Unary(recv2, b2.opts()
|
||||
.WithName("H")
|
||||
.WithAttr("_encapsulate", "F2")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send2 = SendFromHost(ops::NodeOut(key_constant2, 0), "F2", "O1", {h},
|
||||
b2.opts());
|
||||
Node* send2 = SendFromHost(ops::NodeOut(key_constant2, 0), "F2", "F2", "O1",
|
||||
{h}, b2.opts());
|
||||
|
||||
Node* s2 = Sequencer(
|
||||
b2.opts().WithName("F2_sequencer").WithControlInputs({recv2, send2}),
|
||||
@ -1540,7 +1549,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputs) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1559,14 +1568,14 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputs) {
|
||||
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1",
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{DT_FLOAT}, b2.opts());
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e}, b2.opts());
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{e}, b2.opts());
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({send1, recv1}),
|
||||
"F1");
|
||||
@ -1630,7 +1639,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlInput) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes",
|
||||
absl::Span<const TensorShapeProto>({shape_proto_expected})},
|
||||
@ -1650,15 +1659,15 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlInput) {
|
||||
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1",
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{DT_FLOAT}, b2.opts());
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithControlInput(recv1)
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e}, b2.opts());
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{e}, b2.opts());
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv1, send1}),
|
||||
"F1");
|
||||
@ -1707,20 +1716,21 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoOutputs) {
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv1, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "f_0_retval_retval:float"}, {},
|
||||
@ -1734,7 +1744,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoOutputs) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -1753,14 +1763,14 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoOutputs) {
|
||||
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1",
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{DT_FLOAT}, b2.opts());
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e}, b2.opts());
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{e}, b2.opts());
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv1, send1}),
|
||||
"F1");
|
||||
@ -1810,20 +1820,21 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlOutput) {
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv1, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "f_0_retval_retval:float"}, {},
|
||||
@ -1841,7 +1852,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlOutput) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -1860,14 +1871,14 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlOutput) {
|
||||
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1",
|
||||
Node* recv1 = RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{DT_FLOAT}, b2.opts());
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e));
|
||||
Node* send1 = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1",
|
||||
{e}, b2.opts().WithControlInput(e));
|
||||
Node* s1 = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv1, send1}),
|
||||
"F1");
|
||||
@ -1923,38 +1934,40 @@ TEST(EncapsulateSubgraphsTest,
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv1, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
{
|
||||
GraphDefBuilder shape2(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape2.opts());
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT},
|
||||
shape2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* g = Unary(ops::NodeOut(recv2, 0), shape2.opts()
|
||||
.WithName("G")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O2"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O2", {g},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {g},
|
||||
shape2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape2, "F1_O2", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape2, "F1_F1_O2", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph1;
|
||||
shape_inference_graph1.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph1.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
NameAttrList shape_inference_graph2;
|
||||
shape_inference_graph2.set_name("_outside_compilation_shape_inference_F1_O2");
|
||||
shape_inference_graph2.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O2");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "h_0_retval_retval:float"}, {},
|
||||
@ -1971,7 +1984,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph1},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -1983,7 +1996,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O2"},
|
||||
{"key", "host_compute_channel_F1_F1_O2"},
|
||||
{"shape_inference_graph", shape_inference_graph2},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O2"},
|
||||
@ -2005,7 +2018,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
@ -2013,10 +2026,10 @@ TEST(EncapsulateSubgraphsTest,
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send1 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* g = Unary(recv2, b2.opts()
|
||||
.WithName("G")
|
||||
@ -2024,7 +2037,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
.WithAttr("_outside", "O2")
|
||||
.WithControlInput(e));
|
||||
Node* send2 =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O2", {g},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {g},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* s1 = Sequencer(b2.opts()
|
||||
.WithName("F1_sequencer")
|
||||
@ -2081,20 +2094,21 @@ TEST(EncapsulateSubgraphsTest,
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv2, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "h_0_retval_retval:float"}, {},
|
||||
@ -2111,7 +2125,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O2"},
|
||||
{"key", "host_compute_channel_F1_F1_O2"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O2"},
|
||||
@ -2126,7 +2140,7 @@ TEST(EncapsulateSubgraphsTest,
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -2146,17 +2160,17 @@ TEST(EncapsulateSubgraphsTest,
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
/*Node* g =*/Unary(recv2, b2.opts()
|
||||
.WithName("G")
|
||||
@ -2223,20 +2237,21 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv2, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "h_0_retval_retval:float"}, {},
|
||||
@ -2250,7 +2265,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -2262,7 +2277,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O2"},
|
||||
{"key", "host_compute_channel_F1_F1_O2"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O2"},
|
||||
@ -2276,7 +2291,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O3"},
|
||||
{"key", "host_compute_channel_F1_F1_O3"},
|
||||
{"shape_inference_graph", NameAttrList()},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O3"},
|
||||
@ -2299,17 +2314,17 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv1 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(recv1, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O2", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O2", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* g = Unary(recv2, b2.opts()
|
||||
.WithName("G")
|
||||
@ -2317,7 +2332,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
|
||||
.WithAttr("_outside", "O2")
|
||||
.WithControlInput(e));
|
||||
Node* recv3 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O3", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O3", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
/*Node* i =*/Binary(recv3, e,
|
||||
b2.opts()
|
||||
@ -2373,20 +2388,21 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputsOrOutputs) {
|
||||
GraphDefBuilder shape1(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape1.opts());
|
||||
Node* recv2 =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(ops::NodeOut(recv2, 0), shape1.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape1.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape1, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"a_0_arg:float", "b_0_arg:float"},
|
||||
{"e_0_retval_retval:float", "f_0_retval_retval:float"}, {},
|
||||
@ -2400,7 +2416,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputsOrOutputs) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const TensorShapeProto>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -2420,14 +2436,14 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputsOrOutputs) {
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv =
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT},
|
||||
RecvAtHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = Unary(recv, b2.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* s = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv, send}),
|
||||
@ -2482,21 +2498,22 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationShapeInference) {
|
||||
GraphDefBuilder shape(GraphDefBuilder::kFailImmediately);
|
||||
Node* key_constant = KeyPlaceholder("F1", shape.opts());
|
||||
Node* recv = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
shape.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = BinaryUnknownShape(recv, ops::NodeOut(recv, 1),
|
||||
shape.opts()
|
||||
.WithName("E")
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
shape.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
TF_EXPECT_OK(
|
||||
AddGraphDefToFunctionLibrary(shape, "F1_O1", &library_expected));
|
||||
AddGraphDefToFunctionLibrary(shape, "F1_F1_O1", &library_expected));
|
||||
}
|
||||
|
||||
NameAttrList shape_inference_graph;
|
||||
shape_inference_graph.set_name("_outside_compilation_shape_inference_F1_O1");
|
||||
shape_inference_graph.set_name(
|
||||
"_outside_compilation_shape_inference_F1_F1_O1");
|
||||
*library_expected.add_function() = test::function::XTimesTwo();
|
||||
*library_expected.add_function() = FunctionDefHelper::Create(
|
||||
"F1", {"b_0_arg:float", "c_0_arg:float"}, {"f_0_retval_retval:float"}, {},
|
||||
@ -2513,7 +2530,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationShapeInference) {
|
||||
{{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
|
||||
{"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
|
||||
{"ancestors", absl::Span<const string>({})},
|
||||
{"key", "host_compute_channel_F1_O1"},
|
||||
{"key", "host_compute_channel_F1_F1_O1"},
|
||||
{"shape_inference_graph", shape_inference_graph},
|
||||
{"shapes", absl::Span<const DataType>({})},
|
||||
{"_outside_compilation_subgraph", "O1"},
|
||||
@ -2534,7 +2551,7 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationShapeInference) {
|
||||
Node* key_constant =
|
||||
KeyPlaceholder("F1", b2.opts().WithName("F1_key_placeholder"));
|
||||
Node* recv = RecvAtHost(
|
||||
ops::NodeOut(key_constant, 0), "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {DT_FLOAT, DT_FLOAT},
|
||||
b2.opts().WithAttr(kXlaHasHostTransferAttrName, true));
|
||||
Node* e = BinaryUnknownShape(recv, ops::NodeOut(recv, 1),
|
||||
b2.opts()
|
||||
@ -2542,9 +2559,10 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationShapeInference) {
|
||||
.WithControlInputs({recv})
|
||||
.WithAttr("_encapsulate", "F1")
|
||||
.WithAttr("_outside", "O1"));
|
||||
Node* send = SendFromHost(ops::NodeOut(key_constant, 0), "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
Node* send =
|
||||
SendFromHost(ops::NodeOut(key_constant, 0), "F1", "F1", "O1", {e},
|
||||
b2.opts().WithControlInput(e).WithAttr(
|
||||
kXlaHasHostTransferAttrName, true));
|
||||
|
||||
Node* s = Sequencer(
|
||||
b2.opts().WithName("F1_sequencer").WithControlInputs({recv, send}),
|
||||
|
@ -315,6 +315,9 @@ const char kOutsideCompilationOriginalNodeAttrName[] =
|
||||
const char kOutsideCompilationSrcOutputAttrName[] = "_xla_oc_to_oc_src_output";
|
||||
const char kXlaControlDependenciesWithinXlaClusterAttrName[] =
|
||||
"_xla_control_dependencies_within_xla_cluster";
|
||||
const char kXlaIsLiftedArgAttrName[] = "_xla_is_lifted_arg";
|
||||
const char kXlaLiftedArgOutsideCompilationAttrName[] = "_xla_lifted_arg_oc";
|
||||
const char kXlaOutsideCompilationInputsAttrName[] = "_xla_oc_inputs";
|
||||
|
||||
Status PerformStaticShapeInferenceBeforeEncapsulation(Graph* g) {
|
||||
// Perform shape inference.
|
||||
|
@ -60,6 +60,23 @@ extern const char kOutsideCompilationSrcOutputAttrName[];
|
||||
// (node names).
|
||||
extern const char kXlaControlDependenciesWithinXlaClusterAttrName[];
|
||||
|
||||
// Attribute indicating that this node is an outside compilation node which is
|
||||
// lifted out of If/While/function node. Attribute value will always be boolean
|
||||
// value "true".
|
||||
extern const char kXlaIsLiftedArgAttrName[];
|
||||
|
||||
// Attribute indicating that this node is a Placeholder node for an _Arg node
|
||||
// lifted out of If/While/function node. Attribute value will be a string, which
|
||||
// is the outside compilation cluster name sending the lifted arg node to host.
|
||||
extern const char kXlaLiftedArgOutsideCompilationAttrName[];
|
||||
|
||||
// Attribute indicating that this is an IdentityN node receiving inputs for a
|
||||
// outside compilation Placeholder node (the original outside compilation node
|
||||
// is moved out of TPU comutation, and we left a Placeholder node there).
|
||||
// Attribute value will be a string, which is the outside compilation cluster
|
||||
// name for the outside compilation Placeholder node.
|
||||
extern const char kXlaOutsideCompilationInputsAttrName[];
|
||||
|
||||
// Information for XLA computation.
|
||||
struct XlaClusterInfo {
|
||||
// Add an explicitly-defined default constructor for this class.
|
||||
|
@ -472,6 +472,163 @@ Status ResetDeviceOrdinalToPlaceholderValue(Graph* g) {
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
Status PostprocessLiftedArgs(Graph* g, FunctionLibraryDefinition* fld) {
|
||||
std::unordered_map<string, Node*> outside_compilation_attr_to_node;
|
||||
for (Node* n : g->op_nodes()) {
|
||||
bool is_lifted_arg;
|
||||
string outside_compilation_attr;
|
||||
if (GetNodeAttr(n->def(), kXlaIsLiftedArgAttrName, &is_lifted_arg).ok() &&
|
||||
GetNodeAttr(n->def(), "_xla_outside_compilation",
|
||||
&outside_compilation_attr)
|
||||
.ok()) {
|
||||
TF_RET_CHECK(n->IsIdentity() || n->type_string() == "Placeholder");
|
||||
outside_compilation_attr_to_node[outside_compilation_attr] = n;
|
||||
}
|
||||
}
|
||||
|
||||
for (Node* n : g->op_nodes()) {
|
||||
if (!HasNodeAttr(n->def(), kXlaHasHostTransferAttrName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (n->type_string() == "While") {
|
||||
// Check if there is any lifted args in body function.
|
||||
NameAttrList body_func;
|
||||
TF_RETURN_IF_ERROR(GetNodeAttr(n->def(), "body", &body_func));
|
||||
const FunctionDef* body_fdef = fld->Find(body_func.name());
|
||||
TF_RET_CHECK(body_fdef);
|
||||
bool has_lifted_args = false;
|
||||
for (const NodeDef& ndef : body_fdef->node_def()) {
|
||||
if (ndef.op() == "Placeholder" &&
|
||||
ndef.attr().find(kXlaLiftedArgOutsideCompilationAttrName) !=
|
||||
ndef.attr().end()) {
|
||||
has_lifted_args = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!has_lifted_args) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Gather all lifted args.
|
||||
std::unique_ptr<FunctionBody> fbody;
|
||||
TF_RETURN_IF_ERROR(FunctionDefToBodyHelper(
|
||||
*body_fdef, AttrSlice(&body_func.attr()), fld, &fbody));
|
||||
Graph* body_graph = fbody->graph;
|
||||
std::vector<std::pair<Node*, Node*>>
|
||||
lifted_arg_node_and_outside_compilation_node;
|
||||
for (Node* n : body_graph->op_nodes()) {
|
||||
string oc_cluster;
|
||||
if (n->type_string() == "Placeholder" &&
|
||||
GetNodeAttr(n->def(), kXlaLiftedArgOutsideCompilationAttrName,
|
||||
&oc_cluster)
|
||||
.ok()) {
|
||||
TF_RET_CHECK(outside_compilation_attr_to_node.find(oc_cluster) !=
|
||||
outside_compilation_attr_to_node.end());
|
||||
lifted_arg_node_and_outside_compilation_node.push_back(
|
||||
{n, outside_compilation_attr_to_node.at(oc_cluster)});
|
||||
}
|
||||
}
|
||||
|
||||
// Append lifted args' types to While node's T attribute.
|
||||
std::vector<DataType> dtypes;
|
||||
TF_RETURN_IF_ERROR(GetNodeAttr(n->def(), "T", &dtypes));
|
||||
int original_arg_count = dtypes.size();
|
||||
for (auto i : lifted_arg_node_and_outside_compilation_node) {
|
||||
DataType dtype;
|
||||
TF_RET_CHECK(i.second->IsIdentity() ||
|
||||
i.second->type_string() == "Placeholder");
|
||||
if (i.second->IsIdentity()) {
|
||||
TF_RETURN_IF_ERROR(GetNodeAttr(i.second->def(), "T", &dtype));
|
||||
} else {
|
||||
TF_RETURN_IF_ERROR(GetNodeAttr(i.second->def(), "dtype", &dtype));
|
||||
}
|
||||
dtypes.push_back(dtype);
|
||||
}
|
||||
n->ClearAttr("T");
|
||||
n->AddAttr("T", dtypes);
|
||||
|
||||
// Add edges from outside compilation nodes to While node.
|
||||
for (int i = original_arg_count; i < dtypes.size(); i++) {
|
||||
Node* outside_compilation_node =
|
||||
lifted_arg_node_and_outside_compilation_node[i - original_arg_count]
|
||||
.second;
|
||||
g->AddEdge(outside_compilation_node, 0, n, i);
|
||||
}
|
||||
|
||||
// In body_graph, create new _Arg/_Retval nodes, and replace lifted arg
|
||||
// nodes with the new _Arg nodes.
|
||||
for (int i = original_arg_count; i < dtypes.size(); i++) {
|
||||
NodeDefBuilder arg_builder(absl::StrCat("arg_", i), "_Arg");
|
||||
arg_builder.Attr("T", dtypes[i]);
|
||||
arg_builder.Attr("index", i);
|
||||
NodeDef arg_def;
|
||||
TF_RETURN_IF_ERROR(arg_builder.Finalize(&arg_def));
|
||||
Status s;
|
||||
Node* arg_node = body_graph->AddNode(arg_def, &s);
|
||||
TF_RETURN_IF_ERROR(s);
|
||||
|
||||
NodeDefBuilder ret_builder(absl::StrCat("ret_", i), "_Retval");
|
||||
ret_builder.Attr("T", dtypes[i]);
|
||||
ret_builder.Attr("index", i);
|
||||
ret_builder.Input(arg_node->name(), 0, dtypes[i]);
|
||||
NodeDef ret_def;
|
||||
TF_RETURN_IF_ERROR(ret_builder.Finalize(&ret_def));
|
||||
Node* ret_node = body_graph->AddNode(ret_def, &s);
|
||||
TF_RETURN_IF_ERROR(s);
|
||||
body_graph->AddEdge(arg_node, 0, ret_node, 0);
|
||||
|
||||
Node* lifted_arg_node =
|
||||
lifted_arg_node_and_outside_compilation_node[i - original_arg_count]
|
||||
.first;
|
||||
std::vector<const Edge*> out_edges(lifted_arg_node->out_edges().begin(),
|
||||
lifted_arg_node->out_edges().end());
|
||||
for (const Edge* e : out_edges) {
|
||||
if (e->IsControlEdge()) {
|
||||
body_graph->AddControlEdge(arg_node, e->dst());
|
||||
} else {
|
||||
body_graph->AddEdge(arg_node, 0, e->dst(), e->dst_input());
|
||||
}
|
||||
}
|
||||
|
||||
body_graph->RemoveNode(lifted_arg_node);
|
||||
}
|
||||
FunctionDef rewritten_body_fdef;
|
||||
TF_RETURN_IF_ERROR(GraphToFunctionDef(*body_graph, body_func.name(),
|
||||
&rewritten_body_fdef));
|
||||
TF_RETURN_IF_ERROR(
|
||||
fld->ReplaceFunction(body_func.name(), rewritten_body_fdef));
|
||||
|
||||
// In cond_graph, add new _Arg nodes.
|
||||
NameAttrList cond_func;
|
||||
TF_RETURN_IF_ERROR(GetNodeAttr(n->def(), "cond", &cond_func));
|
||||
const FunctionDef* cond_fdef = fld->Find(cond_func.name());
|
||||
TF_RET_CHECK(cond_fdef);
|
||||
std::unique_ptr<FunctionBody> cond_fbody;
|
||||
TF_RETURN_IF_ERROR(FunctionDefToBodyHelper(
|
||||
*cond_fdef, AttrSlice(&cond_func.attr()), fld, &cond_fbody));
|
||||
Graph* cond_graph = cond_fbody->graph;
|
||||
for (int i = original_arg_count; i < dtypes.size(); i++) {
|
||||
NodeDefBuilder arg_builder(absl::StrCat("arg_", i), "_Arg");
|
||||
arg_builder.Attr("T", dtypes[i]);
|
||||
arg_builder.Attr("index", i);
|
||||
NodeDef arg_def;
|
||||
TF_RETURN_IF_ERROR(arg_builder.Finalize(&arg_def));
|
||||
Status s;
|
||||
cond_graph->AddNode(arg_def, &s);
|
||||
TF_RETURN_IF_ERROR(s);
|
||||
}
|
||||
FunctionDef rewritten_cond_fdef;
|
||||
TF_RETURN_IF_ERROR(GraphToFunctionDef(*cond_graph, cond_func.name(),
|
||||
&rewritten_cond_fdef));
|
||||
TF_RETURN_IF_ERROR(
|
||||
fld->ReplaceFunction(cond_func.name(), rewritten_cond_fdef));
|
||||
}
|
||||
}
|
||||
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
// For an XLA computation, builds host side graph given all outside compilation
|
||||
// graphs inside it. The host side graph contains:
|
||||
// 1) a "sequencer" node (we will add control edge between XlaRecvAtHost and
|
||||
@ -600,6 +757,9 @@ Status ConstructHostGraph(
|
||||
TF_RETURN_IF_ERROR(PostprocessEdgesBetweenOutsideCompilations(
|
||||
&host_graph, outside_compilation_attr_name));
|
||||
|
||||
// Postprocess lifted arg nodes.
|
||||
TF_RETURN_IF_ERROR(PostprocessLiftedArgs(&host_graph, fld));
|
||||
|
||||
if (VLOG_IS_ON(4)) {
|
||||
DumpGraphToFile(absl::StrCat("extract_outside_compilation_host_graph_for_",
|
||||
xla_cluster_name),
|
||||
@ -1483,7 +1643,8 @@ Status RewriteOutsideCompilationSubgraphFn::operator()(
|
||||
std::unique_ptr<Graph>* graph, std::vector<int>* input_permutation,
|
||||
std::vector<int>* output_permutation, NodeDef* node_def) {
|
||||
string old_name = node_def->op();
|
||||
string new_name = absl::StrCat(xla_cluster_name_, "_", old_name);
|
||||
string new_name =
|
||||
absl::StrCat(xla_cluster_name_, "_", new_function_name_, "_", old_name);
|
||||
node_def->set_op(new_name);
|
||||
node_def->set_name(new_name);
|
||||
|
||||
@ -1632,7 +1793,8 @@ Status ExtractOutsideCompilationForFunction(
|
||||
// Encapsulate outside_compilation cluster into function call node.
|
||||
std::unique_ptr<Graph> graph_out;
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn(
|
||||
xla_cluster_attr_name, outside_compilation_attr_name, xla_cluster_name);
|
||||
xla_cluster_attr_name, outside_compilation_attr_name, xla_cluster_name,
|
||||
new_func_name);
|
||||
TF_RETURN_IF_ERROR(EncapsulateSubgraphsInFunctions(
|
||||
outside_compilation_attr_name, *fbody->graph, rewrite_fn,
|
||||
/*reuse_existing_functions=*/true, &graph_out, fld));
|
||||
|
@ -46,10 +46,11 @@ class RewriteOutsideCompilationSubgraphFn {
|
||||
RewriteOutsideCompilationSubgraphFn(
|
||||
const string& xla_cluster_attr_name,
|
||||
const string& outside_compilation_attr_name,
|
||||
const string& xla_cluster_name)
|
||||
const string& xla_cluster_name, const string& new_function_name)
|
||||
: xla_cluster_attr_name_(xla_cluster_attr_name),
|
||||
outside_compilation_attr_name_(outside_compilation_attr_name),
|
||||
xla_cluster_name_(xla_cluster_name) {}
|
||||
xla_cluster_name_(xla_cluster_name),
|
||||
new_function_name_(new_function_name) {}
|
||||
|
||||
Status operator()(const std::vector<OutputTensor>&,
|
||||
std::unique_ptr<Graph>* graph,
|
||||
@ -60,6 +61,7 @@ class RewriteOutsideCompilationSubgraphFn {
|
||||
string xla_cluster_attr_name_;
|
||||
string outside_compilation_attr_name_;
|
||||
string xla_cluster_name_;
|
||||
string new_function_name_;
|
||||
};
|
||||
|
||||
// For an XLA computation function, replace all outside compilations with
|
||||
|
@ -57,7 +57,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, Basic) {
|
||||
add_node->AddAttr(kXlaConnectedToXlaComputationAttrName, "cluster");
|
||||
add_node->AddAttr(kXlaConnectedFromXlaComputationAttrName, "cluster");
|
||||
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster");
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster", "");
|
||||
std::vector<OutputTensor> arg_source_tensors;
|
||||
NodeDef call_node_def;
|
||||
call_node_def.set_op("0");
|
||||
@ -72,7 +72,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, Basic) {
|
||||
for (Node *n : g->nodes()) {
|
||||
EXPECT_NE(n->type_string(), "_Arg");
|
||||
}
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster_0_recv"];
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster__0_recv"];
|
||||
EXPECT_NE(recv_at_host, nullptr);
|
||||
std::vector<DataType> recv_at_host_dtypes;
|
||||
TF_CHECK_OK(
|
||||
@ -85,7 +85,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, Basic) {
|
||||
for (Node *n : g->nodes()) {
|
||||
EXPECT_NE(n->type_string(), "_Retval");
|
||||
}
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster_0_send"];
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster__0_send"];
|
||||
EXPECT_NE(send_from_host, nullptr);
|
||||
std::vector<DataType> send_from_host_dtypes;
|
||||
TF_CHECK_OK(
|
||||
@ -118,7 +118,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, Basic) {
|
||||
TF_CHECK_OK(GetNodeAttr(AttrSlice(&call_node_def.attr()),
|
||||
"shape_inference_graph", &shape_inference_graph));
|
||||
EXPECT_EQ(shape_inference_graph.name(),
|
||||
"_outside_compilation_shape_inference_cluster_0");
|
||||
"_outside_compilation_shape_inference_cluster__0");
|
||||
}
|
||||
|
||||
TEST(RewriteOutsideCompilationSubgraphFnTest, NoSendFromHost) {
|
||||
@ -128,7 +128,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoSendFromHost) {
|
||||
std::unique_ptr<Graph> g(new Graph(OpRegistry::Global()));
|
||||
TF_CHECK_OK(s.ToGraph(g.get()));
|
||||
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster");
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster", "");
|
||||
std::vector<OutputTensor> arg_source_tensors;
|
||||
NodeDef call_node_def;
|
||||
call_node_def.set_op("0");
|
||||
@ -139,9 +139,9 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoSendFromHost) {
|
||||
// Check key placeholder and RecvAtHost is present, but SendFromHost is not.
|
||||
Node *key_placeholder = node_name_image["cluster_key_placeholder"];
|
||||
EXPECT_NE(key_placeholder, nullptr);
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster_0_recv"];
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster__0_recv"];
|
||||
EXPECT_NE(recv_at_host, nullptr);
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster_0_send"];
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster__0_send"];
|
||||
EXPECT_EQ(send_from_host, nullptr);
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoRecvAtHost) {
|
||||
std::unique_ptr<Graph> g(new Graph(OpRegistry::Global()));
|
||||
TF_CHECK_OK(s.ToGraph(g.get()));
|
||||
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster");
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster", "");
|
||||
std::vector<OutputTensor> arg_source_tensors;
|
||||
NodeDef call_node_def;
|
||||
call_node_def.set_op("0");
|
||||
@ -165,9 +165,9 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoRecvAtHost) {
|
||||
// Check key placeholder and SendFromHost is present, but RecvAtHost is not.
|
||||
Node *key_placeholder = node_name_image["cluster_key_placeholder"];
|
||||
EXPECT_NE(key_placeholder, nullptr);
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster_0_recv"];
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster__0_recv"];
|
||||
EXPECT_EQ(recv_at_host, nullptr);
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster_0_send"];
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster__0_send"];
|
||||
EXPECT_NE(send_from_host, nullptr);
|
||||
}
|
||||
|
||||
@ -178,7 +178,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoKeyPlaceholder) {
|
||||
std::unique_ptr<Graph> g(new Graph(OpRegistry::Global()));
|
||||
TF_CHECK_OK(s.ToGraph(g.get()));
|
||||
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster");
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster", "");
|
||||
std::vector<OutputTensor> arg_source_tensors;
|
||||
NodeDef call_node_def;
|
||||
call_node_def.set_op("0");
|
||||
@ -189,9 +189,9 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, NoKeyPlaceholder) {
|
||||
// Check key placeholder/RecvAtHost/SendFromHost are not present.
|
||||
Node *key_placeholder = node_name_image["cluster_key_placeholder"];
|
||||
EXPECT_EQ(key_placeholder, nullptr);
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster_0_recv"];
|
||||
Node *recv_at_host = node_name_image["outside_compilation_cluster__0_recv"];
|
||||
EXPECT_EQ(recv_at_host, nullptr);
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster_0_send"];
|
||||
Node *send_from_host = node_name_image["outside_compilation_cluster__0_send"];
|
||||
EXPECT_EQ(send_from_host, nullptr);
|
||||
}
|
||||
|
||||
@ -210,7 +210,7 @@ TEST(RewriteOutsideCompilationSubgraphFnTest, ShapesInferred) {
|
||||
const0_node->AddAttr(kXlaInferredShapesAttrName,
|
||||
std::vector<PartialTensorShape>{shape});
|
||||
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster");
|
||||
RewriteOutsideCompilationSubgraphFn rewrite_fn("_xla", "_oc", "cluster", "");
|
||||
std::vector<OutputTensor> arg_source_tensors;
|
||||
NodeDef call_node_def;
|
||||
call_node_def.set_op("0");
|
||||
|
@ -1,273 +1,273 @@
|
||||
tensorflow/third_party/systemlibs/nsync.BUILD
|
||||
tensorflow/third_party/systemlibs/absl_py.absl.flags.BUILD
|
||||
tensorflow/third_party/systemlibs/google_cloud_cpp.google.cloud.bigtable.BUILD
|
||||
tensorflow/third_party/systemlibs/build_defs.bzl.tpl
|
||||
tensorflow/third_party/systemlibs/curl.BUILD
|
||||
tensorflow/third_party/systemlibs/cython.BUILD
|
||||
tensorflow/third_party/systemlibs/astor.BUILD
|
||||
tensorflow/third_party/systemlibs/jsoncpp.BUILD
|
||||
tensorflow/third_party/systemlibs/png.BUILD
|
||||
tensorflow/third_party/systemlibs/pcre.BUILD
|
||||
tensorflow/third_party/systemlibs/grpc.BUILD
|
||||
tensorflow/third_party/systemlibs/protobuf.BUILD
|
||||
tensorflow/third_party/systemlibs/double_conversion.BUILD
|
||||
tensorflow/third_party/systemlibs/six.BUILD
|
||||
tensorflow/third_party/systemlibs/zlib.BUILD
|
||||
tensorflow/third_party/systemlibs/lmdb.BUILD
|
||||
tensorflow/third_party/systemlibs/sqlite.BUILD
|
||||
tensorflow/third_party/systemlibs/gast.BUILD
|
||||
tensorflow/third_party/systemlibs/absl_py.BUILD
|
||||
tensorflow/third_party/systemlibs/boringssl.BUILD
|
||||
tensorflow/third_party/systemlibs/BUILD.tpl
|
||||
tensorflow/third_party/systemlibs/BUILD
|
||||
tensorflow/third_party/systemlibs/termcolor.BUILD
|
||||
tensorflow/third_party/systemlibs/gif.BUILD
|
||||
tensorflow/third_party/systemlibs/protobuf.bzl
|
||||
tensorflow/third_party/systemlibs/snappy.BUILD
|
||||
tensorflow/third_party/systemlibs/googleapis.BUILD
|
||||
tensorflow/third_party/systemlibs/opt_einsum.BUILD
|
||||
tensorflow/third_party/systemlibs/google_cloud_cpp.BUILD
|
||||
tensorflow/third_party/systemlibs/re2.BUILD
|
||||
tensorflow/third_party/systemlibs/swig.BUILD
|
||||
tensorflow/third_party/systemlibs/syslibs_configure.bzl
|
||||
tensorflow/third_party/systemlibs/absl_py.absl.testing.BUILD
|
||||
tensorflow/third_party/pprof.BUILD
|
||||
tensorflow/third_party/toolchains/remote/execution.bzl.tpl
|
||||
tensorflow/third_party/toolchains/remote/BUILD.tpl
|
||||
tensorflow/third_party/toolchains/remote/BUILD
|
||||
tensorflow/third_party/toolchains/remote/configure.bzl
|
||||
tensorflow/third_party/toolchains/cpus/py3/BUILD
|
||||
tensorflow/third_party/toolchains/cpus/py/BUILD
|
||||
tensorflow/contrib/tpu/profiler/pip_package/BUILD
|
||||
tensorflow/contrib/tpu/profiler/pip_package/setup.py
|
||||
tensorflow/contrib/tpu/profiler/pip_package/README
|
||||
tensorflow/contrib/tpu/profiler/pip_package/build_pip_package.sh
|
||||
tensorflow/contrib/tpu/profiler/pip_package/cloud_tpu_profiler/main.py
|
||||
tensorflow/contrib/tpu/profiler/pip_package/cloud_tpu_profiler/__init__.py
|
||||
tensorflow/contrib/mpi/BUILD
|
||||
tensorflow/stream_executor/build_defs.bzl
|
||||
tensorflow/python/autograph/core/config.py
|
||||
tensorflow/tools/ci_build/remote/BUILD
|
||||
tensorflow/tools/pip_package/README
|
||||
tensorflow/tools/pip_package/MANIFEST.in
|
||||
tensorflow/tools/pip_package/simple_console.py
|
||||
tensorflow/tools/pip_package/build_pip_package.sh
|
||||
tensorflow/tools/pip_package/check_load_py_test.py
|
||||
tensorflow/tools/pip_package/pip_smoke_test.py
|
||||
tensorflow/tools/pip_package/simple_console_for_windows.py
|
||||
tensorflow/tools/pip_package/setup.py
|
||||
tensorflow/tools/pip_package/BUILD
|
||||
tensorflow/tools/lib_package/concat_licenses.sh
|
||||
tensorflow/tools/lib_package/libtensorflow_test.c
|
||||
tensorflow/tools/lib_package/LibTensorFlowTest.java
|
||||
tensorflow/tools/lib_package/BUILD
|
||||
tensorflow/tools/lib_package/libtensorflow_test.sh
|
||||
tensorflow/tools/lib_package/README.md
|
||||
tensorflow/tools/lib_package/libtensorflow_java_test.sh
|
||||
tensorflow/tools/def_file_filter/def_file_filter_configure.bzl
|
||||
tensorflow/tools/def_file_filter/BUILD
|
||||
tensorflow/tools/def_file_filter/BUILD.tpl
|
||||
tensorflow/tools/def_file_filter/def_file_filter.py.tpl
|
||||
tensorflow/third_party/mkl/MKL_LICENSE
|
||||
tensorflow/third_party/mkl/LICENSE
|
||||
tensorflow/third_party/mkl/BUILD
|
||||
tensorflow/third_party/mkl/mkl.BUILD
|
||||
tensorflow/third_party/mkl/build_defs.bzl
|
||||
tensorflow/third_party/backports_weakref.BUILD
|
||||
tensorflow/third_party/toolchains/clang6/BUILD
|
||||
tensorflow/third_party/toolchains/clang6/README.md
|
||||
tensorflow/third_party/toolchains/clang6/repo.bzl
|
||||
tensorflow/third_party/toolchains/clang6/CROSSTOOL.tpl
|
||||
tensorflow/third_party/toolchains/clang6/clang.BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/dummy_toolchain.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/gcc7_manylinux2010-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/gcc7_manylinux2010-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/gcc-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/gcc-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/workspace.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/containers.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/generate.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/archives.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/py/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/dummy_toolchain.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/bazel_025/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/py36/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/BUILD
|
||||
tensorflow/third_party/toolchains/cpus/arm/arm_compiler_configure.bzl
|
||||
tensorflow/third_party/toolchains/cpus/arm/CROSSTOOL.tpl
|
||||
tensorflow/third_party/toolchains/cpus/arm/BUILD
|
||||
tensorflow/third_party/toolchains/cpus/py3/BUILD
|
||||
tensorflow/third_party/toolchains/cpus/py/BUILD
|
||||
tensorflow/third_party/toolchains/remote/configure.bzl
|
||||
tensorflow/third_party/toolchains/remote/BUILD.tpl
|
||||
tensorflow/third_party/toolchains/remote/BUILD
|
||||
tensorflow/third_party/toolchains/remote/execution.bzl.tpl
|
||||
tensorflow/third_party/toolchains/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/clang/dummy_toolchain.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/gcc7_manylinux2010-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/gcc7_manylinux2010-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu16.04/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/bazel_025/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/win_1803/py36/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/generate/containers.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/workspace.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/archives.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/generate.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/generate/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/py/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7/dummy_toolchain.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/gcc7-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/centos6/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/py3/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/gcc-nvcc-cuda10.0/cc_toolchain_config.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/gcc-nvcc-cuda10.0/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/cuda10.0-cudnn7/cuda/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/cuda10.0-cudnn7/cuda/BUILD
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/tensorrt5/build_defs.bzl
|
||||
tensorflow/third_party/toolchains/preconfig/ubuntu14.04/tensorrt5/BUILD
|
||||
tensorflow/third_party/toolchains/clang6/repo.bzl
|
||||
tensorflow/third_party/toolchains/clang6/CROSSTOOL.tpl
|
||||
tensorflow/third_party/toolchains/clang6/BUILD
|
||||
tensorflow/third_party/toolchains/clang6/clang.BUILD
|
||||
tensorflow/third_party/toolchains/clang6/README.md
|
||||
tensorflow/third_party/farmhash.BUILD
|
||||
tensorflow/third_party/git/BUILD.tpl
|
||||
tensorflow/third_party/git/git_configure.bzl
|
||||
tensorflow/third_party/git/BUILD
|
||||
tensorflow/third_party/cub.BUILD
|
||||
tensorflow/third_party/gpus/cuda_configure.bzl
|
||||
tensorflow/third_party/gpus/rocm/build_defs.bzl.tpl
|
||||
tensorflow/third_party/gpus/rocm/BUILD.tpl
|
||||
tensorflow/third_party/gpus/rocm/BUILD
|
||||
tensorflow/third_party/gpus/rocm/rocm_config.h.tpl
|
||||
tensorflow/third_party/gpus/rocm_configure.bzl
|
||||
tensorflow/third_party/gpus/find_cuda_config.py
|
||||
tensorflow/third_party/gpus/BUILD
|
||||
tensorflow/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_rocm.tpl
|
||||
tensorflow/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc.tpl
|
||||
tensorflow/third_party/gpus/crosstool/LICENSE
|
||||
tensorflow/third_party/gpus/crosstool/windows/msvc_wrapper_for_nvcc.py.tpl
|
||||
tensorflow/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc.tpl
|
||||
tensorflow/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_rocm.tpl
|
||||
tensorflow/third_party/gpus/crosstool/BUILD.tpl
|
||||
tensorflow/third_party/gpus/crosstool/BUILD
|
||||
tensorflow/third_party/gpus/cuda/build_defs.bzl.tpl
|
||||
tensorflow/third_party/gpus/cuda/LICENSE
|
||||
tensorflow/third_party/gpus/cuda/BUILD.tpl
|
||||
tensorflow/third_party/gpus/cuda/BUILD.windows.tpl
|
||||
tensorflow/third_party/gpus/cuda/cuda_config.h.tpl
|
||||
tensorflow/third_party/gpus/cuda/BUILD.tpl
|
||||
tensorflow/third_party/gpus/cuda/BUILD
|
||||
tensorflow/third_party/gpus/BUILD
|
||||
tensorflow/third_party/common.bzl
|
||||
tensorflow/third_party/mlir/tblgen.bzl
|
||||
tensorflow/third_party/mlir/bindings/python/BUILD
|
||||
tensorflow/third_party/mlir/BUILD
|
||||
tensorflow/third_party/mlir/mlir_configure.bzl
|
||||
tensorflow/third_party/mlir/test/BUILD
|
||||
tensorflow/third_party/tflite_mobilenet_quant.BUILD
|
||||
tensorflow/third_party/linenoise.BUILD
|
||||
tensorflow/third_party/curl.BUILD
|
||||
tensorflow/third_party/mkl_dnn/LICENSE
|
||||
tensorflow/third_party/mkl_dnn/mkldnn.BUILD
|
||||
tensorflow/third_party/fft2d/LICENSE
|
||||
tensorflow/third_party/fft2d/fft2d.BUILD
|
||||
tensorflow/third_party/fft2d/fft2d.h
|
||||
tensorflow/third_party/fft2d/fft.h
|
||||
tensorflow/third_party/fft2d/BUILD
|
||||
tensorflow/third_party/ngraph/LICENSE
|
||||
tensorflow/third_party/ngraph/build_defs.bzl
|
||||
tensorflow/third_party/ngraph/tbb.BUILD
|
||||
tensorflow/third_party/ngraph/ngraph.BUILD
|
||||
tensorflow/third_party/ngraph/nlohmann_json.BUILD
|
||||
tensorflow/third_party/ngraph/BUILD
|
||||
tensorflow/third_party/ngraph/ngraph_tf.BUILD
|
||||
tensorflow/third_party/ngraph/NGRAPH_LICENSE
|
||||
tensorflow/third_party/grpc/BUILD
|
||||
tensorflow/third_party/gpus/cuda/build_defs.bzl.tpl
|
||||
tensorflow/third_party/gpus/rocm/rocm_config.h.tpl
|
||||
tensorflow/third_party/gpus/rocm/BUILD
|
||||
tensorflow/third_party/gpus/rocm/BUILD.tpl
|
||||
tensorflow/third_party/gpus/rocm/build_defs.bzl.tpl
|
||||
tensorflow/third_party/gpus/cuda_configure.bzl
|
||||
tensorflow/third_party/gpus/find_cuda_config.py
|
||||
tensorflow/third_party/gpus/rocm_configure.bzl
|
||||
tensorflow/third_party/snappy.BUILD
|
||||
tensorflow/third_party/cython.BUILD
|
||||
tensorflow/third_party/icu/udata.patch
|
||||
tensorflow/third_party/astor.BUILD
|
||||
tensorflow/third_party/jsoncpp.BUILD
|
||||
tensorflow/third_party/sycl/crosstool/BUILD
|
||||
tensorflow/third_party/llvm/llvm.autogenerated.BUILD
|
||||
tensorflow/third_party/llvm/expand_cmake_vars.py
|
||||
tensorflow/third_party/llvm/llvm.bzl
|
||||
tensorflow/third_party/llvm/BUILD
|
||||
tensorflow/third_party/png.BUILD
|
||||
tensorflow/third_party/arm_neon_2_x86_sse.BUILD
|
||||
tensorflow/third_party/codegen.BUILD
|
||||
tensorflow/third_party/enum34.BUILD
|
||||
tensorflow/third_party/kafka/config.patch
|
||||
tensorflow/third_party/kafka/BUILD
|
||||
tensorflow/third_party/pcre.BUILD
|
||||
tensorflow/third_party/mpi/BUILD
|
||||
tensorflow/third_party/mpi/.gitignore
|
||||
tensorflow/third_party/clang_toolchain/BUILD
|
||||
tensorflow/third_party/clang_toolchain/download_clang.bzl
|
||||
tensorflow/third_party/clang_toolchain/cc_configure_clang.bzl
|
||||
tensorflow/third_party/tflite_ovic_testdata.BUILD
|
||||
tensorflow/third_party/repo.bzl
|
||||
tensorflow/third_party/png_fix_rpi.patch
|
||||
tensorflow/third_party/py/python_configure.bzl
|
||||
tensorflow/third_party/py/BUILD.tpl
|
||||
tensorflow/third_party/py/BUILD
|
||||
tensorflow/third_party/py/numpy/BUILD
|
||||
tensorflow/third_party/double_conversion.BUILD
|
||||
tensorflow/third_party/six.BUILD
|
||||
tensorflow/third_party/zlib.BUILD
|
||||
tensorflow/third_party/lmdb.BUILD
|
||||
tensorflow/third_party/nanopb.BUILD
|
||||
tensorflow/third_party/pybind11.BUILD
|
||||
tensorflow/third_party/android/android.bzl.tpl
|
||||
tensorflow/third_party/android/BUILD
|
||||
tensorflow/third_party/android/android_configure.BUILD.tpl
|
||||
tensorflow/third_party/android/android_configure.bzl
|
||||
tensorflow/third_party/tflite_mobilenet_float.BUILD
|
||||
tensorflow/third_party/sqlite.BUILD
|
||||
tensorflow/third_party/tensorrt/build_defs.bzl.tpl
|
||||
tensorflow/third_party/tensorrt/LICENSE
|
||||
tensorflow/third_party/tensorrt/tensorrt_configure.bzl
|
||||
tensorflow/third_party/tensorrt/tensorrt/include/tensorrt_config.h.tpl
|
||||
tensorflow/third_party/tensorrt/BUILD.tpl
|
||||
tensorflow/third_party/tensorrt/BUILD
|
||||
tensorflow/third_party/gast.BUILD
|
||||
tensorflow/third_party/mpi_collectives/BUILD
|
||||
tensorflow/third_party/libxsmm.BUILD
|
||||
tensorflow/third_party/eigen.BUILD
|
||||
tensorflow/third_party/com_google_absl.BUILD
|
||||
tensorflow/third_party/eigen3/LICENSE
|
||||
tensorflow/third_party/eigen3/gpu_packet_math.patch
|
||||
tensorflow/third_party/eigen3/BUILD
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/MatrixFunctions
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/SpecialFunctions
|
||||
tensorflow/third_party/farmhash.BUILD
|
||||
tensorflow/third_party/eigen3/Eigen/Cholesky
|
||||
tensorflow/third_party/eigen3/Eigen/QR
|
||||
tensorflow/third_party/eigen3/Eigen/LU
|
||||
tensorflow/third_party/eigen3/Eigen/Core
|
||||
tensorflow/third_party/eigen3/Eigen/SVD
|
||||
tensorflow/third_party/eigen3/Eigen/Eigenvalues
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/Tensor
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/PacketMathAVX512.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProduct.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProductAVX2.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/TypeCastingAVX512.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/PacketMathAVX2.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/TypeCastingAVX2.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProductNEON.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProduct.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/FixedPointTypes.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatVecProduct.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProductNEON.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/TypeCastingAVX2.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/src/FixedPoint/MatMatProductAVX2.h
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/ThreadPool
|
||||
tensorflow/third_party/eigen3/Eigen/QR
|
||||
tensorflow/third_party/eigen3/Eigen/SVD
|
||||
tensorflow/third_party/eigen3/Eigen/LU
|
||||
tensorflow/third_party/eigen3/Eigen/Cholesky
|
||||
tensorflow/third_party/eigen3/Eigen/Eigenvalues
|
||||
tensorflow/third_party/eigen3/Eigen/Core
|
||||
tensorflow/third_party/BUILD
|
||||
tensorflow/third_party/termcolor.BUILD
|
||||
tensorflow/third_party/gif.BUILD
|
||||
tensorflow/third_party/tflite_mobilenet.BUILD
|
||||
tensorflow/third_party/__init__.py
|
||||
tensorflow/third_party/mkl/LICENSE
|
||||
tensorflow/third_party/mkl/build_defs.bzl
|
||||
tensorflow/third_party/mkl/mkl.BUILD
|
||||
tensorflow/third_party/mkl/MKL_LICENSE
|
||||
tensorflow/third_party/mkl/BUILD
|
||||
tensorflow/third_party/nccl/build_defs.bzl.tpl
|
||||
tensorflow/third_party/nccl/LICENSE
|
||||
tensorflow/third_party/nccl/archive.patch
|
||||
tensorflow/third_party/nccl/nccl_configure.bzl
|
||||
tensorflow/third_party/nccl/archive.BUILD
|
||||
tensorflow/third_party/nccl/BUILD
|
||||
tensorflow/third_party/nccl/system.BUILD.tpl
|
||||
tensorflow/third_party/snappy.BUILD
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/SpecialFunctions
|
||||
tensorflow/third_party/eigen3/unsupported/Eigen/MatrixFunctions
|
||||
tensorflow/third_party/eigen3/gpu_packet_math.patch
|
||||
tensorflow/third_party/eigen3/LICENSE
|
||||
tensorflow/third_party/eigen3/BUILD
|
||||
tensorflow/third_party/systemlibs/build_defs.bzl.tpl
|
||||
tensorflow/third_party/systemlibs/absl_py.BUILD
|
||||
tensorflow/third_party/systemlibs/curl.BUILD
|
||||
tensorflow/third_party/systemlibs/termcolor.BUILD
|
||||
tensorflow/third_party/systemlibs/absl_py.absl.flags.BUILD
|
||||
tensorflow/third_party/systemlibs/grpc.BUILD
|
||||
tensorflow/third_party/systemlibs/swig.BUILD
|
||||
tensorflow/third_party/systemlibs/protobuf.bzl
|
||||
tensorflow/third_party/systemlibs/protobuf.BUILD
|
||||
tensorflow/third_party/systemlibs/BUILD
|
||||
tensorflow/third_party/systemlibs/google_cloud_cpp.BUILD
|
||||
tensorflow/third_party/systemlibs/astor.BUILD
|
||||
tensorflow/third_party/systemlibs/six.BUILD
|
||||
tensorflow/third_party/systemlibs/opt_einsum.BUILD
|
||||
tensorflow/third_party/systemlibs/absl_py.absl.testing.BUILD
|
||||
tensorflow/third_party/systemlibs/boringssl.BUILD
|
||||
tensorflow/third_party/systemlibs/nsync.BUILD
|
||||
tensorflow/third_party/systemlibs/google_cloud_cpp.google.cloud.bigtable.BUILD
|
||||
tensorflow/third_party/systemlibs/gif.BUILD
|
||||
tensorflow/third_party/systemlibs/pcre.BUILD
|
||||
tensorflow/third_party/systemlibs/BUILD.tpl
|
||||
tensorflow/third_party/systemlibs/snappy.BUILD
|
||||
tensorflow/third_party/systemlibs/gast.BUILD
|
||||
tensorflow/third_party/systemlibs/cython.BUILD
|
||||
tensorflow/third_party/systemlibs/double_conversion.BUILD
|
||||
tensorflow/third_party/systemlibs/zlib.BUILD
|
||||
tensorflow/third_party/systemlibs/jsoncpp.BUILD
|
||||
tensorflow/third_party/systemlibs/re2.BUILD
|
||||
tensorflow/third_party/systemlibs/lmdb.BUILD
|
||||
tensorflow/third_party/systemlibs/googleapis.BUILD
|
||||
tensorflow/third_party/systemlibs/png.BUILD
|
||||
tensorflow/third_party/systemlibs/syslibs_configure.bzl
|
||||
tensorflow/third_party/systemlibs/sqlite.BUILD
|
||||
tensorflow/third_party/python_runtime/BUILD
|
||||
tensorflow/third_party/googleapis.BUILD
|
||||
tensorflow/third_party/opt_einsum.BUILD
|
||||
tensorflow/third_party/wrapt.BUILD
|
||||
tensorflow/third_party/sycl/crosstool/BUILD
|
||||
tensorflow/third_party/ngraph/LICENSE
|
||||
tensorflow/third_party/ngraph/tbb.BUILD
|
||||
tensorflow/third_party/ngraph/BUILD
|
||||
tensorflow/third_party/ngraph/ngraph.BUILD
|
||||
tensorflow/third_party/ngraph/build_defs.bzl
|
||||
tensorflow/third_party/ngraph/NGRAPH_LICENSE
|
||||
tensorflow/third_party/ngraph/ngraph_tf.BUILD
|
||||
tensorflow/third_party/ngraph/nlohmann_json.BUILD
|
||||
tensorflow/third_party/clang_toolchain/download_clang.bzl
|
||||
tensorflow/third_party/clang_toolchain/BUILD
|
||||
tensorflow/third_party/clang_toolchain/cc_configure_clang.bzl
|
||||
tensorflow/third_party/mlir/BUILD
|
||||
tensorflow/third_party/mlir/mlir_configure.bzl
|
||||
tensorflow/third_party/mlir/bindings/python/BUILD
|
||||
tensorflow/third_party/mlir/test/BUILD
|
||||
tensorflow/third_party/mlir/tblgen.bzl
|
||||
tensorflow/third_party/gast.BUILD
|
||||
tensorflow/third_party/llvm/BUILD
|
||||
tensorflow/third_party/llvm/expand_cmake_vars.py
|
||||
tensorflow/third_party/llvm/llvm.autogenerated.BUILD
|
||||
tensorflow/third_party/llvm/llvm.bzl
|
||||
tensorflow/third_party/icu/udata.patch
|
||||
tensorflow/third_party/fft2d/fft2d.h
|
||||
tensorflow/third_party/fft2d/BUILD
|
||||
tensorflow/third_party/fft2d/fft.h
|
||||
tensorflow/third_party/fft2d/LICENSE
|
||||
tensorflow/third_party/fft2d/fft2d.BUILD
|
||||
tensorflow/third_party/nccl/archive.BUILD
|
||||
tensorflow/third_party/nccl/LICENSE
|
||||
tensorflow/third_party/nccl/system.BUILD.tpl
|
||||
tensorflow/third_party/nccl/nccl_configure.bzl
|
||||
tensorflow/third_party/nccl/build_defs.bzl.tpl
|
||||
tensorflow/third_party/nccl/archive.patch
|
||||
tensorflow/third_party/nccl/BUILD
|
||||
tensorflow/third_party/boringssl/BUILD
|
||||
tensorflow/third_party/protobuf/BUILD
|
||||
tensorflow/third_party/backports_weakref.BUILD
|
||||
tensorflow/third_party/mpi/.gitignore
|
||||
tensorflow/third_party/mpi/BUILD
|
||||
tensorflow/third_party/tensorrt/LICENSE
|
||||
tensorflow/third_party/tensorrt/BUILD
|
||||
tensorflow/third_party/tensorrt/build_defs.bzl.tpl
|
||||
tensorflow/third_party/tensorrt/BUILD.tpl
|
||||
tensorflow/third_party/tensorrt/tensorrt_configure.bzl
|
||||
tensorflow/third_party/tensorrt/tensorrt/include/tensorrt_config.h.tpl
|
||||
tensorflow/third_party/kafka/config.patch
|
||||
tensorflow/third_party/kafka/BUILD
|
||||
tensorflow/third_party/android/BUILD
|
||||
tensorflow/third_party/android/android.bzl.tpl
|
||||
tensorflow/third_party/android/android_configure.bzl
|
||||
tensorflow/third_party/android/android_configure.BUILD.tpl
|
||||
tensorflow/third_party/tflite_smartreply.BUILD
|
||||
tensorflow/third_party/mkl_dnn/LICENSE
|
||||
tensorflow/third_party/mkl_dnn/mkldnn.BUILD
|
||||
tensorflow/third_party/pcre.BUILD
|
||||
tensorflow/third_party/pybind11.BUILD
|
||||
tensorflow/third_party/opt_einsum.BUILD
|
||||
tensorflow/third_party/linenoise.BUILD
|
||||
tensorflow/third_party/sqlite.BUILD
|
||||
tensorflow/third_party/common.bzl
|
||||
tensorflow/third_party/com_google_absl.BUILD
|
||||
tensorflow/third_party/pprof.BUILD
|
||||
tensorflow/third_party/BUILD
|
||||
tensorflow/third_party/tflite_mobilenet_quant.BUILD
|
||||
tensorflow/third_party/wrapt.BUILD
|
||||
tensorflow/third_party/lmdb.BUILD
|
||||
tensorflow/third_party/git/BUILD.tpl
|
||||
tensorflow/third_party/git/BUILD
|
||||
tensorflow/third_party/git/git_configure.bzl
|
||||
tensorflow/third_party/protobuf/BUILD
|
||||
tensorflow/third_party/enum34.BUILD
|
||||
tensorflow/third_party/tflite_mobilenet.BUILD
|
||||
tensorflow/third_party/py/BUILD
|
||||
tensorflow/third_party/py/BUILD.tpl
|
||||
tensorflow/third_party/py/numpy/BUILD
|
||||
tensorflow/third_party/py/python_configure.bzl
|
||||
tensorflow/third_party/termcolor.BUILD
|
||||
tensorflow/third_party/png_fix_rpi.patch
|
||||
tensorflow/third_party/swig.BUILD
|
||||
tensorflow/compat_template.__init__.py
|
||||
tensorflow/tools/lib_package/libtensorflow_test.sh
|
||||
tensorflow/tools/lib_package/libtensorflow_java_test.sh
|
||||
tensorflow/tools/lib_package/libtensorflow_test.c
|
||||
tensorflow/tools/lib_package/concat_licenses.sh
|
||||
tensorflow/tools/lib_package/LibTensorFlowTest.java
|
||||
tensorflow/tools/lib_package/BUILD
|
||||
tensorflow/tools/lib_package/README.md
|
||||
tensorflow/tools/pip_package/check_load_py_test.py
|
||||
tensorflow/tools/pip_package/simple_console.py
|
||||
tensorflow/tools/pip_package/pip_smoke_test.py
|
||||
tensorflow/tools/pip_package/BUILD
|
||||
tensorflow/tools/pip_package/simple_console_for_windows.py
|
||||
tensorflow/tools/pip_package/build_pip_package.sh
|
||||
tensorflow/tools/pip_package/README
|
||||
tensorflow/tools/pip_package/setup.py
|
||||
tensorflow/tools/pip_package/MANIFEST.in
|
||||
tensorflow/tools/ci_build/remote/BUILD
|
||||
tensorflow/tools/def_file_filter/def_file_filter.py.tpl
|
||||
tensorflow/tools/def_file_filter/BUILD.tpl
|
||||
tensorflow/tools/def_file_filter/BUILD
|
||||
tensorflow/tools/def_file_filter/def_file_filter_configure.bzl
|
||||
tensorflow/api_template.__init__.py
|
||||
tensorflow/contrib/tpu/profiler/pip_package/BUILD
|
||||
tensorflow/contrib/tpu/profiler/pip_package/cloud_tpu_profiler/__init__.py
|
||||
tensorflow/contrib/tpu/profiler/pip_package/cloud_tpu_profiler/main.py
|
||||
tensorflow/contrib/tpu/profiler/pip_package/build_pip_package.sh
|
||||
tensorflow/contrib/tpu/profiler/pip_package/README
|
||||
tensorflow/contrib/tpu/profiler/pip_package/setup.py
|
||||
tensorflow/contrib/mpi/BUILD
|
||||
tensorflow/python/autograph/core/config.py
|
||||
tensorflow/virtual_root_template_v2.__init__.py
|
||||
tensorflow/__init__.py
|
||||
tensorflow/stream_executor/build_defs.bzl
|
||||
tensorflow/third_party/astor.BUILD
|
||||
tensorflow/third_party/grpc/BUILD
|
||||
tensorflow/third_party/curl.BUILD
|
||||
tensorflow/third_party/arm_neon_2_x86_sse.BUILD
|
||||
tensorflow/third_party/png.BUILD
|
||||
tensorflow/third_party/googleapis.BUILD
|
||||
tensorflow/third_party/mpi_collectives/BUILD
|
||||
tensorflow/third_party/nanopb.BUILD
|
||||
tensorflow/third_party/gif.BUILD
|
||||
tensorflow/third_party/double_conversion.BUILD
|
||||
tensorflow/third_party/six.BUILD
|
||||
tensorflow/third_party/tflite_mobilenet_float.BUILD
|
||||
tensorflow/third_party/repo.bzl
|
||||
tensorflow/third_party/codegen.BUILD
|
||||
tensorflow/third_party/cub.BUILD
|
||||
tensorflow/third_party/jsoncpp.BUILD
|
||||
tensorflow/third_party/tflite_ovic_testdata.BUILD
|
||||
tensorflow/third_party/__init__.py
|
||||
tensorflow/third_party/libxsmm.BUILD
|
||||
tensorflow/third_party/zlib.BUILD
|
||||
tensorflow/third_party/eigen.BUILD
|
||||
tensorflow/api_template_v1.__init__.py
|
||||
tensorflow/compat_template_v1.__init__.py
|
||||
tensorflow/compat_template.__init__.py
|
||||
tensorflow/api_template.__init__.py
|
||||
tensorflow/__init__.py
|
||||
tensorflow/virtual_root_template_v2.__init__.py
|
||||
tensorflow/virtual_root_template_v1.__init__.py
|
Loading…
Reference in New Issue
Block a user