使用ROCm和AMD GPU进行机器学习基准测试:复现我们的MLPerf推理提交

本文主要是介绍使用ROCm和AMD GPU进行机器学习基准测试:复现我们的MLPerf推理提交,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Benchmarking Machine Learning using ROCm and AMD GPUs: Reproducing Our MLPerf Inference Submission — ROCm Blogs

简介

衡量新技术的性能是自古以来的一种实验,常常引人入胜(例如,我们仍然用马力来比较新电动汽车电机的性能)。在迅速发展的机器学习(ML)领域,MLPerf在2018年5月2日由MLCommons成立,迅速成为衡量AI准确性、速度和效率的黄金标准。MLPerf为训练、高性能计算和推理性能提供了基准测试。行业中的公司使用MLPerf的提交结果来评估各种GPU和软件平台的性能,并根据这些结果做出技术采用决策。

最近,使用AMD的Instinct TM MI300X GPU进行了两次竞争性的MLPerf推理提交(一次由AMD完成,另一次由戴尔完成),你可以在这里阅读我们的GPU表现得怎么样。在这篇博客中,我们将一步步展示如何在你自己的环境中,使用ROCm和AMD Instinct TM MI300X GPU复现AMD提交给MLPerf的结果。所以,卷起袖子,开始吧!

MLPerf提交

AMD MLPerf推理v4.1提交包含三个Llama 2 70B的条目。该提交使用了基于ROCm平台和vLLM推理引擎的完全开源软件堆栈。因此,有兴趣的用户可以在AMD的提交基础上构建,并为自己的高性能推理工作负载定制软件堆栈,运行在MI300X GPU上。提交的条目如下:
1. 8xMI300X与2x AMD EPYC 9374F(Genoa)CPU在“Available”类别中。这一条目展示了市场上可用于AI任务的最佳AMD CPU和GPU组合。
2. 1xMI300X与2x AMD EPYC 9374F(Genoa)CPU在“Available”类别中。此条目展示了MI300X(192GB)的内存容量,使其能够运行整个Llama 2 70B模型,不像许多竞争条目需要在多个加速器之间分割任务。
3. 8xMI300X与2x AMD EPYC Turin CPU在“Preview”类别中。此条目展示了AMD下一代CPU如何提升AI任务的性能。

设置

先决条件

要跟随此博客进行操作,您需要以下内容:
- 8 个 [MI300X AMD GPU](AMD Instinct™ MI300X Accelerators)。
- ROCm 6.1.0 或更高版本。
- 任意 [ROCm 支持的 Linux 发行版](System requirements (Linux) — ROCm installation (Linux))。
有关如何安装 ROCm 的信息,请参阅 [ROCm 快速入门安装指南](Quick start installation guide — ROCm installation (Linux))。要尝试生成提交中第一个条目的结果,需要设置您的系统,主要有四个步骤:
- 下载 Llama 2 70B 模型。
- 下载 MLPerf 指定的数据集以运行推理。
- 准备 Docker 容器。
- 将 Llama 2 70B 模型量化为 FP8 格式。

以下是每个步骤的详细说明。

模型准备

按照 MLcommons Github 库中 [获取模型部分]的说明,将 Llama 2 70B 模型权重下载到文件系统中的某个位置。

设置环境变量 $LAB_MODEL 为模型权重目录的路径:

export LAB_MODEL="<path to model weight>"

数据集准备

根据 MLCommons GitHub 仓库中获取数据集部分的说明,下载与 Llama 2 70B 模型相关的预处理数据集文件。

将 $LAB_DATASET 环境变量设置为指向数据集目录中的 open_orca 目录。

export LAB_DATASET="<path to dataset>/open_orca/"

AMD MLPerf 推理 Docker 容器设置

要构建运行推理的 Docker 容器,请克隆与本文相关的仓库并切换到 src/docker 目录:

git clone https://github.com/ROCm/rocm-blogs.git
cd rocm-blogs/blogs/artificial-intelligence/mlperf-inf-4-1/src/docker

使用以下命令构建 Docker 镜像并启动容器。设置环境变量 $LAB_HIST 以指向将存储基准测试输出的目录。

# set env variable LAB_HIST
export LAB_HIST="<path to the output>"# Build the image `mlperf/llama_inference:latest`
./build_llama2.sh# Launch a docker container
docker run -it --ipc=host --network=host --privileged --cap-add=CAP_SYS_ADMIN --device=/dev/kfd --device=/dev/dri --device=/dev/mem \--group-add render --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \-v ${LAB_MODEL}:/data/llm/llama2-70b-chat \-v ${LAB_DATASET}:/data/open_orca \-v ${LAB_HIST}:/lab-hist \-e LAB_CLOG=/lab-hist/mlperf-results \mlperf/llama_inference:latest

量化准备

提交的一个重要组成部分是量化模型以利用 MI300X 的 FP8 支持。使用 Quark 将 Llama 2 70B 聊天模型量化为 OCP FP8-e4m3 格式,使用 MLPerf 要求的校准数据集进行量化。Quark 是 AMD 开发的深度学习模型量化工具包,用于从 PyTorch、ONNX 和其他框架量化模型。

在推理容器中运行以下命令量化模型:

model_dir=/data/llm/llama2-70b-chat
output_dir=/data/llm/llama2-70b-chat/quantized/quark_share/modelzoo/llama2_70b_wfp8_afp8_ofp8_nomerge/json-safetensors/
calib_dataset=/data/open_orca/open_orca_gpt4_tokenized_llama.calibration_1000.pkl.gzcd /lab-mlperf-inference/code/llama2-70b-99.9/tools/quark-0.1.0+a9827f5-mlperf/examples/torch/language_modeling/python3 quantize_quark.py --model_dir $model_dir \--output_dir $output_dir \--quant_scheme w_fp8_a_fp8_o_fp8 \--dataset $calib_dataset \--num_calib_data 1000 \--model_export vllm_adopted_safetensors \--no_weight_matrix_merge

注意
在容器中量化模型权重时使用的特定 KV 缓存缩放比例是经过优化的,与 vLLM 仓库中的主流版本不同。可以在 GitHub 中的这个提交中找到。

生成结果

要生成我们提交的第一个条目的结果,请在推理容器中运行以下命令。推理的日志和结果可以在容器中的目录 /lab-hist/mlperf-results/<time-stamp> 下找到。

cd /lab-mlperf-inference/code/llama2-70b-99.9/test_VllmFp8
./run_scenarios.sh

在离线场景中的结果摘要可以在 Offline/performance/run_1 文件夹下的 mlperf_log_summary.txt 文件中找到:

more /lab-hist/mlperf-results/<time-stamp>/Offline/performance/run_1/mlperf_log_summary.txt
================================================
MLPerf Results Summary
================================================
SUT name : PySUT
Scenario : Offline
Mode     : PerformanceOnly
Samples per second: 80.2353
Tokens per second: 23545.5
Result is : VALIDMin duration satisfied : YesMin queries satisfied : YesEarly stopping satisfied: Yes
...

在此次特定试验中,我们记录了每秒 23,545.5 个 token(未验证),这一结果与提交中记录的结果(每秒 23,514.80 个 token)相匹配。

在服务器场景中的结果摘要可以在 Server/performance/run_1/ 文件夹下的 mlperf_log_summary.txt 文件中找到:

more /lab-hist/mlperf-results/<time-stamp>/Server/performance/run_1/mlperf_log_summary.txt
================================================
MLPerf Results Summary
================================================
SUT name : PySUT
Scenario : Server
Mode     : PerformanceOnly
Completed samples per second    : 69.11
Completed tokens per second: 20360.10
Result is : VALIDPerformance constraints satisfied : YesMin duration satisfied : YesMin queries satisfied : YesEarly stopping satisfied: Yes
TTFT Early Stopping Result:* Run successful.
TPOT Early Stopping Result:* Run successful.
...

在此次特定试验中,我们记录了每秒 20,360.10 个已完成的 token(未验证),这一结果与提交中该场景下的结果(每秒 21,028.20 个 token)相当。

您还可以只针对离线场景或只针对服务器场景生成结果。要仅运行离线场景,请使用 run_tests_Offline.sh。要仅运行服务器场景,请使用 run_tests_Server.sh

总结

在这篇博客文章中,我们向您展示了如何使用 MI300X 自行复现 AMD 以 Llama 2 70B 模型提交的 MLPerf 推理结果。您可以在Benchmark MLPerf Inference: Datacenter | MLCommons V3.1找到 MLPerf 结果。请注意,由于每次运行中的硬件配置和状态可能有所不同,具体结果可能会与提交的结果有所偏差。我们鼓励您在我们的基础上进一步优化工作负载,使用 MI300X 和 ROCm。

这篇关于使用ROCm和AMD GPU进行机器学习基准测试:复现我们的MLPerf推理提交的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129027

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出