distllm
Distributed Inference for Large Language Models.
- Create embeddings for large datasets at scale.
- Generate text using language models at scale.
- Semantic similarity search using Faiss.
Installation
distllm is available on PyPI and can be installed using pip:
pip install distllm
To install the package on Polaris@ALCF as of 12/12/2024, run the following command:
git clone git@github.com:ramanathanlab/distllm.git
cd distllm
module use /soft/modulefiles; module load conda
conda create -n distllm python=3.12 -y
conda activate distllm-12-12
pip install faiss-gpu-cu12
pip install vllm
pip install -e .
python -m nltk.downloader punkt
Protein Embedding Installation
For ESMC, you can install the following package:
pip install esm
For ESM2, you can install the following package:
pip install flash-attn --no-build-isolation
pip install faesm[flash_attn]
Or, if you want to forego flash attention and just use SDPA
pip install faesm
Usage
To create embeddings at scale, run the following command:
nohup python -m distllm.distributed_embedding --config examples/your-config.yaml &> nohup.out &
For LLM generation at scale, run the following command:
nohup python -m distllm.distributed_generation --config examples/your-config.yaml &> nohup.out &
To run smaller datasets on a single GPU, you can use the following command:
distllm embed --encoder_name auto --pretrained_model_name_or_path pritamdeka/S-PubMedBert-MS-MARCO --data_path /lus/eagle/projects/FoundEpidem/braceal/projects/metric-rag/data/parsed_pdfs/LUCID.small.test/parsed_pdfs --data_extension jsonl --output_path cli_test_lucid --dataset_name jsonl_chunk --batch_size 512 --chunk_batch_size 512 --buffer_size 4 --pooler_name mean --embedder_name semantic_chunk --writer_name huggingface --quantization --eval_mode
Or using a larger model on a single GPU, such as Salesforce/SFR-Embedding-Mistral:
distllm embed --encoder_name auto --pretrained_model_name_or_path Salesforce/SFR-Embedding-Mistral --data_path /lus/eagle/projects/FoundEpidem/braceal/projects/metric-rag/data/parsed_pdfs/LUCID.small.test/parsed_pdfs --data_extension jsonl --output_path cli_test_lucid_sfr_mistral --dataset_name jsonl_chunk --batch_size 16 --chunk_batch_size 2 --buffer_size 4 --pooler_name last_token --embedder_name semantic_chunk --writer_name huggingface --quantization --eval_mode
To merge the HF dataset files, you can use the following command:
distllm merge --writer_name huggingface --dataset_dir /lus/eagle/projects/FoundEpidem/braceal/projects/metric-rag/data/semantic_chunks/lit_covid_part2.PubMedBERT/embeddings --output_dir lit_covid_part2.PubMedBERT.merge
To generate text using a language model, you can use the following command:
distllm generate --input_dir cli_test_lucid/ --output_dir cli_test_generate --top_p 0.95
Contributing
For development, it is recommended to use a virtual environment. The following commands will create a virtual environment, install the package in editable mode, and install the pre-commit hooks.
python3.10 -m venv venv
source venv/bin/activate
pip install -U pip setuptools wheel
pip install -e '.[dev,docs]'
pre-commit install
To test the code, run the following command:
pre-commit run --all-files
tox -e py310
To release a new version of distllm to PyPI:
- Merge the develop branch into the main branch with an updated version number in pyproject.toml.
- Make a new release on GitHub with the tag and name equal to the version number.
- Clone a fresh distllm repository and run the installation commands above.
- Run the following commands from the main branch:
rm -r dist
python3 -m build
twine upload dist/*
Metadata
Release files for distllm 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| distllm-1.0.2.tar.gz | 65.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| distllm-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 153.0 kB
Release files / distllm-1.0.2.tar.gz
| Download URL | distllm-1.0.2.tar.gz |
|---|---|
| Size | 65.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c11ceb58223ff056137f74bdcb33c943d136623c4fd9fca88e793b2ea18aa66
|
|
BLAKE2b-256 checksum How to use checksums |
7387833f0b368796b0947aa16b483ed7b34815ed3fc4a60b5337819360d9be33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.7
|
Release files / distllm-1.0.2-py3-none-any.whl
| Download URL | distllm-1.0.2-py3-none-any.whl |
|---|---|
| Size | 87.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d52b4a797f9cb83c1a7421aa9b77cb986dda32d42804d6a441452b68ff93424a
|
|
BLAKE2b-256 checksum How to use checksums |
5d3a96bb7c6602f965cb16ef14097373275bb576f76a87c7846fda405afd34cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.7
|