From f11c9ef0d2622d51a5bd149d5a5ed6f657e86cfc Mon Sep 17 00:00:00 2001 From: Zhuohan Li Date: Thu, 25 Jul 2024 13:35:26 -0700 Subject: [PATCH] Add Llama 3.1 blogpost (new files) --- _posts/2024-07-23-llama31.md | 83 +++++++++++++++++++++++++ assets/figures/llama31/perf_llama3.png | Bin 0 -> 36966 bytes 2 files changed, 83 insertions(+) create mode 100644 _posts/2024-07-23-llama31.md create mode 100644 assets/figures/llama31/perf_llama3.png diff --git a/_posts/2024-07-23-llama31.md b/_posts/2024-07-23-llama31.md new file mode 100644 index 0000000..52aef20 --- /dev/null +++ b/_posts/2024-07-23-llama31.md @@ -0,0 +1,83 @@ +--- +layout: post +title: "Announcing Llama 3.1 Support in vLLM" +author: "vLLM Team" +--- + +Today, the vLLM team is excited to partner with Meta to announce the support for the Llama 3.1 model series. Llama 3.1 comes with exciting new features with longer context length (up to 128K tokens), larger model size (up to 405B parameters), and more advanced model capabilities. The vLLM community has added many enhancements to make sure the longer, larger Llamas run smoothly on vLLM, which includes chunked prefill, FP8 quantization, and pipeline parallelism. We will introduce these new enhancements in this blogpost. + + +### Introduction + +vLLM is a fast, easy-to-use, open-source serving engine for large language models. vLLM has support for more than 40 types of open-source LLMs, a diverse set of hardware platforms (Nvidia GPU, AMD GPU, AWS Inferentia, Google TPU, Intel CPU, GPU, Gaudi, …) and all kinds of inference optimizations. Learn more about vLLM [here](https://docs.vllm.ai/). + +For the new Llama 3.1 series, vLLM can run the models with a full 128K context window. In order to support a large context window, vLLM automatically enables [chunked prefill](https://www.linkedin.com/posts/joinanyscale_recently-weve-contributed-chunked-prefill-activity-7201277641490849792-lGqZ). Chunked prefill not only keeps memory usage under control, but also reduces the interruption from long prompt processing for ongoing requests. You can install vLLM by running the following command or using our official docker image (`vllm/vllm-openai`): + +```shell +pip install -U vllm +``` + + +For the large Llama 405B model, vLLM supports it in several methods: +- **FP8:** vLLM runs the official FP8 quantized model natively on 8xA100 or 8xH100. +- **Pipeline Parallelism:** vLLM runs the official BF16 version on multiple nodes by placing different layers of the model on different nodes. +- **Tensor Parallelism:** vLLM can also run by sharding the model across multiple nodes, and multiple GPUs within the nodes. +- **AMD MI300x or NVIDIA H200:** vLLM can run the model on a single 8xMI300x or 8xH200 machine, where each GPU has 192GB and 141 GB memory, respectively. +- **CPU Offloading:** as the last resort, vLLM can offload some of the weights to CPU while performing the forward pass, allowing you to run the large model at full precision on limited GPU memory. + +Please note that while vLLM supports all these methods, the performance is still preliminary. The vLLM community is actively working on optimizations and we welcome everyone’s contribution. For example, we are actively exploring more approaches to quantize the model, and to increase the throughput of pipeline parallelism. The performance numbers posted later in the blog are meant as early reference points; we expect the performance to improve significantly over the next few weeks. + +Out of all the methods, we recommend FP8 for a single node, and pipeline parallelism for multiple nodes. Let’s discuss them in more detail. + +### FP8 + +FP8 represents float point numbers in 8 bits. The current generation of GPUs (H100, MI300x) provide native support for FP8 via specialized tensor cores. Currently, vLLM can run FP8 quantized models for KV cache, attention, and MLP layers. This reduces memory footprint, increases throughput, lowers latency, and comes with minimal accuracy drops. + +Currently, vLLM supports the official Meta Llama 3.1 405B FP8 model quantized via FBGEMM by leveraging per-channel quantization in the MLP layer. In particular, each channel of the up/gate/down projections are quantized and multiplied by a static scaling factor. Combined with skipping quantization for the first and the last layer, and a static upper bound, this approach has minimal impact on the model’s accuracy. You can run the model with latest vLLM on a single 8xH100 or 8xA100 with the following command: + +```shell +$ vllm serve meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 +``` + +Using the FP8 quantized model serving requests with the average input length of 1024 tokens and the average output length of 128 output tokens, the server can sustain 2.82 requests per second. The corresponding serving throughput is 2884.86 input tokens per second and 291.53 output tokens per seconds, respectively. + +We also independently confirmed the accuracy drop of the FP8 checkpoints is minimal. For example, running the GSM8K benchmark using lm-eval-harness with 8 shots and chain-of-thought, we observed the exact match score of 95.38% (+- 0.56% stddev), which is a minimal drop compared to the BF16 official score of 96.8%. + + +### Pipeline Parallelism + +What if you want to run the Llama 3.1 405B model without quantization? You can do it with 16xH100 or 16xA100 GPUs using vLLM’s pipeline parallelism! + +Pipeline parallelism splits a model into smaller sets of layers, executing them in parallel on two or more nodes in a pipelined fashion. Unlike tensor parallelism, which requires expensive all-reduce operations, pipeline parallelism partitions the model across layer boundaries, needing only inexpensive point-to-point communication. This is particularly useful when you have multiple nodes that are not necessarily connected via fast interconnects like Infiniband. + +vLLM supports combining pipeline and tensor parallelism. For example, with 16 GPUs across 2 nodes, you can use 2-way pipeline parallelism and 8-way tensor parallelism to optimize hardware usage. This configuration maps half the model to each node, partitioning each layer across 8 GPUs using NVLink for all-reduce operations. You can run the Llama 3.1 405B model with the following command: + +```shell +$ vllm serve meta-llama/Meta-Llama-3.1-405B-Instruct --tensor-parallel-size 8 --pipeline-parallel-size 2 +``` + +If you have fast interconnects like Infiniband, you can use 16-way tensor parallelism: + +```shell +$ vllm serve meta-llama/Meta-Llama-3.1-405B-Instruct --tensor-parallel-size 16 +``` + +

+ + + +
Serving throughput on 16xH100 GPUs with a synthetic dataset (avg. input len 1024, avg. output len 128). +

+ +We have observed that pipeline parallelism is essential when the nodes are not connected via Infiniband. Compared to 16-way tensor parallelism, combining 2-way pipeline parallelism with 8-way tensor parallelism leads to 6.6x performance improvements. On the other hand, with Infiniband, the performance of both configurations is similar. + +To learn more about distributed inference using vLLM please refer to [this doc](https://docs.vllm.ai/en/latest/serving/distributed_serving.html). For CPU offloading, please refer to [this example](https://docs.vllm.ai/en/latest/getting_started/examples/cpu_offload.html). + + +
+ +----- + +### Acknowledgements + +We would like to thank Meta for the pre-release partnership and letting us test the model. Independently from the release, we thank the following vLLM contributors for the features mentioned in this blogpost: [NeuralMagic](https://neuralmagic.com/) for FP8 quantization; [CentML](https://centml.ai/) for pipeline parallelism; [Anyscale](https://www.anyscale.com/) for the chunked prefill feature. The evaluation runs on [Lambda’s 1-Click Clusters](https://lambdalabs.com/service/gpu-cloud/1-click-clusters) with InfiniBand, and we thank Lambda Labs for the resource and the smooth cluster setup experience. diff --git a/assets/figures/llama31/perf_llama3.png b/assets/figures/llama31/perf_llama3.png new file mode 100644 index 0000000000000000000000000000000000000000..51a2962dcddbbefbf02efa1426c8ef2acfc15289 GIT binary patch literal 36966 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 literal 0 HcmV?d00001