Skip to main content

Composable neural network components for building models in PyTorch.

Project description

composennent

PyPI version Python 3.8+ License: MIT

Composable neural network components for building models in PyTorch.

Composennent provides modular, reusable building blocks for constructing transformer-based models. Train GPT, BERT, and other architectures with minimal code.

Features

  • 🧩 Modular Components: Encoder, Decoder, Attention blocks that compose together
  • 🚀 Built-in Training: Pre-training and fine-tuning with a single method call
  • 📝 Multiple Architectures: GPT, BERT, Seq2Seq support out of the box
  • 🔧 Tokenizer Support: WordPiece and SentencePiece tokenizers included
  • Mixed Precision: Automatic mixed precision (AMP) support
  • 🎯 Instruction Tuning: Fine-tune models on instruction datasets (Alpaca format)

Installation

pip install composennent

For tokenizer support:

pip install composennent[tokenizers]

For development:

pip install composennent[dev]

Quick Start

Pre-train a GPT Model

import torch
from composennent.models import GPT
from composennent.nlp.tokenizers import SentencePieceTokenizer

# Create model
model = GPT(
    vocab_size=32000,
    latent_dim=512,
    num_heads=8,
    num_layers=6,
    max_seq_len=512,
)

# Load tokenizer
tokenizer = SentencePieceTokenizer.from_pretrained("tokenizer.model")

# Pre-train
texts = ["Your training data here...", ...]
model.pretrain(
    texts=texts,
    tokenizer=tokenizer,
    epochs=3,
    batch_size=16,
    device="cuda",
)

# Save
model.save("my_model.pt")

Fine-tune on Instructions

# Load pre-trained model
model = GPT.load("my_model.pt", device="cuda")

# Instruction data (Alpaca format)
instruction_data = [
    {
        "instruction": "What is the capital of France?",
        "input": "",
        "output": "The capital of France is Paris."
    },
    # ... more examples
]

# Fine-tune
model.fine_tune(
    data=instruction_data,
    tokenizer=tokenizer,
    epochs=2,
    lr=5e-5,
    mask_prompt=True,  # Only compute loss on outputs
)

Generate Text

prompt = tokenizer.encode("What is")
generated = model.generate(
    input_ids=prompt,
    max_length=100,
    temperature=0.8,
)
print(tokenizer.decode(generated[0].tolist()))

Modules

Module Description
composennent.modules Core building blocks (Encoder, Decoder, Block)
composennent.modules.attention Attention mechanisms and masks
composennent.models GPT, BERT, and other transformer models
composennent.nlp.tokenizers WordPiece and SentencePiece tokenizers
composennent.trainer Training utilities and trainer classes
composennent.modules.experts Mixture of Experts components
composennent.vision Vision transformer components
composennent.utils Utility functions

Training API

For more control over training, use the trainer classes directly:

from composennent.trainer import CausalLMTrainer, train

# Option 1: Use the train() convenience function
train(model, texts, tokenizer, model_type="causal_lm", epochs=5)

# Option 2: Use trainer class directly
trainer = CausalLMTrainer(model, tokenizer, device="cuda")
trainer.train(texts, epochs=5, batch_size=16)
trainer.save_checkpoint("checkpoint.pt")

Available trainers:

  • CausalLMTrainer - GPT-style next-token prediction
  • MaskedLMTrainer - BERT-style masked language modeling
  • Seq2SeqTrainer - Encoder-decoder models
  • MultiTaskTrainer - Multi-task learning (MLM + NSP)
  • CustomTrainer - Custom loss functions

Requirements

  • Python >= 3.8
  • PyTorch >= 2.0.0

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Install dev dependencies (pip install -e ".[dev]")
  4. Run tests (pytest)
  5. Run formatters (black . && ruff check .)
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

composennent-0.4.6.tar.gz (62.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

composennent-0.4.6-py3-none-any.whl (84.7 kB view details)

Uploaded Python 3

File details

Details for the file composennent-0.4.6.tar.gz.

File metadata

  • Download URL: composennent-0.4.6.tar.gz
  • Upload date:
  • Size: 62.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for composennent-0.4.6.tar.gz
Algorithm Hash digest
SHA256 454974664104d8ee5b99064580ed5661b06fb3d89a5243b2fdd0a643a60f6c1f
MD5 2e4b1ed0d0be2268f1b501b5fa1f5bc5
BLAKE2b-256 cff6a712a0104d48d0554def35e4a3a729391c1d4f04517b1ea7d2dbe63199b0

See more details on using hashes here.

File details

Details for the file composennent-0.4.6-py3-none-any.whl.

File metadata

  • Download URL: composennent-0.4.6-py3-none-any.whl
  • Upload date:
  • Size: 84.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for composennent-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9c7f72bb00acb8b573fe5e7123ce16ee11ab7dc2f3f2c28878f45d2b9ff434d0
MD5 e56dae50c378854e9bf0a3644403e558
BLAKE2b-256 4e9aa30a61251118f7556281b474ab35b34dd846665a7a0e8b209f658b9bfbf1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page