Meta Llama 3 性能提升与推理服务部署

利用 NVIDIA TensorRT-LLM 和 NVIDIA Triton 推理服务器提升 Meta Llama 3 性能

我们很高兴地宣布 NVIDIA TensorRT-LLM 支持 Meta Llama 3 系列模型,从而加速和优化您的 LLM 推理性能。 您可以通过浏览器用户界面立即试用 Llama 3 8B 和 Llama 3 70B(该系列中的首款型号)。 或者,通过在 NVIDIA API 目录中完全加速的 NVIDIA 堆栈上运行的 API 端点,其中 Llama 3 被打包为 NVIDIA NIM,具有可部署在任何地方的标准 API。

大型语言模型是计算密集型的。 它们的尺寸使得它们昂贵且运行缓慢,尤其是在没有正确的技术的情况下。 许多优化技术都可用,例如内核融合和量化到运行时优化(如 C++ 实现、KV 缓存、连续运行中批处理和分页注意力)。 开发人员必须决定哪种组合有助于他们的用例。 TensorRT-LLM 简化了这项工作。

TensorRT-LLM 是一个开源库,可加速 NVIDIA GPU 上最新 LLM 的推理性能。 NeMo 是一个用于构建、定制和部署生成式 AI 应用程序的端到端框架,它使用 TensorRT-LLM 和 NVIDIA Triton 推理服务器进行生成式 AI 部署。

TensorRT-LLM 使用 NVIDIA TensorRT 深度学习编译器。 它包括用于 FlashAttention 尖端实现的最新优化内核以及用于 LLM 模型执行的屏蔽多头注意力 (MHA)。 它还由简单的开源 Python API 中的预处理和后处理步骤以及多 GPU/多节点通信原语组成,可在 GPU 上实现突破性的 LLM 推理性能。

为了了解该库以及如何使用它,让我们看一下如何通过 TensorRT-LLM 和 Triton 推理服务器使用和部署 Llama 3 8B 的示例。

如需更深入的了解(包括不同的模型、不同的优化和多 GPU 执行),请查看 TensorRT-LLM 示例的完整列表。

开始安装

我们将首先使用 pip 命令按照操作系统特定的安装说明克隆和构建 TensorRT-LLM 库。 这是构建 TensorRT-LLM 的更简单方法之一。 或者,可以使用 dockerfile 检索依赖项来安装该库。

以下命令拉取开源库并安装在容器内安装 TensorRT-LLM 所需的依赖项。

git clone -b v0.8.0 https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM

检索模型权重

TensorRT-LLM 是一个用于 LLM 推理的库。 要使用它,您必须提供一组经过训练的权重。 可以从 Hugging Face Hub 或 NVIDIA NGC 等存储库中提取一组权重。 另一种选择是使用在 NeMo 等框架中训练的您自己的模型权重。

本文中的命令会自动从 Hugging Face Hub 中提取 80 亿参数 Llama 3 模型的指令调整变体的权重(和分词器文件)。 您还可以使用以下命令下载权重以供离线使用,并更新后面命令中的路径以指向此目录:

git lfs install
git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct

请注意,使用此模型需要特定的许可证。 同意条款并通过 HuggingFace 进行身份验证以下载必要的文件。

运行 TensorRT-LLM 容器

我们将启动一个基础 docker 容器并安装 TensorRT-LLM 所需的依赖项。

# Obtain and start the basic docker image environment.
docker run --rm --runtime=nvidia --gpus all --volume ${PWD}:/TensorRT-LLM --entrypoint /bin/bash -it --workdir /TensorRT-LLM nvidia/cuda:12.1.0-devel-ubuntu22.04# Install dependencies, TensorRT-LLM requires Python 3.10
apt-get update && apt-get -y install python3.10 python3-pip openmpi-bin libopenmpi-dev# Install the stable version (corresponding to the cloned branch) of TensorRT-LLM.
pip3 install tensorrt_llm==0.8.0 -U --extra-index-url https://pypi.nvidia.com

编译模型

该过程的下一步是将模型编译到 TensorRT 引擎中,并使用 TensorRT-LLM Python API 编写模型权重和模型定义。

TensorRT-LLM 存储库包含多个模型架构,我们使用 Llama 模型定义。 有关更多详细信息以及更强大的插件和可用量化,请参阅此 Llama 示例和精度文档。

# Log in to huggingface-cli
# You can get your token from huggingface.co/settings/token
huggingface-cli login --token *****# Build the Llama 8B model using a single GPU and BF16.
python3 examples/llama/convert_checkpoint.py --model_dir ./Meta-Llama-3-8B-Instruct \--output_dir ./tllm_checkpoint_1gpu_bf16 \--dtype bfloat16trtllm-build --checkpoint_dir ./tllm_checkpoint_1gpu_bf16 \--output_dir ./tmp/llama/8B/trt_engines/bf16/1-gpu \--gpt_attention_plugin bfloat16 \--gemm_plugin bfloat16

当我们使用 TensorRT-LLM API 创建模型定义时,我们会根据构成神经网络各层的 TensorRT 原语构建操作图。 这些操作映射到特定的内核,这些内核是为 GPU 预先编写的程序。

TensorRT 编译器可以扫描图表,为每个操作和每个可用 GPU 选择最佳内核。 它还可以识别图中的模式,其中多个操作适合合并到单个融合内核中,从而减少所需的内存移动量和启动多个 GPU 内核的开销。

此外,TensorRT 将操作图构建到可以同时启动的 NVIDIA CUDA Graph 中。 这进一步减少了启动内核的开销。

TensorRT编译器在融合层和提高执行速度方面非常高效,但是,有一些复杂的层融合,例如FlashAttention,涉及将许多操作交错在一起并且无法自动发现。 对于这些,我们可以在编译时用插件显式替换部分图。 在我们的示例中,我们包含 gpt_attention 插件(它实现了类似 FlashAttention 的融合注意力内核)和 gemm 插件(它通过 FP32 累加执行矩阵乘法)。 我们还将完整模型所需的精度称为 FP16,与我们从 HuggingFace 下载的权重的默认精度相匹配。

当我们完成运行构建脚本时,我们应该会在 /tmp/llama/8B/trt_engines/bf16/1-gpu 文件夹中看到以下三个文件:

  • rank0.engine 是我们构建脚本的主要输出,包含嵌入模型权重的可执行操作图。
  • config.json 包含有关模型的详细信息,例如其一般结构和精度,以及有关引擎中合并了哪些插件的信息。

运行模型

那么,现在我们已经有了模型引擎,我们可以用它做什么呢?

引擎文件包含执行模型的信息。 TensorRT-LLM 包括高度优化的 C++ 运行时,用于执行引擎文件和管理流程,例如从模型输出中采样令牌、管理 KV 缓存以及一起批处理请求。

我们可以直接使用运行时在本地执行模型,也可以在生产环境中使用Triton Inference Server进行部署,以便与多个用户共享模型。

要在本地运行模型,我们可以执行以下命令:

python3 examples/run.py --engine_dir=./tmp/llama/8B/trt_engines/bf16/1-gpu --max_output_len 100 --tokenizer_dir ./Meta-Llama-3-8B-Instruct --input_text "How do I count to nine in French?"

使用 Triton 推理服务器进行部署

除了本地执行之外,我们还可以使用 Triton Inference Server 来创建 LLM 的生产就绪部署。 TensorRT-LLM 的 Triton 推理服务器后端使用 TensorRT-LLM C++ 运行时来实现高性能推理执行。 它包括动态批处理和分页 KV 缓存等技术,可在低延迟的情况下提供高吞吐量。 TensorRT-LLM 后端已与 Triton 推理服务器捆绑在一起,并可作为 NGC 上的预构建容器使用。

首先,我们必须创建一个模型存储库,以便 Triton 推理服务器可以读取模型和任何关联的元数据。

tensorrtllm_backend 存储库包括我们可以复制的 all_models/inflight_batcher_llm/ 下所需模型存储库的设置。

该目录中有四个子文件夹,其中保存模型执行过程不同部分的工件。 preprocessing/ 和 postprocessing/ 文件夹包含 Triton Inference Server python 后端的脚本。 这些脚本用于对文本输入进行标记,并对模型输出进行去标记,以在字符串和模型运行的标记 ID 之间进行转换。

tensorrt_llm 文件夹是我们放置之前编译的模型引擎的位置。 最后,ensemble 文件夹定义了一个模型集成,它将前面的三个组件链接在一起,并告诉 Triton 推理服务器如何通过它们流动数据。

拉下示例模型存储库并将您在上一步中编译的模型复制到其中。

# After exiting the TensorRT-LLM docker container
cd ..
git clone -b v0.8.0 https://github.com/triton-inference-server/tensorrtllm_backend.git
cd tensorrtllm_backend
cp ../TensorRT-LLM/tmp/llama/8B/trt_engines/bf16/1-gpu/* all_models/inflight_batcher_llm/tensorrt_llm/1/

接下来,我们必须使用已编译模型引擎的位置修改存储库骨架中的配置文件。 我们还必须更新配置参数(例如分词器),以便在批处理推理请求时使用和处理 KV 缓存的内存分配。

#Set the tokenizer_dir and engine_dir paths
HF_LLAMA_MODEL=TensorRT-LLM/Meta-Llama-3-8B-Instruct
ENGINE_PATH=tensorrtllm_backend/all_models/inflight_batcher_llm/tensorrt_llm/1python3 tools/fill_template.py -i all_models/inflight_batcher_llm/preprocessing/config.pbtxt tokenizer_dir:${HF_LLAMA_MODEL},tokenizer_type:auto,triton_max_batch_size:64,preprocessing_instance_count:1python3 tools/fill_template.py -i all_models/inflight_batcher_llm/postprocessing/config.pbtxt tokenizer_dir:${HF_LLAMA_MODEL},tokenizer_type:auto,triton_max_batch_size:64,postprocessing_instance_count:1python3 tools/fill_template.py -i all_models/inflight_batcher_llm/tensorrt_llm_bls/config.pbtxt triton_max_batch_size:64,decoupled_mode:False,bls_instance_count:1,accumulate_tokens:Falsepython3 tools/fill_template.py -i all_models/inflight_batcher_llm/ensemble/config.pbtxt triton_max_batch_size:64python3 tools/fill_template.py -i all_models/inflight_batcher_llm/tensorrt_llm/config.pbtxt triton_max_batch_size:64,decoupled_mode:False,max_beam_width:1,engine_dir:${ENGINE_PATH},max_tokens_in_paged_kv_cache:2560,max_attention_window_size:2560,kv_cache_free_gpu_mem_fraction:0.5,exclude_input_in_output:True,enable_kv_cache_reuse:False,batching_strategy:inflight_fused_batching,max_queue_delay_microseconds:0

现在,我们可以启动 docker 容器并启动 Triton 服务器。 我们必须指定世界大小(模型构建的 GPU 数量)并指向我们刚刚设置的 model_repo。

#Change to base working directory
cd..
docker run -it --rm --gpus all --network host --shm-size=1g \
-v $(pwd):/workspace \
--workdir /workspace \
nvcr.io/nvidia/tritonserver:24.03-trtllm-python-py3# Log in to huggingface-cli to get tokenizer
huggingface-cli login --token *****# Install python dependencies
pip install sentencepiece protobuf# Launch Serverpython3 tensorrtllm_backend/scripts/launch_triton_server.py --model_repo tensorrtllm_backend/all_models/inflight_batcher_llm --world_size 1

发送请求

要发送推理请求并从正在运行的服务器接收完成,您可以使用 Triton 推理服务器客户端库之一或将 HTTP 请求发送到生成的端点。
以下curl命令演示了对正在运行的服务器请求完成的快速测试,并且可以查看功能更齐全的客户端脚本以与服务器进行通信。

curl -X POST localhost:8000/v2/models/ensemble/generate -d \
'{
"text_input": "How do I count to nine in French?",
"parameters": {
"max_tokens": 100,
"bad_words":[""],
"stop_words":[""]
}
}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315693.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习(5)-图的遍历

目录 什么是深度和广度优先 图的深度优先遍历-城市地图 图的广度优先遍历-最少转机 什么是深度和广度优先 使用深度优先搜索来遍历这个图的过程具体是: 首先从一个未走到过的顶点作为起始顶点, 比如以1号顶点作为起点。沿1号顶点的边去尝试访问其它未…

【PyTorch与深度学习】2、PyTorch张量的运算API(上)

课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,这个课还是讲的简略,我半小时的课听了一个半小时。 1. 张量 1.1 张量操作 (1)chunk:将一…

Java web应用性能分析之【sysbench基准测试】

Java web应用性能分析之【CPU飙高分析之MySQL】-CSDN博客 Java web应用性能分析之【Linux服务器性能监控分析概叙】-CSDN博客 Java web应用性能分析概叙-CSDN博客 Java web应用性能分析之【基准测试】-CSDN博客 上面基本科普了一下基准测试,这里我们将从sysbench…

【喜报】科大睿智为武汉博睿英特科技高质量通过CMMI3级评估咨询工作

武汉博睿英特科技有限公司是信息通信技术产品、建筑智慧工程服务提供商。其拥有专注于航空、政府、教育、金融等多行业领域的资深团队,及时掌握最新信息通信应用技术,深刻理解行业业务流程,擅于整合市场优质资源,积极保持与高校产…

苹果电脑如何轻松抹掉NTFS格式磁盘 如何将Mac系统下硬盘格式化为NTFS Mac硬盘格式化

在苹果电脑的操作系统下,对于磁盘格式的转换基本是每个电脑使用者都会进行的操作,一般是为了使磁盘更好地在电脑上存储文件。 NTFS(New Technology File System)是一种Windows系统常用的文件系统,而Mac电脑则默认使用…

java案例-服务端与客户端(传输对象)

需求 代码 SysUser 用户类Operation 操作类Client 客户端Server 服务端ServerReaderThread 服务端线程类 SysUser 用户类 需要实现Serializable 方便序列化,传输对象 public class SysUser implements Serializable {private String username;private String passwo…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器: 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器: 做22 机器的备胎 装nginx keepalived 99机器:做mysql的主 装mysqld 装node 装filebeat 77机器:做mysq…

Git零基础

Git工作流程图 操作指令 分支 、 指令总结 远程仓库

ubuntu安装Anaconda安装及conda使用

一. 安装anaconda3详细教程 1、下载镜像 清华大学开源软件镜像站下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下拉到最低端选择Linux,选择最新版(32/64位)下载。这里我下载的是版本Anaconda3-4.3.30-Linux…

python应用-socket网络编程(1)

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书:MATLAB语音信号分析与合成(第2版) 链接(含配套源代码):https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码:32rf 基础入门视频: 视频链接: 清…

Eclipse C++ 无法debug 问题

环境: ubuntu20.04 Eclipse CDT(x86_64) 工程,使用的是默认的CMake Project 现象: 1. 使用Eclipse, 加了断点后,debug 无法停在断点;step over 执行后是从main 直接执行到exit &#xff…

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统,恢复出厂开箱状态一模一样 适用型号:隐星P16 23 链接:https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码:ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测

分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测 目录 分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测(Matlab实…

31 OpenCV 距离变换和分水岭算法

文章目录 距离变换分水岭算法distanceTransform 距离变换watershed 分水岭算法示例 距离变换 分水岭算法 distanceTransform 距离变换 void cv::distanceTransform (InputArray src,OutputArray dst,int distanceType,int maskSize,int dstType CV_32F) src:输入图像&#xf…

Android 学习 鸿蒙HarmonyOS 4.0 第二天(项目结构认识)

项目结构认识 和 了解: 工程目录下的结构如下: 首先能看到有两个.开头的文件,分别是.hvigor 和 .idea。这两个文件夹都是与构建有关系的, 如果你开发过安卓app,构建完会生成一个apk安装包,鸿蒙则是生成hap…

maya blendshape

目录 shape编辑器 maya创建blendshape python 脚本 添加形变动画 查看顶点个数 shape编辑器 打开方式: 窗口-动画编辑器-形变编辑器 maya创建blendshape python 脚本 import maya.cmds as cmds# 创建基础网格 - 球体 baseMesh cmds.polySphere(name"bas…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本&#x…

ETL中双流合并和多流合并的区别

一、ETL工具 ETLCloud数据集成平台集实时数据集成和离线数据集成以及API发布为一体的数据集成平台。与其他开源数据集成工具相比,采用轻量化架构、具有更快的部署速度、更快的数据传输速度、更低的运维成本,同时支持多租户的团队协作能力,能…