Skip to main content

OptiNet - A Versatile Library for ML and NLP Model Training

OptiNet is a Python library designed to simplify and optimize traditional Machine Learning (ML) and Natural Language Processing (NLP) workflows. With an easy-to-use interface, OptiNet allows you to prepare datasets, train models, and evaluate performance for both ML and large language models (LLMs). This library supports scikit-learn models as well as transformer-based models from Hugging Face, with support for LoRA and QLoRA for parameter-efficient fine-tuning.

Features

  • Unified Interface: Train and evaluate both traditional ML models and transformer-based NLP models.
  • Data Preparation: Quickly load, split, and prepare data for training.
  • Tokenizer Integration: Easily tokenize text datasets using Hugging Face's transformers for NLP tasks.
  • Model Training: Train both ML models (e.g., scikit-learn) and large language models using Trainer from Hugging Face.
  • LoRA & QLoRA Support: Fine-tune large language models with Low-Rank Adaptation (LoRA) and Quantized LoRA (QLoRA) for efficient training.
  • Scalable Evaluations: Evaluate trained models and get performance metrics like accuracy.

Installation

You can install OptiNet using pip:

pip install OptiNet

Usage

1. Import and Initialize OptiNet

OptiNet can be used for both ML models (e.g., scikit-learn classifiers) and NLP models (e.g., transformers). Here is how you can get started:

from optinet import OptiNet
from sklearn.ensemble import RandomForestClassifier
from transformers import AutoModelForSequenceClassification

# Example ML Model
ml_model = RandomForestClassifier()
optinet_ml = OptiNet(model=ml_model, model_type='ml')

# Example NLP Model
llm_model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
optinet_nlp = OptiNet(model=llm_model, model_type='llm', model_name='distilbert-base-uncased')

2. Prepare Data

For ML models, OptiNet can load and split datasets like digits from scikit-learn:

# Prepare data for ML model
X_train, X_test, y_train, y_test = optinet_ml.prepare_data(dataset='digits')

For NLP models, you can load datasets from Hugging Face's datasets library:

# Prepare data for NLP model
nlp_dataset = optinet_nlp.prepare_data(dataset='imdb')  # e.g., IMDB movie reviews dataset

Custom Dataset Support

If you have a custom dataset (e.g., loaded from a file or a database), you can pass the dataset directly using the dataset_obj parameter:

# Prepare data from a custom dataset
my_dataset = load_dataset("csv", data_files="my_custom_data.csv")
nlp_dataset = optinet_nlp.prepare_data(dataset_obj=my_dataset)

This approach allows flexibility to use any custom dataset, without being restricted to the built-in ones.

3. Tokenize Data (For NLP Models)

If you're working with NLP models, you need to tokenize the data before training:

# Tokenize NLP dataset
tokenized_dataset = optinet_nlp.tokenize_data(nlp_dataset)

4. Train the Model

You can train both ML and NLP models using the train_model() method. This is where you can choose to fine-tune your model with LoRA and QLoRA by passing the relevant parameters.

Train ML model:

# Train ML model
optinet_ml.train_model(X_train, y_train)

Train NLP model with LoRA:

# Train NLP model with LoRA fine-tuning
optinet_nlp.train_model(
    tokenized_dataset['train'],
    output_dir="./output_lora",
    num_train_epochs=3,
    per_device_train_batch_size=8,
    lora_r=4,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.1,
    task_type="SEQ_CLS"
)

Train NLP model with QLoRA (4-bit quantization):

# Train NLP model with QLoRA (using 4-bit quantization)
optinet_nlp.train_model(
    tokenized_dataset['train'],
    output_dir="./output_qlora",
    num_train_epochs=3,
    per_device_train_batch_size=8,
    quantization_config={"load_in_4bit": True, "bnb_4bit_compute_dtype": torch.float16},
    lora_r=4,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.1,
    task_type="SEQ_CLS"
)

5. Evaluate the Model

Evaluate the performance of your trained model:

# Evaluate ML model
accuracy = optinet_ml.evaluate_model(X_test, y_test)
print(f"ML Model Accuracy: {accuracy:.2f}")

# Evaluate NLP model
results = optinet_nlp.evaluate_model(tokenized_dataset['test'])
print("NLP Model Evaluation:", results)

Requirements

OptiNet depends on several popular Python packages for ML and NLP tasks:

  • scikit-learn
  • transformers
  • datasets
  • torch
  • peft (for LoRA and QLoRA support)

To install these requirements, you can use the following command:

pip install scikit-learn transformers datasets torch peft

License

This project is licensed under the MIT License - see the LICENSE file for details.

Authors

  • Vishwanath Akuthota
  • Ganesh Thota
  • Krishna Avula

Contributing

We welcome contributions to improve OptiNet. Please feel free to submit issues and pull requests on the GitHub repository.

Metadata

Release files for OptiNet 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for OptiNet 0.1.7
File Size Uploaded
optinet-0.1.7.tar.gz 5.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for OptiNet 0.1.7
File Interpreter ABI Platform
optinet-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 11.0 kB

Release files / optinet-0.1.7.tar.gz

Download URL optinet-0.1.7.tar.gz
Size 5.5 kB
Tags Source
SHA-256 checksum
How to use checksums
00a55cb54b0a515dc3f7901b0122d40369c7377e6bdb34b4f5f8ab00d8b7a0d7
BLAKE2b-256 checksum
How to use checksums
cffc1adfcfcaff428fd49e6889c4d43a64d1f796a2f25d28213e9b9585e7b07b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release files / optinet-0.1.7-py3-none-any.whl

Download URL optinet-0.1.7-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7a8086949a3f7292905267b8ba743ad34fb78c3a18e2897b50acf8dc503c5acc
BLAKE2b-256 checksum
How to use checksums
6766f65de69522ea675b654adbe46994d27bba0115de813cff6bb651e0a2345f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page