Skip to content

Commit

Permalink
Resize embeds with DeepSpeed (#32214)
Browse files Browse the repository at this point in the history
* fix resize when deepspeed

* deepsped uses new embeds

* we needed this
  • Loading branch information
zucchini-nlp authored and ArthurZucker committed Aug 5, 2024
1 parent 47c29cc commit 5cea2e7
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions src/transformers/modeling_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1980,12 +1980,22 @@ def resize_token_embeddings(
if new_num_tokens is None and pad_to_multiple_of is None:
return model_embeds

# Since we are basically resuing the same old embeddings with new weight values, gathering is required
is_quantized = hasattr(self, "hf_quantizer") and self.hf_quantizer is not None
if is_deepspeed_zero3_enabled() and not is_quantized:
import deepspeed

with deepspeed.zero.GatheredParameters(model_embeds.weight, modifier_rank=None):
vocab_size = model_embeds.weight.shape[0]
else:
vocab_size = model_embeds.weight.shape[0]

# Update base model and current model config
if hasattr(self.config, "text_config"):
self.config.text_config.vocab_size = model_embeds.weight.shape[0]
self.config.text_config.vocab_size = vocab_size
else:
self.config.vocab_size = model_embeds.weight.shape[0]
self.vocab_size = model_embeds.weight.shape[0]
self.config.vocab_size = vocab_size
self.vocab_size = vocab_size

# Tie weights again if needed
self.tie_weights()
Expand Down Expand Up @@ -2139,7 +2149,7 @@ def _get_resized_embeddings(

params = [old_embeddings.weight, new_embeddings.weight]
with deepspeed.zero.GatheredParameters(params, modifier_rank=0):
old_embeddings.weight.data = new_embeddings.weight.data
old_embeddings.weight = new_embeddings.weight
old_embeddings.num_embeddings = new_embeddings.weight.data.shape[0]

# If the new number of tokens is smaller than the original `padding_idx`, the `padding_idx`
Expand Down

0 comments on commit 5cea2e7

Please sign in to comment.