Skip to main content

Ditty

A simple fine-tune.

What

A very simple library for finetuning Huggingface Pretrained AutoModelForCausalLM such as GPTNeoX, leveraging Huggingface Accelerate, Transformers, Datasets and Peft

Ditty has support for LORA, 8bit, and fp32 cpu offloading right out of the box and assumes you are running with a single GPU or distributed over multiple GPUs by default.

Checkpointing supported, currently a bug with pushing to HF model hub though so checkpoints are all local.

FP16, BFLOAT16 now supported.

QLORA 4bit supported under experimental, and requires installing development branches of accelerate, peft, transformers and the latest bitsandbytes.

What Not

  • Ditty does not support ASICs like TPU or Trainium.
  • Ditty does not handle Sagemaker
  • Ditty does not by default run with the CPU
  • Ditty does not handle evaluation sets or benchmarking, this may or may not change.

Soon

  • Ditty may handle distributed cluster finetuning
  • Ditty will support DeepSpeed

Classes

Pipeline

Pipeline is responsible for running the entire show. Simply subclass Pipeline and implement the dataset method for your custom data, this must return a torch.utils.data.DataLoader

Instantiate with your chosen config and then simply call run.

Trainer

Trainer does what it's name implies, which is to train the model. You may never need to touch this if you're not interested in customizing the training loop.

Data

Data wraps an HF Dataset and can configure length grouped sampling and random sampling, as well as handling collation, batching, seeds, removing unused columns and a few other things.

The primary way of using this class is through the prepare method which takes a list of operations to perform against the dataset. These are normal operations like map and filter.

Example:

data = Data(
    load_kwargs={"path": self.dataset_name, "name":
                 self.dataset_language},
    tokenizer=self.tokenizer,
    seed=self.seed,
    batch_size=self.batch_size,
    grad_accum=self.grad_accum,
)

....sic

dataloader = data.prepare(
        [
            ("filter", filter_longer, {}),
            ("map", do_something, dict(batched=True, remove_columns=columns)), 
            ("map", truncate, {}),
        ]
    )

This can be used to great effect when overriding the dataset method in a subclass of Pipeline.

Setup

pip install ditty

Tips

https://github.com/google/python-fire is a tool for autogenerating CLIs from Python functions, dicts and objects.

It can be combined with Pipeline to make a very quick cli for launching your process.

Attribution / Statement of Changes

Portions of this library look to Huggingface's transformers Trainer class as a reference and in some cases re-implements functions from Trainer, simplified to only account for GPU based work and overall narrower supported scope.

This statement is both to fulfill the obligations of the ApacheV2 licencse, but also because those folks do super cool work and I appreciate all they've done for the community and its just right to call this out.

License

Apache V2 see the LICENSE file for full text.

Metadata

Release files for ditty 0.5.0

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

Source distribution (sdist)

Source distribution for ditty 0.5.0
File Size Uploaded
ditty-0.5.0.tar.gz 14.3 kB Details

Built distribution (wheel)

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

Total release size: 28.3 kB

Release files / ditty-0.5.0.tar.gz

Download URL ditty-0.5.0.tar.gz
Size 14.3 kB
Tags Source
SHA-256 checksum
How to use checksums
afc739c14fa2b7123ad54e6367e5eee83b0aa09f7d9dbaf24423aeadebfbe4db
BLAKE2b-256 checksum
How to use checksums
da6060f8d713984af59aafe3013e554969c66a123c128aff581996b2c18f9265
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.2

Release files / ditty-0.5.0-py3-none-any.whl

Download URL ditty-0.5.0-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e5750ae60ca17d36097f64732382f6e4dd52596345957bd2ae55c993ccf7754b
BLAKE2b-256 checksum
How to use checksums
99aafe084269cd8ffe1c306a4f018905bf755079ff9d76a13339e5219553b83b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.1

2 release files

0.4.0

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.3

1 release file

0.1.3

1 release file

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