Files
wehub-resource-sync 8a852e4b4e
cffconvert / validate (push) Has been skipped
License Check / license-check (push) Failing after 2s
chore: import upstream snapshot with attribution
2026-07-13 12:14:16 +08:00

683 lines
19 KiB
Python

#Description:
# TensorFlow SavedModel.
load("@xla//third_party/rules_python/python:py_binary.bzl", "py_binary")
load(
"//tensorflow:tensorflow.bzl",
"if_android",
"if_google",
"if_mobile",
"if_not_mobile",
"if_not_windows_or_mac",
"tf_cc_test",
)
load("//tensorflow:tensorflow.default.bzl", "filegroup")
load(
"//tensorflow/core/platform:build_config_root.bzl",
"if_static",
)
load("//tensorflow/core/platform:rules_cc.bzl", "cc_library")
load(
"//tensorflow/security/fuzzing:tf_fuzzing.bzl",
"tf_cc_fuzz_test",
)
package(
# copybara:uncomment default_applicable_licenses = ["//tensorflow:license"],
default_visibility = ["//visibility:public"],
licenses = ["notice"],
)
exports_files([
"loader.h",
"testdata/chunked_saved_model/chunked_model/saved_model.cpb",
"testdata/chunked_saved_model/chunked_model/saved_model.pbtxt",
])
cc_library(
name = "constants",
hdrs = ["constants.h"],
deps = ["@com_google_absl//absl/strings"],
)
cc_library(
name = "signature_constants",
hdrs = ["signature_constants.h"],
)
cc_library(
name = "tag_constants",
hdrs = ["tag_constants.h"],
)
# copybara:uncomment_begin(google-only)
# cc_library(
# name = "mobile_only_deps",
# visibility = ["//visibility:private"],
# deps = if_mobile(["//tensorflow/core:portable_tensorflow_lib"]),
# )
# copybara:uncomment_end
cc_library(
name = "reader",
srcs = ["reader.cc"],
hdrs = ["reader.h"],
deps = [
":constants",
":metrics",
":util",
"//tensorflow/core:protos_all_cc",
"@com_google_absl//absl/status:statusor",
] + if_google([
"//tensorflow/tools/proto_splitter:merge",
]) + if_not_mobile([
# TODO(b/111634734): :lib and :protos_all contain dependencies that
# cannot be built on mobile platforms. Instead, include the appropriate
# tf_lib depending on the build platform.
"@com_google_absl//absl/memory:memory",
"//tensorflow/core:lib",
"//tensorflow/core/util/tensor_bundle:byteswaptensor",
]),
)
tf_cc_test(
name = "reader_test",
srcs = ["reader_test.cc"],
data = [
":saved_model_test_files",
],
linkstatic = 1,
deps = [
":constants",
":metrics",
":reader",
":tag_constants",
"//tensorflow/core:lib",
"//tensorflow/core:test",
"//tensorflow/core/platform:resource_loader",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "loader_default_deps",
visibility = ["//visibility:private"],
deps = if_static([
"//tensorflow/core:all_kernels",
"//tensorflow/core:direct_session",
]) + if_google(if_static(["//tensorflow/core/platform/default/build_config:tensorflow_platform_specific"])),
)
cc_library(
name = "loader",
hdrs = ["loader.h"],
deps = [
":loader_lite",
] + select({
"//tensorflow:android": [],
"//tensorflow:ios": [],
"//tensorflow:tflite_converter": ["//tensorflow/core:direct_session"] + if_google([
"//tensorflow/core/platform/default/build_config:tensorflow_platform_specific",
]),
"//conditions:default": [":loader_default_deps"],
}) + if_not_mobile([
"//tensorflow/core:core_cpu",
"//tensorflow/core:lib",
"//tensorflow/core:ops",
"//tensorflow/core:protos_all_cc",
]) + if_android([
"//tensorflow/core:portable_tensorflow_lib",
]),
)
cc_library(
name = "loader_lite",
hdrs = ["loader.h"],
deps = if_static([
":loader_lite_impl",
]) + if_not_mobile([
"//tensorflow/core:core_cpu",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
]),
)
cc_library(
name = "loader_lite_impl",
srcs = ["loader.cc"],
hdrs = ["loader.h"],
deps = [
":constants",
":fingerprinting",
":loader_util",
":reader",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings",
] + if_not_mobile([
":metrics",
":util",
"//tensorflow/core:core_cpu",
"//tensorflow/core:framework",
"//tensorflow/core:lib",
"//tensorflow/core:lib_internal",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core/util/tensor_bundle:naming",
]),
alwayslink = 1,
)
cc_library(
name = "bundle_v2",
srcs = ["bundle_v2.cc"],
hdrs = ["bundle_v2.h"],
deps = [
":constants",
":fingerprinting",
":metrics",
":reader",
":util",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core/platform:errors",
"//tensorflow/core/platform:strcat",
"//tensorflow/core/platform:tstring",
"//tensorflow/core/util/tensor_bundle",
"//tensorflow/core/util/tensor_bundle:byteswaptensor",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/log",
"@com_google_absl//absl/status",
"@jsoncpp_git//:jsoncpp",
"@tsl//tsl/platform:errors",
"@tsl//tsl/platform:statusor",
"@tsl//tsl/platform:strcat",
],
)
cc_library(
name = "loader_util",
srcs = ["loader_util.cc"],
hdrs = ["loader_util.h"],
deps = [":constants"] + if_not_mobile([
"//tensorflow/core:lib",
"//tensorflow/core:lib_internal",
"//tensorflow/core:protos_all_cc",
]),
)
tf_cc_test(
name = "bundle_v2_test",
srcs = ["bundle_v2_test.cc"],
data = [
":saved_model_test_files",
],
linkstatic = 1,
deps = [
":bundle_v2",
":metrics",
"//tensorflow/core:lib",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core/platform:test",
"//tensorflow/core/protobuf:for_core_protos_cc",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@jsoncpp_git//:jsoncpp",
"@tsl//tsl/platform:statusor",
],
)
tf_cc_test(
name = "saved_model_bundle_test",
srcs = ["saved_model_bundle_test.cc"],
data = [
":saved_model_test_files",
],
linkstatic = 1,
deps = [
":constants",
":loader",
":metrics",
":reader",
":signature_constants",
":tag_constants",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:tensorflow",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core:testlib",
],
)
tf_cc_test(
name = "saved_model_bundle_lite_test",
srcs = ["saved_model_bundle_lite_test.cc"],
data = [
":saved_model_test_files",
],
linkstatic = 1,
deps = [
":constants",
":loader",
":signature_constants",
":tag_constants",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:tensorflow",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core:testlib",
"@com_google_absl//absl/status",
],
)
# A subset of the TF2 saved models can be generated with this tool.
py_binary(
name = "testdata/generate_saved_models",
srcs = ["testdata/generate_saved_models.py"],
data = [
":saved_model_asset_data",
":saved_model_static_hashtable_asset_data",
],
strict_deps = True,
deps = [
"//tensorflow/python/client:session",
"//tensorflow/python/compat:v2_compat",
"//tensorflow/python/eager:def_function",
"//tensorflow/python/framework:dtypes",
"//tensorflow/python/framework:ops",
"//tensorflow/python/framework:tensor_spec",
"//tensorflow/python/module",
"//tensorflow/python/ops:io_ops",
"//tensorflow/python/ops:lookup_ops",
"//tensorflow/python/ops:variables",
"//tensorflow/python/platform:client_testlib",
"//tensorflow/python/saved_model",
"//tensorflow/python/saved_model:save_options",
"//tensorflow/python/trackable:asset",
"@absl_py//absl:app",
],
)
# copybara:uncomment_begin(google-only)
#
# py_binary(
# name = "testdata/generate_chunked_models",
# srcs = ["testdata/generate_chunked_models.py"],
# strict_deps = True,
# deps = [
# "//tensorflow/python/compat:v2_compat",
# "//tensorflow/python/eager:def_function",
# "//tensorflow/python/framework:constant_op",
# "//tensorflow/python/lib/io:file_io",
# "//tensorflow/python/module",
# "//tensorflow/python/saved_model:loader",
# "//tensorflow/python/saved_model:save",
# "//tensorflow/python/saved_model:save_options",
# "//tensorflow/python/util:compat",
# "//tensorflow/tools/proto_splitter:constants",
# "//tensorflow/tools/proto_splitter/python:saved_model",
# "//third_party/py/numpy",
# "@absl_py//absl:app",
# "@absl_py//absl/flags",
# ],
# )
#
# copybara:uncomment_end
# TODO(b/32673259): add a test to continuously validate these files.
filegroup(
name = "saved_model_test_files",
srcs = glob([
"testdata/AssetModule/**",
"testdata/half_plus_two_pbtxt/**",
"testdata/half_plus_two_main_op/**",
"testdata/half_plus_two/**",
"testdata/half_plus_two_v2/**",
"testdata/x_plus_y_v2_debuginfo/**",
"testdata/CyclicModule/**",
"testdata/StaticHashTableModule/**",
"testdata/VarsAndArithmeticObjectGraph/**",
"testdata/fuzz_generated/**",
"testdata/SimpleV1Model/**",
"testdata/OptimizerSlotVariableModule/**",
"testdata/chunked_saved_model/**",
]),
)
filegroup(
name = "saved_model_fingerprinting_test_files",
srcs = glob([
"testdata/bert2/**",
"testdata/bert1/**",
"testdata/half_plus_two_pbtxt/**",
]),
)
alias(
name = "saved_model_half_plus_two",
actual = ":saved_model_test_files",
)
filegroup(
name = "saved_model_asset_data",
srcs = [
"testdata/test_asset.txt",
],
)
filegroup(
name = "saved_model_static_hashtable_asset_data",
srcs = [
"testdata/static_hashtable_asset.txt",
],
)
exports_files(
glob([
"testdata/half_plus_two_pbtxt/**",
"testdata/half_plus_two_main_op/**",
"testdata/half_plus_two/**",
"testdata/half_plus_two_v2/**",
"testdata/x_plus_y_v2_debuginfo/**",
"testdata/CyclicModule/**",
"testdata/VarsAndArithmeticObjectGraph/**",
"testdata/fuzz_generated/**",
]),
)
# Linked directly into ":tensorflow_framework".
cc_library(
name = "metrics_impl",
srcs = [
"metrics.cc",
"metrics.h",
],
visibility = [
"//tensorflow:__pkg__",
"//tensorflow/python:__pkg__",
],
deps = [
"//tensorflow/core:protos_all_cc",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@jsoncpp_git//:jsoncpp",
] + if_not_mobile([
"//tensorflow/core:lib",
]) + if_android([
"//tensorflow/core:portable_tensorflow_lib_lite",
]),
alwayslink = True,
)
cc_library(
name = "metrics",
hdrs = ["metrics.h"],
visibility = [
"//tensorflow/cc/saved_model/image_format:__subpackages__",
"//tensorflow/python/saved_model:__subpackages__",
],
deps = if_static([
":metrics_impl",
]) + if_not_mobile([
"//tensorflow/core:lib",
]) + if_android([
"//tensorflow/core:portable_tensorflow_lib_lite",
]) + [
"//tensorflow/core/protobuf:for_core_protos_cc",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
],
)
tf_cc_test(
name = "metrics_test",
size = "small",
srcs = ["metrics_test.cc"],
deps = [
":metrics",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core/platform:status_matchers",
"@com_google_absl//absl/status",
"@com_google_googletest//:gtest",
"@jsoncpp_git//:jsoncpp",
"@tsl//tsl/platform:statusor",
],
)
cc_library(
name = "util",
srcs = ["util.cc"],
hdrs = ["util.h"],
deps = [
"//tensorflow/core:framework",
"//tensorflow/core/framework:tensor_proto_cc",
"//tensorflow/core/platform:errors",
"//tensorflow/core/platform:status",
"//tensorflow/core/protobuf:for_core_protos_cc",
] + if_not_mobile(["//tensorflow/core:lib"]) + if_android(["//tensorflow/core:portable_tensorflow_lib_lite"]),
)
cc_library(
name = "test_utils",
testonly = True,
hdrs = ["test_utils.h"],
visibility = ["//visibility:public"],
deps = [
"//tensorflow/core:test",
"//tensorflow/core/platform:protobuf",
],
)
tf_cc_test(
name = "util_test",
size = "small",
srcs = ["util_test.cc"],
deps = [
":test_utils",
":util",
"//tensorflow/core:lib",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core/framework:tensor_shape_proto_cc",
"//tensorflow/core/framework:tensor_testutil",
"//tensorflow/core/protobuf:for_core_protos_cc",
"@tsl//tsl/platform:status_matchers",
],
)
# Linked directly into ":tensorflow_framework".
cc_library(
name = "fingerprinting_impl",
srcs = [
"fingerprinting.cc",
"fingerprinting.h",
],
visibility = [
"//tensorflow:__pkg__",
"//tensorflow/python:__pkg__",
],
deps = [
":constants",
":fingerprinting_x_platform_utils",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core/graph/regularization:simple_delete",
"//tensorflow/core/graph/regularization:util",
"//tensorflow/core/util/tensor_bundle:naming",
"@com_google_absl//absl/container:btree",
"@com_google_absl//absl/log",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@tsl//tsl/platform:protobuf",
"@tsl//tsl/platform:types",
] + if_not_mobile([
"//tensorflow/core:lib",
]) + if_android([
"//tensorflow/core:portable_tensorflow_lib_lite",
]) + if_not_windows_or_mac([
":fingerprinting_utils",
"//tensorflow/tools/proto_splitter/cc:util",
]),
alwayslink = True,
)
cc_library(
name = "fingerprinting",
hdrs = ["fingerprinting.h"],
visibility = [
"//learning/brain/contrib/hub/server/ingestion:__subpackages__",
"//learning/brain/contrib/tpu_modeling:__subpackages__",
"//learning/gemini/deployment/disaggregation/wiz_cc:__subpackages__",
"//learning/metadata/artifactoid/cc:__subpackages__",
"//learning/tfx/pipeline/util:__subpackages__",
"//tensorflow/core/tfrt:__subpackages__",
"//tensorflow/python/saved_model:__subpackages__",
],
deps = if_static([
":fingerprinting_impl",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/status:statusor",
"//tensorflow/core:protos_all_cc",
]) + if_not_mobile([
"//tensorflow/core:lib",
]) + if_android([
"//tensorflow/core:portable_tensorflow_lib_lite",
]),
)
cc_library(
name = "fingerprinting_utils",
srcs = ["fingerprinting_utils.cc"],
hdrs = ["fingerprinting_utils.h"],
visibility = ["//visibility:private"],
deps = [
":constants",
":fingerprinting_x_platform_utils",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core/util/tensor_bundle:naming",
"//tensorflow/tools/proto_splitter:chunk_proto_cc",
"//tensorflow/tools/proto_splitter:merge",
"//tensorflow/tools/proto_splitter/cc:util",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@riegeli//riegeli/bytes:fd_reader",
"@riegeli//riegeli/records:record_reader",
],
alwayslink = True,
)
cc_library(
name = "fingerprinting_x_platform_utils",
srcs = ["fingerprinting_x_platform_utils.cc"],
hdrs = ["fingerprinting_x_platform_utils.h"],
deps = [
"@com_google_absl//absl/numeric:int128",
"@com_google_absl//absl/strings:str_format",
"@tsl//tsl/platform:random",
],
)
tf_cc_test(
name = "fingerprinting_utils_test",
srcs = ["fingerprinting_utils_test.cc"],
data = [
"//tensorflow/tools/proto_splitter/testdata:many-field.cpb",
"//tensorflow/tools/proto_splitter/testdata:split-standard.cpb",
],
tags = [
"no_mac", # b/291933687
"no_windows", # b/291001524
],
deps = [
":fingerprinting_utils",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core/platform:path",
"//tensorflow/core/platform:protobuf",
"//tensorflow/tools/proto_splitter:chunk_proto_cc",
"//tensorflow/tools/proto_splitter/cc:util",
"//tensorflow/tools/proto_splitter/testdata:test_message_proto_cc",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest_main",
"@tsl//tsl/platform:errors",
"@tsl//tsl/platform:protobuf",
"@tsl//tsl/platform:status_matchers",
"@tsl//tsl/platform:statusor",
"@tsl//tsl/platform:test",
"@xla//xla/tsl/lib/core:status_test_util",
],
)
tf_cc_test(
name = "fingerprinting_chunked_test",
size = "small",
srcs = ["fingerprinting_chunked_test.cc"],
data = [
":saved_model_fingerprinting_test_files",
":saved_model_test_files",
],
tags = [
"no_mac", # b/291933687
"no_windows", # b/291001524
],
deps = [
":fingerprinting",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:test",
"//tensorflow/core/platform:path",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_googletest//:gtest_main",
"@tsl//tsl/platform:statusor",
],
)
# copybara:uncomment_end
tf_cc_test(
name = "fingerprinting_test",
size = "small",
srcs = ["fingerprinting_test.cc"],
data = [
":saved_model_fingerprinting_test_files",
":saved_model_test_files",
],
deps = [
":fingerprinting",
"//tensorflow/cc:cc_ops",
"//tensorflow/core:lib",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"//tensorflow/core/protobuf:for_core_protos_cc",
"@com_google_absl//absl/numeric:int128",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest",
],
)
tf_cc_fuzz_test(
name = "saved_model_fuzz",
srcs = ["saved_model_fuzz.cc"],
deps = [
":constants",
":loader",
":tag_constants",
"//tensorflow/core:core_cpu",
"//tensorflow/core:protos_all_cc",
"//tensorflow/core:tensorflow",
],
)