Some thoughts on DeepChem Architecture

It’s been a few months since I posted Making DeepChem a Better Framework for AI-Driven Science so I wanted to follow up with a few more thoughts about where I see DeepChem heading. Over the last several months of effort, we’ve moved DeepChem closer to becoming a library for general purpose scientific work thanks to the work of our GSoC contributors and community members more broadly. I recently posted the DeepChem model wishlist which got a lot of attention (https://github.com/deepchem/deepchem/issues/2680), suggesting that there’s a need for high quality scientific model implementations in the community. I’ll post about a few potential ideas and directions I see for DeepChem in the future

  • Making Models Composable: A longtime request from users has been for us to make DeepChem models more composable. For example, multiple users have asked if we can enable DeepChem graph convs to be composed with downstream keras layers. To enable easy composition, we might consider adding a __call__ to all models. The idea would be that we define clean input/outputs (as tensors) for models. Then users could use models as building blocks in their own architectures. Of course, this would only work with models that share the same backend
  • What about pretraining?: We’ve talked about building up a model hub for some time, but it’s not quite gotten off the ground. The reason perhaps is that there are still relatively few models for which pretraining adds value. Perhaps for now we can just continue to add more models (ChemBERTa/Grover/etc) that benefit from pretraining and let impetus build before we try to make a general pretraining infrastructure
  • Making Layers Multibackend: We now have layers split across TensorFlow/PyTorch/Jax. Each layer is for only one backend. However our loss functions are implemented to be multiple backend. We should consider making our layers support multiple backend. This might be tricky since layers for different frameworks use slightly different APIs. Perhaps then you just need to reimplement each new layer in each backend? I’m not 100% sure what the right design is here
1 Like