keep params in expendable mode

This commit is contained in:
Brett Kuprel 2022-06-30 09:36:32 -04:00
parent df9aa6f915
commit 41a44068d0
3 changed files with 6 additions and 12 deletions

2
README.md vendored
View File

@ -5,7 +5,7 @@
This is a minimal implementation of Boris Dayma's [DALL·E Mini](https://github.com/borisdayma/dalle-mini). It has been stripped to the bare essentials necessary for doing inference, and converted to PyTorch. To run the torch model, the only third party dependencies are numpy and torch. Flax is used to convert the weights (which can be saved with `torch.save` once the model is loaded), and wandb is only used to download the models.
It currently takes **7.3 seconds** to generate an avocado armchair with DALL·E Mega in PyTorch on Colab
It currently takes **7.3 seconds** to generate an avocado armchair with DALL·E Mega in PyTorch on Colab (with nonexpendable model in high RAM runtime)
### Setup

View File

@ -28,7 +28,7 @@ class MinDalleFlax(MinDalleBase):
text_token_count = self.config['max_text_length'],
text_vocab_count = self.config['encoder_vocab_size'],
layer_count = self.config['encoder_layers']
).bind({'params': self.model_params.pop('encoder')})
).bind({'params': self.model_params['encoder']})
def init_decoder(self):
@ -53,17 +53,13 @@ class MinDalleFlax(MinDalleBase):
encoder_state = self.encoder(text_tokens)
if self.is_expendable: del self.encoder
if self.is_expendable:
self.init_decoder()
params = self.model_params.pop('decoder')
else:
params = self.model_params['decoder']
if self.is_expendable: self.init_decoder()
print("sampling image tokens")
image_tokens = self.decoder.sample_image_tokens(
text_tokens,
encoder_state,
jax.random.PRNGKey(seed),
params
self.model_params['decoder']
)
if self.is_expendable: del self.decoder

View File

@ -40,13 +40,12 @@ class MinDalleTorch(MinDalleBase):
glu_embed_count = self.config['encoder_ffn_dim']
)
params = convert_dalle_bart_torch_from_flax_params(
self.model_params.pop('encoder'),
self.model_params['encoder'],
layer_count=self.config['encoder_layers'],
is_encoder=True
)
self.encoder.load_state_dict(params, strict=False)
if torch.cuda.is_available(): self.encoder = self.encoder.cuda()
del params
def init_decoder(self):
@ -64,13 +63,12 @@ class MinDalleTorch(MinDalleBase):
is_verbose = True
)
params = convert_dalle_bart_torch_from_flax_params(
self.model_params.pop('decoder'),
self.model_params['decoder'],
layer_count=self.config['decoder_layers'],
is_encoder=False
)
self.decoder.load_state_dict(params, strict=False)
if torch.cuda.is_available(): self.decoder = self.decoder.cuda()
del params
def init_detokenizer(self):