@@ -50,6 +50,7 @@ namespace tensorflow {
5050namespace {
5151const int64 kEmbeddingVarUseDB = -214 ;
5252const int64 kInitializableEmbeddingVarUseDB = -215 ;
53+ const char * kInferenceMode = " INFERENCE_MODE" ;
5354}
5455
5556#define REGISTER_KV_VAR_HANDLE (ktype, vtype ) \
@@ -438,6 +439,10 @@ template <typename TKey, typename TValue>
438439class KvResourceGatherOp : public OpKernel {
439440 public:
440441 explicit KvResourceGatherOp (OpKernelConstruction* c) : OpKernel(c) {
442+ OP_REQUIRES_OK (c, c->GetAttr (" is_inference" , &is_inference_));
443+ bool is_inference;
444+ TF_CHECK_OK (ReadBoolFromEnvVar (kInferenceMode , false , &is_inference));
445+ is_inference_ |= is_inference;
441446 OP_REQUIRES_OK (c,
442447 c->GetAttr (" is_use_default_value_tensor" ,
443448 &is_use_default_value_tensor_));
@@ -461,6 +466,17 @@ class KvResourceGatherOp : public OpKernel {
461466 return 1 ;
462467 };
463468 }
469+ if (!is_inference_) {
470+ lookup_fn_ = [](EmbeddingVar<TKey, TValue>* ev, TKey key,
471+ TValue* val, TValue* default_v, int count) {
472+ ev->LookupOrCreate (key, val, default_v, count);
473+ };
474+ } else {
475+ lookup_fn_ = [](EmbeddingVar<TKey, TValue>* ev, TKey key,
476+ TValue* val, TValue* default_v, int count) {
477+ ev->Lookup (key, val, default_v);
478+ };
479+ }
464480 }
465481
466482 void Compute (OpKernelContext* c) override {
@@ -511,7 +527,7 @@ class KvResourceGatherOp : public OpKernel {
511527 default_v, indices_flat (i), i, ev->GetDefaultValueDim (),
512528 ev->ValueLen ());
513529 int32 count = get_count_fn_ (counts, i);
514- ev-> LookupOrCreate ( indices_flat (i),
530+ lookup_fn_ (ev, indices_flat (i),
515531 out_base + i * slice_elems, default_v_ptr, count);
516532 }
517533 };
@@ -530,9 +546,12 @@ class KvResourceGatherOp : public OpKernel {
530546
531547 private:
532548 bool is_use_default_value_tensor_;
549+ bool is_inference_;
533550 std::function<
534551 TValue*(TValue*, TKey, int64, int64, int64)> get_default_v_fn_;
535552 std::function<int32(int32*, int64)> get_count_fn_;
553+ std::function<void (EmbeddingVar<TKey, TValue>* ev,
554+ TKey key, TValue* val, TValue* default_v, int count)> lookup_fn_;
536555};
537556
538557#define REGISTER_GATHER_FULL (dev, ktype, vtype ) \
0 commit comments