基于亲和性的 GPU 容器绑核策略 Copy

1.引言

     在高性能计算和大规模并行任务处理中,GPU已经成为不可或缺的加速器。为了充分发挥GPU的计算能力,通过合理分配CPU核与GPU的绑定来优化CPU和GPU的关系至关重要。我们将探讨socket和NUMA(非统一内存访问)的概念,并讨论如何基于这些硬件架构实现CPU和GPU核心绑定,以保证最佳的系统性能。

2.Socket概念

2.1什么是SocKet

Socket 通常指的是主板上用于安装物理 CPU 的插槽。每个 Socket 对应一个物理 CPU,通常包含多个核心(Core)和一个或多个缓存层次结构(如L1、L2、L3缓存)。在多 Socket 系统中(例如,双路或四路服务器),每个 Socket 上安装的物理 CPU 通过高速互联总线(如 Intel 的 QPI 或 AMD 的 Infinity Fabric)相互连接。

2.2多 Socket系统的特点

在多Socket系统中,各个 Socket 上的CPU可以分别访问自己本地的内存,同时也能够访问其他 Socket 的内存。这种内存访问模式引出了NUMA的概念,旨在优化内存访问的效率。

3.NUMA(非统一内存访问)架构

3.1什么是 NUMA

NUMA 是 Non-Uniform Memory Access 的缩写,即非统一内存访问。与传统的统一内存访问(UMA)不同,在NUMA 架构中,系统内存被划分成多个区域,每个区域与特定的 CPU(Socket)紧密关联。CPU 访问自己 Socket对应的内存(本地内存)速度更快,而访问其他 Socket 对应的内存(远程内存)则会产生较高的延迟。

3.2NUMA 节点和内存访问延迟

在 NUMA 系统中,每个 Socket 及其直接连接的内存组成一个 NUMA 节点。同一 NUMA 节点内的内存访问速度较快,而跨节点的内存访问会因为需要经过额外的总线传输而导致更高的延迟。因此,优化内存和 CPU 的亲和性,使任务尽量在对应的 NUMA 节点内运行,是性能优化的重要一环。

4.CPU和GPU物理关系

4.1GPU的硬件架构

 GPU 通常通过 PCIe(Peripheral Component Interconnect Express)总线与 CPU 通信。在多Socket系统中,GPU通常只连接到某一个 Socket(及其对应的NUMA节点)上,而不跨 Socket 连接。这意味着在实际运行时,GPU 与连接的那个 Socket 上的 CPU 核心和内存具有更高的带宽和更低的延迟。

4.2CPU 和 GPU 亲和性

   CPU 和 GPU 之间的通信主要依赖于数据的传输。数据从 CPU 传递到 GPU,再从 GPU 传递回 CPU,过程中涉及到的内存访问操作对性能影响巨大。如果 GPU 绑定的 CPU 核心位于与其相同的 NUMA 节点上,那么数据传输的延迟将显著降低。因此,绑定 CPU 核心与 GPU 的关系是提升性能的关键

5.基于亲和性的GPU与CPU核心绑定策略

在使用Docker容器化部署应用时,实现 GPU 与 CPU 的亲和性绑定是提高容器内计算任务性能的关键。通过 Docker 的CPU 和 GPU 资源控制功能,可以精确地控制容器使用的 CPU 核,并将这些 CPU 核与 GPU 进行绑定。

5.1容器中的CPU和GPU资源分配

   Docker容器允许精确控制分配给容器的 CPU 和 GPU 资源。通过指定容器使用的 CPU 核和 GPU 设备,可以实现容器内任务的亲和性绑定,优化计算性能。

  • Docker CPU 设置

在Docker中,可以通过以下参数控制容器使用的CPU资源:

--cpuset-cpus: 指定容器可以使用的物理CPU核。例如,--cpuset-cpus="0-3"表示容器只能使用 CPU 0到3的核。

--cpu-shares: 控制容器的CPU使用权重,但不会限制具体使用的核。

--cpus: 限制容器可以使用的CPU核的总量(以虚拟核为单位)。

  • Docker GPU 设置

GPU设备绑定可以使用以下Docker参数来实现:

--gpus: 指定容器可以访问的 GPU。例如,--gpus ' "device=0"表示将 GPU 0分配给该容器。

5.2如何在Docker中实现GPU和CPU核心绑定

    要在 Docker 容器中实现 GPU 与 CPU 核的绑定,可以结合使用上述 CPU 和 GPU 设置。下面是一个具体的示例,说明如何在启动 Docker 容器时绑定特定的 CPU 核和 GPU :

44ae1cb2a5d0f12095eba51d2ee0cce8.jpeg

在这个命令中:

--cpuset-cpus="0-3":将容器绑定到CPU 0到3的核上,这些核应该与GPU 0在同一个NUMA节点上。

--gpus '"device=0"':将GPU 0分配给容器。

--memory="8g":限制容器使用的内存为8GB,可以确保内存分配也与CPU/GPU亲和。

5.3如何实现最优绑核

    为了确保在容器中实现GPU与CPU核绑定的最佳性能,首先需要先确定一下机器上的物理拓扑结构,可以在有 GPU 设备的机器中输入 nvidia-smi topo -m 进行查看:

44ad49b14c01c3291a6c91f2abfe0711.jpeg

   从上图可以得到以下信息,这台机器有两个 NUMA, NUMA 0 上有  4 个 GPU, 64 个 CPU,将以上数据整理一下, 得出以下信息:

2c54d2feaf103374501e792c26c81607.jpeg

      最基础的绑核就是使用每个 GPU 时选择具有亲和性的 CPU 核心使用,当出现多卡需求时则需要根据 NUMA 进行筛选,当需求为 1 - 4 卡时还需要知道机器上已经使用的资源,请求的资源,才可以判定是否满足最佳亲和性绑定和同一 NUMA 下通信,以下是一个伪代码表示:

ff68a52e88a41a752c87493b00965d17.jpeg

    基于此方法可以判断节点是否满足最佳绑核需求,当有若干个节点存在时则可以根据此方法对节点进行相应的评级选择最合适的节点。

      派欧算力云基于 Docker 自研了面向下一代 AI 计算的容器引擎,通过动态调节算法,实时感知底层硬件的使用情况,并进行了全链路的优化。用户无需关注 NUMA 的技术细节,便可以无感享受到最强大的计算性能。

     用户也可以在控制台中进行 NUMA 更高级的设置。

aba00c89f002a814dfa8e6cc6a4f803f.jpeg

      如果你对如何实施 GPU 容器绑核策略感兴趣,可以访问我们的网站,欢迎大家在评论区分享你们的经验和想法,让我们一起探索更多的技术创新!



派欧算力云 秉承提供高性价比算力服务的宗旨,推出了 GPU 弹性算力产品,通过提供多样化的 GPU 、优化的性能以及充足的算力资源,为新一代生成式人工智能、云端渲染、机器学习和加速计算等领域提供高性价比的算力支持。


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

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

相关文章

力扣 — — 2555. 两个线段获得的最多奖品

力扣 — — 2555. 两个线段获得的最多奖品 一、题目描述 题目大意:给定一个数组prizePositions,数组中的值表示的是奖品的位置,每一个位置可以有多个奖品,并且设定一个线段的长度 K K K,要求从所有奖品位置中选择两个…

springboot 整合quartz定时任务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom的配置1.加注解二、使用方法1.工程图2.创建工具类三、controller 实现前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 一、pom的配…

【RabbitMQ】工作模式

工作模式概述 简单模式 简单模式中只存在一个生产者,只存在一个消费者。生产者生产消息,消费者消费消息。消息只能被消费一次,也称为点对点模式。 简单模式适合在消息只能被单个消费者处理的场景下存在。 工作队列模式(Work Qu…

Redisson分布式锁实现及原理详解

随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点…

浏览器中的JavaScript核心BOM(浏览器对象模型)重点掌握对象之History对象的属性与方法

History对象是用来把网页浏览历史用类似栈的方式进行表示。 这定义听起来非常的抽象,其实History对象的作用就跟浏览器的前进和后退很像,我们来用几幅图来理解一下。首先我们先回顾一下浏览器的返回上一个页面 和 跳转到下一个页面 这两个功能。 就类似…

JDBC使用

7.2 创建JDBC应用 7.2.1 创建JDBC应用程序的步骤 使用JDBC操作数据库中的数据包括6个基本操作步骤: (1)载入JDBC驱动程序: 首先要在应用程序中加载驱动程序driver,使用Class.forName()方法加载特定的驱动程序&#xf…

【题解单调队列优化dp】划分

划分 分析: 首先,我们目光着眼于部分分 我们尝试用 O ( n 3 ) O(n^3) O(n3)的朴素dp去解决这个问题 f [ i ] [ j ] 表示划分到第 i 个位置,且上一个位置是 j 的最小运行时间是多少 f[i][j]表示划分到第i个位置,且上一个位置是j的…

erlang学习: Mnesia Erlang数据库3

Mnesia数据库删除实现和事务处理 -module(test_mnesia). -include_lib("stdlib/include/qlc.hrl").-record(shop, {item, quantity, cost}). %% API -export([insert/3, select/0, select/1, delete/1, transaction/1,start/0, do_this_once/0]). start() ->mnes…

自然语言处理系列六十九》搜索引擎项目实战》搜索框架技术选型

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十九搜索引擎项目实战》搜索框架技术选型搜索…

(k8s)kubernetes 挂载 minio csi 的方式

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

828华为云征文|基于华为云Flexus云服务器X搭建jumpserver堡垒机软件

文章目录 ❀前言❀jumpserver堡垒机概述❀环境准备❀部署说明❀在线安装❀浏览器访问❀资产添加❀资产授权❀资产登录❀总结 ❀前言 近期华为云推出了最新的华为云Flexus云服务器X,这款云主机在算柔性算力做出了重大变革。华为云Flexus云服务器X基于擎天QingTian架…

QT设置闹钟超时播报

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTime> #include<QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic…

一个基于Spring Boot 3、Vue 3 和 Element-Plus 的中后台管理框架,流畅、直观且功能强大

前言 当前市面上的中后台管理系统虽然种类繁多&#xff0c;但在实际使用中仍存在不少痛点&#xff0c;比如技术栈陈旧、性能低下、扩展性差等问题。开发者们常常需要花费大量的时间和精力去处理这些问题&#xff0c;而不是专注于业务逻辑本身。 那么&#xff0c;有没有一个框…

计算赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&#xff…

使用3DUNet训练自己的数据集(pytorch)— 医疗影像分割

代码:lee-zq/3DUNet-Pytorch: 3DUNet implemented with pytorch (github.com) 文章<cicek16miccai.pdf (uni-freiburg.de)3D U-Net: Learning Dense Volumetric Segmentation

HarmonyOS学习(十)——网络编程

文章目录 1、通过HTTP请求网络2、Web组件2.1、加载本地网页2.2、加载在线网页2.3、网页缩放2.4、文本缩放2.5、web组件事件以及状态说明2.6、处理页面导航 1、通过HTTP请求网络 官方API文档地址&#xff1a;HTTP数据请求-Network Kit数据传输能力-Network Kit&#xff08;网络…

Linux 下 C/C++ 程序编译的过程

目录 一、GCC 工具链二、编译过程1、预处理2、编译3、汇编4、链接 本文将介绍如何将 C/C 语言编写的程序转换成为处理器能够执行的二进制代码的过程&#xff0c;包括四个步骤&#xff1a;预处理&#xff08;Preprocessing&#xff09;编译&#xff08;Compilation&#xff09;汇…

Qt_自定义信号

目录 1、自定义信号的规定 2、创建自定义信号 3、带参数的信号与槽 4、一个信号连接多个槽 5、信号与槽的断开 结语 前言&#xff1a; 虽然Qt已经内置了大量的信号&#xff0c;并且这些信号能够满足大部分的开发场景&#xff0c;但是Qt仍然允许开发者自定义信号&#…

ARMxy嵌入式边缘计算控制器支持Linux OS应用于AIOT

人工智能与物联网&#xff08;AIoT&#xff09;的融合正深刻改变着各个行业。而在这一变革中&#xff0c;ARMxy 嵌入式控制器以其卓越的性能和对 Linux OS 的支持&#xff0c;成为了 AIoT 应用的关键推动力量。 一、ARMxy 嵌入式控制器的优势 强大的处理能力 ARMxy 嵌入式控制…

浮毛危害人体健康?希喂、安德迈、有哈宠物空气净化器吸毛测评

养宠之前了解清楚相关的知识&#xff0c;这既是对宠物负责&#xff0c;也是对我们自己负责。宠物最让铲屎官头疼的就是毛发问题&#xff0c;大量脱落的毛发会带来繁重的清理任务&#xff0c;同时飘在空中浮毛还是潜藏在身边的健康”杀手“。浮毛微小、质量轻&#xff0c;容易随…