Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Simple and efficient pytorch-native transformer text generation in <1000 LOC of python.

License

NotificationsYou must be signed in to change notification settings

meta-pytorch/gpt-fast

Simple and efficient pytorch-native transformer text generation.

Featuring:

  1. Very low latency
  2. <1000 lines of python
  3. No dependencies other than PyTorch and sentencepiece
  4. int8/int4 quantization
  5. Speculative decoding
  6. Tensor parallelism
  7. Supports Nvidia and AMD GPUs

This isNOT intended to be a "framework" or "library" - it is intended to show off what kind of performance you can get with native PyTorch :) Please copy-paste and fork as you desire.

For an in-depth walkthrough of what's in this codebase, see thisblog post.

Supported Models

LLaMA family

Please check the rest of this page about benchmark of LLaMA family models.

Mixtral 8x7B

We also supportedMixtral 8x7B which is a high-quality sparse mixture of experts (MoE) model, the average token generation rates are:

1 GPU2 GPU4 GPU8 GPU
baseline(bfloat16)OOM96.67155.35227.82
int897.92155.03216.87279.35

Note that the benchmarks run on an 8xA100-80GB, power limited to 330W with a hybrid cube mesh topology. Note that all benchmarks are run atbatch size=1, making the reported tokens/s numbers equivalent to "tokens/s/user". In addition, they are run with a very small prompt length (just 5 tokens).

For more details about Mixtral 8x7B, please checkthis page or thisnote.

Examples

In the spirit of keeping the repo minimal, here are various examples of extensions you can make to gpt-fast as PRs.

Community

Projects inspired by gpt-fast in the community:

  • gpt-blazing: applies the same performance optimization strategy to more models (e.g., baichuan2).
  • gptfast: applies a subset of the performance optimizations to all Huggingface models
  • gpt-accelera: extendsgpt-fast to SFT/RM/PPO training and batched inference to optimize the throughput

Installation

Download PyTorch nightly

Install required packages:

pip install -r requirements.txt

To download llama models, go tohttps://huggingface.co/meta-llama/Llama-2-7b and go through steps to obtain access.Then login withhuggingface-cli login

Downloading Weights

Models tested/supported

tinyllamas/stories{15,42,100}openlm-research/open_llama_7bmeta-llama/Llama-2-7b-chat-hfmeta-llama/Llama-2-13b-chat-hfmeta-llama/Llama-2-70b-chat-hfcodellama/CodeLlama-7b-Python-hfcodellama/CodeLlama-34b-Python-hfmistralai/Mistral-7B-v0.1mistralai/Mistral-7B-Instruct-v0.1mistralai/Mistral-7B-Instruct-v0.2meta-llama/Meta-Llama-3-8Bmeta-llama/Meta-Llama-3.1-8Bmeta-llama/Meta-Llama-3.1-70Bmeta-llama/Meta-Llama-3.1-405B

For example, to convert Llama-2-7b-chat-hf

export MODEL_REPO=meta-llama/Llama-2-7b-chat-hf./scripts/prepare.sh$MODEL_REPO

Benchmarks

Benchmarks run on an 8xA100-80GB, power limited to 330W with a hybrid cube mesh topology. Note that all benchmarks are run atbatch size=1, making the reported tokens/s numbers equivalent to "tokens/s/user". In addition, they are run with a very small prompt length (just 5 tokens).

ModelTechniqueTokens/SecondMemory Bandwidth (GB/s)
Llama-2-7BBase104.91397.31
8-bit155.581069.20
4-bit (G=32)196.80862.69
Llama-2-70BBaseOOM
8-bit19.131322.58
4-bit (G=32)25.251097.66
Llama-3.1-8BBase93.891410.76
8-bit137.641030.89
Llama-3.1-70BBaseOOM
8-bit18.041253.78

Speculative Sampling

Verifier: Llama-70B (int4), Draft: Llama-7B (int4): 48.4 tok/s

Tensor Parallelism

ModelNumber of GPUsTokens/SecondMemory Bandwidth (GB/s)
Llama-2-7B1104.91397.31
2168.841181.99
4254.02955.83
8328.43704.10
Llama-2-70B1OOM
221.321481.87
438.011340.76
862.501135.29
Llama-3.1-8B193.831408.37
2149.101197.32
4217.21986.32
8276.01772.60
Llama-3.1-70B1OOM
216.031130.81
437.451360.53
858.781129.61

Tensor Parallelism + Quantization

ModelTechniqueTokens/SecondMemory Bandwidth (GB/s)
Llama-2-70BBase62.501135.29
8-bit80.44752.04
4-bit (G=32)90.77548.10
Llama-3.1-70BBase58.781129.61
8-bit75.58726.57
Llama-3.1-405B8-bit15.60815.87

AMD

Benchmarks run on one GCD of a MI-250x.

ModelTechniqueTokens/SecondMemory Bandwidth (GB/s)
Llama-2-7BBase76.331028.70
8-bit101.86700.06

Generate Text

Model definition inmodel.py, generation code ingenerate.py.

python generate.py --compile --checkpoint_path checkpoints/$MODEL_REPO/model.pth --prompt"Hello, my name is"

To squeeze out a little bit more performance, you can also compile the prefill with--compile_prefill. This will increase compilation times though.

Quantization

Choose device to use by

# The current support devices: cuda, cpuexport DEVICE=cuda

Int8 Weight-Only Quantization

To generate this version of the model

# Spits out model at checkpoints/$MODEL_REPO/model_int8.pthpython quantize.py --checkpoint_path checkpoints/$MODEL_REPO/model.pth --mode int8

To run with int8, just pass the int8 checkpoint to generate.py.

python generate.py --compile --checkpoint_path checkpoints/$MODEL_REPO/model_int8.pth --device$DEVICE

Int4 Weight-Only Quantization

To generate int4 version of model

# Spits out model at checkpoints/$MODEL_REPO/model_int4.g32.$DEVICE.pthpython quantize.py --checkpoint_path checkpoints/$MODEL_REPO/model.pth --mode int4 --groupsize 32

To run with int4, just pass the int4 checkpoint to generate.py.

python generate.py --checkpoint_path checkpoints/$MODEL_REPO/model_int4.g32.pth --compile

Speculative Sampling

To generate with speculative sampling (DRAFT_MODEL_REPO should point to a smaller model compared with MODEL_REPO).

In this example, the "smaller" model is just the int8 quantized version of the model.

export DRAFT_MODEL_REPO=meta-llama/Llama-2-7b-chat-hfpython generate.py --compile --checkpoint_path checkpoints/$MODEL_REPO/model.pth --draft_checkpoint_path checkpoints/$DRAFT_MODEL_REPO/model_int8.pth

Note: Running on an A100 80GB, albeit power-limited to 330 watts. Empirically, seems like peak bandwidth is about 1700 GB/s.

Tensor Parallelism

ENABLE_INTRA_NODE_COMM=1 torchrun --standalone --nproc_per_node=2 generate.py --compile --checkpoint_path checkpoints/$MODEL_REPO/model.pth

Experimental

Evaluation

We use the EleutherAI evaluation harness to evaluate our model accuracy. To evaluate the accuracy, make sure the evaluation harness is installed and pass your model checkpoint and desired tasks to eval.py.

python eval.py --checkpoint_path checkpoints/$MODEL_REPO/model.pth --compile --tasks hellaswag winogrande

Note: Generative tasks are currently not supported for gpt-fast

Installation Instructions for the evaluation harness:https://github.com/EleutherAI/lm-evaluation-harness/tree/master#install

GPTQ

We have a pure pytorch implementation of GPTQ that utilizes torch._dynamo.export to access the model structure. You can generate a GPTQ quantizedversion of int4 quantization by using the same command to quantize it but adding 'gptq' to the quantization mode i.e.

# Spits out model at checkpoints/$MODEL_REPO/model_int4-gptq.g32.pthpython quantize.py --mode int4-gptq --calibration_tasks wikitext --calibration_seq_length 2048

You can then eval or generate text with this model in the same way as above.

License

gpt-fast is released under theBSD 3 license.

Acknowledgements

Thanks to:

  • Lightning AI for supporting pytorch and work in flash attention, int8 quantization, and LoRA fine-tuning.
  • GGML for driving forward fast, on device inference of LLMs
  • Karpathy for spearheading simple, interpretable and fast LLM implementations
  • MLC-LLM for pushing 4-bit quantization performance on heterogeneous hardware

About

Simple and efficient pytorch-native transformer text generation in <1000 LOC of python.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors22


[8]ページ先頭

©2009-2025 Movatter.jp