What are the different types of model parallelism available in the PyTorch library? Also, please explain the pros and cons of each approach
In PyTorch, there are several types of model parallelism:

1.  Data Parallelism: Splits the model across different GPUs, with each GPU processing a different batch of data. Pros: simple to implement and scales well with the number of GPUs. Cons: may suffer from communication overhead when gradients need to be aggregated between GPUs.
    
2.  Model Parallelism: Splits the model across different GPUs, with each GPU processing a different part of the model. Pros: can handle models that are too large to fit on a single GPU. Cons: may suffer from slow communication between GPUs and requires careful partitioning of the model.
    
3.  Hybrid Parallelism: Combines both data and model parallelism, splitting both the model and data across GPUs. Pros: allows for the benefits of both data and model parallelism. Cons: requires careful partitioning of both the model and data, and may suffer from communication overhead.
    

It's worth noting that the type of parallelism used will depend on the specific use case and requirements of the model being trained.