Skip to content

Commit 58631d9

Browse files
Raahul Kalyaan Jakkafacebook-github-bot
authored andcommitted
Changing Backend Tensor initialization (#5056)
Summary: X-link: meta-pytorch/torchrec#3484 X-link: facebookresearch/FBGEMM#2066 **Context:** Currently, we are enabling SSD optimizer offloading for the ssd tbe kernel **In this diff:** We retrieve the newly added parameters from the tbe config and pass it down to the tbe Differential Revision: D85353134
1 parent 70edc8a commit 58631d9

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

fbgemm_gpu/fbgemm_gpu/tbe/ssd/training.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def __init__(
179179
table_names: Optional[list[str]] = None,
180180
use_rowwise_bias_correction: bool = False, # For Adam use
181181
optimizer_state_dtypes: dict[str, SparseType] = {}, # noqa: B006
182+
enable_optimizer_offloading: bool = False,
182183
) -> None:
183184
super(SSDTableBatchedEmbeddingBags, self).__init__()
184185

fbgemm_gpu/src/ssd_split_embeddings_cache/embedding_rocksdb_wrapper.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ class EmbeddingRocksDBWrapper : public torch::jit::CustomClassHolder {
4545
std::optional<at::Tensor> table_dims = std::nullopt,
4646
std::optional<at::Tensor> hash_size_cumsum = std::nullopt,
4747
int64_t flushing_block_size = 2000000000 /*2GB*/,
48-
bool disable_random_init = false)
48+
bool disable_random_init = false,
49+
std::optional<bool> enable_optimizer_offloading = std::nullopt,
50+
std::optional<int64_t> optimizer_D = std::nullopt)
4951
: impl_(
5052
std::make_shared<ssd::EmbeddingRocksDB>(
5153
path,
@@ -77,7 +79,9 @@ class EmbeddingRocksDBWrapper : public torch::jit::CustomClassHolder {
7779
table_dims,
7880
hash_size_cumsum,
7981
flushing_block_size,
80-
disable_random_init)) {}
82+
disable_random_init,
83+
enable_optimizer_offloading,
84+
optimizer_D)) {}
8185

8286
void set_cuda(
8387
at::Tensor indices,

fbgemm_gpu/src/ssd_split_embeddings_cache/ssd_split_table_batched_embeddings.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,9 @@ static auto embedding_rocks_db_wrapper =
809809
std::optional<at::Tensor>,
810810
std::optional<at::Tensor>,
811811
int64_t,
812-
bool>(),
812+
bool,
813+
std::optional<bool>,
814+
std::optional<int64_t>>(),
813815
"",
814816
{
815817
torch::arg("path"),
@@ -842,6 +844,8 @@ static auto embedding_rocks_db_wrapper =
842844
torch::arg("hash_size_cumsum") = std::nullopt,
843845
torch::arg("flushing_block_size") = 2000000000 /* 2GB */,
844846
torch::arg("disable_random_init") = false,
847+
torch::arg("enable_optimizer_offloading") = std::nullopt,
848+
torch::arg("optimizer_D") = std::nullopt,
845849
})
846850
.def(
847851
"set_cuda",

fbgemm_gpu/src/ssd_split_embeddings_cache/ssd_table_batched_embeddings.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ class EmbeddingRocksDB : public kv_db::EmbeddingKVDB {
122122
std::optional<at::Tensor> hash_size_cumsum = std::nullopt,
123123
int64_t flushing_block_size = 2000000000 /*2GB*/,
124124
bool disable_random_init = false,
125-
bool enable_optimizer_offloading = false,
126-
int64_t optimizer_D = 0)
125+
std::optional<bool> enable_optimizer_offloading = std::nullopt,
126+
std::optional<int64_t> optimizer_D = std::nullopt)
127127
: kv_db::EmbeddingKVDB(
128128
num_shards,
129129
max_D,
@@ -426,8 +426,8 @@ class EmbeddingRocksDB : public kv_db::EmbeddingKVDB {
426426
float uniform_init_upper,
427427
int64_t row_storage_bitwidth,
428428
bool disable_random_init,
429-
bool enable_optimizer_offloading = false,
430-
int64_t optimizer_D = 0) {
429+
std::optional<bool> enable_optimizer_offloading = std::nullopt,
430+
std::optional<int64_t> optimizer_D = std::nullopt) {
431431
for (auto i = 0; i < num_shards; ++i) {
432432
auto* gen = at::check_generator<at::CPUGeneratorImpl>(
433433
at::detail::getDefaultCPUGenerator());
@@ -442,9 +442,13 @@ class EmbeddingRocksDB : public kv_db::EmbeddingKVDB {
442442

443443
// When Optimizer offloading is enabled, we want to initialize the last
444444
// optimizer_D columns(optimizer values) to zero
445-
if (enable_optimizer_offloading) {
445+
if (enable_optimizer_offloading.has_value() &&
446+
enable_optimizer_offloading.value() && optimizer_D.has_value()) {
446447
auto& tensor = initializer->row_storage_;
447-
tensor.index({"...", at::indexing::Slice(max_D - optimizer_D, max_D)})
448+
tensor
449+
.index(
450+
{"...",
451+
at::indexing::Slice(max_D - optimizer_D.value(), max_D)})
448452
.zero_();
449453
}
450454
initializers_.push_back(std::move(initializer));
@@ -1378,6 +1382,7 @@ class EmbeddingRocksDB : public kv_db::EmbeddingKVDB {
13781382
std::vector<std::string> db_paths_;
13791383

13801384
bool disable_random_init_;
1385+
std::optional<bool> enable_optimizer_offloading = std::nullopt;
13811386
}; // class EmbeddingRocksDB
13821387

13831388
/// @ingroup embedding-ssd

0 commit comments

Comments
 (0)