大语言模型(LLM)的兴起改变了自然语言处理(NLP),在文本分类、内容创作和问答等任务中展现出了卓越的能力。**然而 GPU 资源的紧缺,为生产环境中部署这些庞大的模型带来了挑战**。这些问题阻碍了 LLM 的广泛采用,特别是对于计算能力有限的企业。**借助亚马逊云科技的自研芯片,可以有效的缓解资源不足的问题**。此外 vLLM 作为主流的推理框架,也将 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例添加到了功能清单,我们将借助 vLLM 强大的推理能力,在 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 上搭建推理服务。
### **关于 Amazon EC2 Inf2**
[Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例由最多 12 个 Inferentia2 芯片提供支持,为部署大语言模型和其他生成式 AI 工作负载提供了经济高效、高性能的解决方案。
![image.png](https://dev-media.amazoncloud.cn/1aff5d9bf646439ba7ba6289efb24695_image.png "image.png")
借助高达 2.3PetaFLOPS 的计算能力和 384GB 的总加速器内存,以及 9.8TB/秒的总内存带宽,[Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例比其他可比的 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)实例的**性价比高出 40%**。为了实现加速器之间的快速通信,[Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例支持 192GB/秒的 NeuronLink,可实现高性能的集群通信操作。这允许跨多个 Inferentia2 设备分片大型模型(例如通过张量并行),从而优化延迟和吞吐量。
![image.png](https://dev-media.amazoncloud.cn/5986abf464154c0b82776eca10c6aa8f_image.png "image.png")
目前,[Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 提供四种实例类型,其中最大的实例规格(Inf2.48xlarge)能够部署高达 **1,750 亿参数**的模型。
![image.png](https://dev-media.amazoncloud.cn/489894bec8794301b577e1bf470fab19_image.png "image.png")
> https\://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/neuron-hardware/inf2-arch.html?trk=cndc-detail
### **Amazon Neuron**
Amazon Neuron 是一个用于在 Amazon Inferentia 和 Amazon Trainium 基础实例上运行深度学习工作负载的开发工具包(SDK)。Amazon Neuron 原生集成了 TensorFlow、PyTorch 和 Apache MXNet 等主流深度学习框架。提供了一套完整的工具链,包括深度学习编译器、运行时和相关工具。并为 Hugging Face 等热门模型库中的模型实现开箱即用的性能优化。通过使 用Amazon Neuron,可以在亚马逊云科技平台上快速构建、训练和部署高性能的深度学习模型。借助 Amazon Neuron SDK,可以在 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例上部署模型。
### **vLLM**
vLLM 是一个由加州大学伯克利分校的研究人员开发的开源库,旨在加速大语言模型(LLM)的推理和服务。vLLM 引入了创新的算法和优化,显著提高了 LLM 推理和服务的速度和效率。Hugging Face Transformers(HF)和 Hugging Face Text Generation Inference(TGI)的基准测试显示,vLLM 实现了高达 24 倍于 HF 和 3.5 倍于 TGI 的吞吐量。vLLM 从版本 0.3.3 开始,vLLM 加了对 Amazon Inferentia2 的实验性支持。
![image.png](https://dev-media.amazoncloud.cn/2f35d47e3f3644ba861c0588de3ceed5_image.png "image.png")
### **使用 vLLM 在 Amazon EC2 Inf2 进行 Mistral 模型的推理**
#### **环境说明**
将使用以下步骤在 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 上安装 vLLM v0.4.8 和 Neuron Compiler \[2.14.213.0],在此基础上运行 Mistral 7B v0.3 的大模型。
#### **配置 Inf2 实例**
启动 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例,选择 DeepLearning AMI Neuron (Ubuntu 22.04) 20240708。
在这里将使用预装了 Neuron 和 Ubuntu 22.04 的 DeepLearning AMI 作为运行环境。Neuron Deep Learning AMI 是一个预构建的 Amazon 镜像,预装了经过优化的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)框架和库,用于在 Amazon Neuron 实例上运行深度学习工作负载。极大地简化了环境设置。启动实例后将激活 Neuron 环境。
```
source /opt/amazon web services_neuronx_venv_pytorch_2_1/bin/activate
```
您可以通过运行以下命令检查 Neuronx 的相关版本:
```
neuronx-cc --version
```
![image.png](https://dev-media.amazoncloud.cn/619e0d5155574f49ab101b37ab1056fd_image.png "image.png")
#### **安装 vLLM**
下载 vLLM 并安装所需的依赖项:
```
git clone -b v0.4.3 https://github.com/vllm-project/vllm.git
pip install -U -r requirements-neuron.txt
pip install .
```
安装完成后,可以看到对应的 vLLM 版本和 Neuron 版本。
![image.png](https://dev-media.amazoncloud.cn/7a74edccf5b44f6082df873977ff9fb5_image.png "image.png")
#### **调整 vLLM 配置**
打开文件\~/vllm/vllm/engine/arg_utils.py,找到第 264 行:
```
parser.add_argument('--block-size',
type=int,
default=EngineArgs.block_size,
choices=[8, 16, 32,128],
help='Token block size for contiguous chunks of '
'tokens.')
```
将 block_size 设置为等于 max_model_len,这里设置为 128。
#### **启动模型 vLLM 通过 FastAPI 进行推理**
vLLM 的模型服务可以通过 Python 脚本在本机或 Docker 环境中启动。本文将展示使用 Python 命令的方式加载 Mistral-7B 模型,并同步启动内置 FastAPI 的 vLLM 服务。
```
python3 -m vllm.entrypoints.api_server \\
--model mistralai/Mistral-7B-v0.3 \\
--max-num-seqs 8 \\
--max-model-len 128 \\
--block-size 128 \\
--device neuron \\
--tensor-parallel-size 2
```
启动后会监听 8000 端口,接收相关的推理请求。
![image.png](https://dev-media.amazoncloud.cn/9963cda454e34978bb527280a209129b_image.png "image.png")
#### **调用推理接口**
将通过 HTTP POST 请求的方式调用 vLLM 进行推理。
```
curl -X POST -H "Content-Type: application/json" \\
localhost:8000/generate \\
-d '{"prompt": "[INST] Hello, my name is [/INST]"}'
```
返回:
```
{"text":["[INST] Hello my name is[/INST] Dillon and I'm here to share with you what I've learned"]}
```
至此已将 Mistral 7B v0.3 模型通过 vLLM 框架部署在 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)Inf2 实例上,并提供 API 服务。
### **总结**
**Amazon Inferentia2 加速芯片为大语言模型的高效部署带来了新的可能性**。本文以开源的 Mistral 7B 大语言模型为例,详细介绍了如何借助 vLLM 在 Amazon Inferentia2 上进行大模型的推理。**使用 Amazon Inferentia2 将极大地解决 GPU 资源紧缺问题,为大模型推理提供更加多样化的选择。**
#### **参考链接**
> https\://github.com/vllm-project/vllm?trk=cndc-detail
>
> https\://github.com/liangfu/vllm?trk=cndc-detail
>
> https\://docs.vllm.ai/en/latest/index.html?trk=cndc-detail
>
> https\://mistral.ai/technology/#deployment?trk=cndc-detail
>
> https\://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html?trk=cndc-detail
> *前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。
![image.png](https://dev-media.amazoncloud.cn/a58fccf1ea5a4830955009262a49aaf4_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/d79b6799c0ab4086883a5b228df16085_image.png "image.png")