in grappler/auto_mixed_precision_lists.h [107:353]
gtl::FlatSet<string> AllowList() override {
auto list = gtl::FlatSet<string>{
"BlockLSTM",
"BlockLSTMV2",
"BlockLSTMGrad",
"BlockLSTMGradV2",
"Conv2D",
"Conv2DBackpropFilter",
"Conv2DBackpropInput",
"CudnnRNN",
"CudnnRNNBackprop",
"CudnnRNNBackpropV2",
"CudnnRNNBackpropV3",
"CudnnRNNV2",
"CudnnRNNV3",
"Einsum",
"GRUBlockCell",
"GRUBlockCellGrad",
"LSTMBlockCell",
"LSTMBlockCellGrad",
"MatMul",
};
#if TENSORFLOW_USE_ROCM
if (true) {
#else
if (cuda_version_ >= 9010) {
// Fp16 BatchMatMul is slow before CUDA 9.1.
#endif
list.insert("BatchMatMul");
list.insert("BatchMatMulV2");
}
if (cudnn_version_ >= 7602) {
// Fp16 3D conv is slow before CUDNN 7.6.2.
list.insert("Conv3D");
list.insert("Conv3DBackpropFilter");
list.insert("Conv3DBackpropFilterV2");
list.insert("Conv3DBackpropInput");
list.insert("Conv3DBackpropInputV2");
}
if (cudnn_version_ >= 8000) {
list.insert("DepthwiseConv2dNative");
list.insert("DepthwiseConv2dNativeBackpropFilter");
list.insert("DepthwiseConv2dNativeBackpropInput");
}
// Neuron device
if (cudnn_version_ == 0) {
list.insert("BatchMatMul");
list.insert("BatchMatMulV2");
}
UpdateList("ALLOWLIST", &list);
// For backwards compatibility, keeping the original env variable here.
// TODO(reedwm): This should be removed if we don't have active users.
UpdateList("WHITELIST", &list);
return list;
}
gtl::FlatSet<string> InferList() override {
if (IsPseudoFastMath()) {
return gtl::FlatSet<string>{};
}
auto list = gtl::FlatSet<string>{
"Add",
"AddN",
"AddV2",
"AvgPool",
"AvgPool3D",
"AvgPool3DGrad",
"AvgPoolGrad",
"BiasAdd",
"BiasAddGrad",
"BiasAddV1",
"Elu",
"EluGrad",
"Erf",
"Erfc",
"FloorDiv",
"FusedBatchNormV2",
"FusedBatchNormGradV2",
"FusedBatchNormV3",
"FusedBatchNormGradV3",
"_FusedBatchNormEx",
"Inv",
"LeakyRelu",
"LeakyReluGrad",
"Log",
"Log1p",
"LogSoftmax",
"Mul",
"Prod",
"RealDiv",
"Reciprocal",
"Selu",
"SeluGrad",
"Sigmoid",
"SigmoidGrad",
"Softmax",
"Softplus",
"SoftplusGrad",
"Softsign",
"SoftsignGrad",
"Sqrt",
"Sub",
"Tanh",
"TanhGrad",
};
UpdateList("INFERLIST", &list);
// For backwards compatibility, keeping the original env variable here.
// TODO(reedwm): This should be removed if we don't have active users.
UpdateList("GRAYLIST", &list);
return list;
}
gtl::FlatSet<string> DenyList() override {
if (IsPseudoFastMath()) {
return gtl::FlatSet<string>{};
}
auto list = gtl::FlatSet<string>{
"Exp",
"Expm1",
"L2Loss",
"Mean",
"Pow",
"SaveV2",
"SoftmaxCrossEntropyWithLogits",
"SparseSoftmaxCrossEntropyWithLogits",
"Sum",
};
UpdateList("DENYLIST", &list);
// For backwards compatibility, keeping the original env variable here.
// TODO(reedwm): This should be removed if we don't have active users.
UpdateList("BLACKLIST", &list);
return list;
}
gtl::FlatSet<string> ClearList() override {
if (IsPseudoFastMath()) {
return gtl::FlatSet<string>{};
}
auto list = gtl::FlatSet<string>{
"Abs",
"ArgMax",
"ArgMin",
"BatchToSpace",
"BatchToSpaceND",
"BroadcastTo",
"Ceil",
"CheckNumerics",
"ClipByValue",
"Concat",
"ConcatV2",
"DepthToSpace",
"DynamicPartition",
"DynamicStitch",
"Enter",
"EnsureShape",
"Equal",
"Exit",
"ExpandDims",
"Fill",
"Floor",
"Gather",
"GatherNd",
"GatherV2",
"Greater",
"GreaterEqual",
"Identity",
"IdentityN",
"IsFinite",
"IsInf",
"IsNan",
"Less",
"LessEqual",
"Max",
"MaxPool",
"MaxPool3D",
"MaxPool3DGrad",
"MaxPool3DGradGrad",
"MaxPoolGrad",
"MaxPoolGradGrad",
"MaxPoolGradGradV2",
"MaxPoolGradV2",
"MaxPoolV2",
"Maximum",
"Merge",
"Min",
"Minimum",
"MirrorPad",
"MirrorPadGrad",
"Neg",
"NextIteration",
"NotEqual",
"OneHot",
"OnesLike",
"Pack",
"Pad",
"PadV2",
"PreventGradient",
"Rank",
"Relu",
"Relu6",
"Relu6Grad",
"ReluGrad",
"Reshape",
"ResizeNearestNeighbor",
"ResizeNearestNeighborGrad",
"Reverse",
"ReverseSequence",
"ReverseV2",
"Round",
"Select",
"SelectV2",
"Shape",
"ShapeN",
"Sign",
"Size",
"Slice",
"Snapshot",
"SpaceToBatch",
"SpaceToBatchND",
"SpaceToDepth",
"Split",
"SplitV",
"Squeeze",
"StopGradient",
"StridedSlice",
"StridedSliceGrad",
"Switch",
"Tile",
"TopK",
"TopKV2",
"Transpose",
"Where",
"ZerosLike",
};
AddTensorListOps(&list);
UpdateList("CLEARLIST", &list);
return list;
}
private:
int cuda_version_;
int cudnn_version_;
};