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

news2024/9/22 21:22:47

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.coloradmin.cn/o/2127126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机的错误计算(九十)

摘要 计算机的错误计算(八十九)探讨了反双曲余切函数 acoth(x)在 附近的计算精度问题。本节讨论绝对值为大数的反双曲余切函数值的计算精度问题。 Acoth(x) 函数的定义为: 其中 x 的绝对值大于 1 . 例1. 计算 acoth(1.000000000002e15) .…

ORCAD位号,BOOM表

1 ORCAD在页设置编号范围 2 输出BOOM表

基于python+django+vue的农产品销售管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…

开发基础之Python 函数(Basic Python Functions for Development)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【天池比赛】【零基础入门金融风控 Task2赛题理解】实战进行中……

2.3 代码示例 2.3.1 导入数据分析及可视化过程需要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import datetime import warnings warnings.filterwarnings(ignore) 2.3.2 读取文件 #读取数据时相对路径载入报错时…

并发编程-JUC原子类、CAS和 Unsafe类

文章目录 零、说在前面一、CAS原理1.1 CAS简介1、线程安全的实现方案2、什么是CAS 1.2 CAS使用案例1.3 CAS存在的问题1、ABA问题2、只能保证一个共享变量之间的原子性操作3、无效CAS会带来开销问题4、总线风暴问题 1.4 CAS在JDK中的应用 二、Unsafe类详解2.1 Unsafe类介绍2.2 U…

使用 Azure 机器学习微调小型语言模型 (SLM) Phi-3

目录 概述 动手实验室 概述 小型语言模型 (SLM) 的动机 效率:SLM 的计算效率更高,需要的内存和存储空间更少,而且由于需要处理的参数更少,因此运行速度更快。成本:培训和部署 SLM 的成本较低,使其可供更广…

【MySQL】从0开始在Centos 7环境安装MySQL

🦄个人主页:修修修也 🎏所属专栏:MySQL ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 准备步骤 卸载原有环境 安装步骤 获取MySQL官方yum源 安装MySQL yum源 结语 准备步骤 卸载原有环境 第一步登录云服务器(注意安装yum需要在root身份下…

ctf.show靶场ssrf攻略

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web351 解析:post传入url参数他就会访问。 解法: hackbar传入url参数写入https://127.0.0.1/flag.php web352 解析:post传入url参数,不能是127.0.0.1和localhost 解法:缩写127.1传入 web353 解析…

FTP、SFTP安装,整合Springboot教程

文章目录 前言一、FTP、SFTP是什么?1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP总结 前言 在一般项目开发工程中,我们大多数会…

什么是数据治理?在企业数字化转型过程中有什么用?

建设背景 有效的数据治理不仅能够确保数据的安全和质量,还能为企业提供深入的业务洞察,推动决策制定和创新。数据治理是数字化转型的基础,是数据资源成为数据资产的基础,只有经过了数据治理,相应的数据资源才能产生价…

Ubuntu 24.04中安装virtualenv

在Ubuntu 24.04中安装virtualenv,可以按照以下步骤进行: 1. 确保Python已安装‌: 在终端中输入python --version或python3 --version来检查Python的安装情况。 python3 --version2. 安装pip‌(如果尚未安装)&#x…

【论文笔记】AutoLFADS (Nature Methods, 2022)

相关链接: Is This Tutorial For You? - AutoLFADS TutorialDANDI ArchiveNonhuman Primate Reaching with Multichannel Sensorimotor Cortex Electrophysiology Abstract 通过深度神经群体动力学模型实现最先进的性能需要对每个数据集进行广泛的超参数调整。 Au…

机器学习:opencv--图像金字塔

目录 一、图像金字塔 1.图像金字塔是什么? 2.有哪些常见类型? 3.金字塔的构建过程 4.图像金字塔的作用 二、图像金字塔中的操作 1.向下采样 2.向上采样 3.注意--无法复原 三、代码实现 1.高斯金字塔向下采样 2.高斯金字塔向上采样 3.无法复…

JavaEE:文件内容操作(一)

文章目录 文件内容的读写---数据流字节流和字符流打开和关闭文件文件资源泄漏try with resources 文件内容的读写—数据流 文件内容的操作,读文件和写文件,都是操作系统本身提供了API,在Java中也进行了封装. Java中封装了操作文件的这些类,我们给它们起了个名字,叫做"文…

药品识别与分类系统源码分享

药品识别与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

Vue | Vue深入浅出——Vue中的render函数详解

1.render函数 在编写vue单文件的大多数情况下,我们都是使用template模板来创建HTML。然而在一些条件判断比较复杂的场景下,使用JavaScript去描绘HTML的生成逻辑会显得更加的简洁直观。 使用Vue官网的例子来简单说明: 如果自己在开发的时候…

vscode配置django环境并创建django项目

1、创建文件夹 创建文件夹 并在vscode打开 终端输入命令 “ python -m venv env ” 查看目录结构 2、创建项目 在终端输入 django-admin startproject 文件名(这里以myshop为例) 3、创建应用 在myshop打开终端 在终端输入 django-admin startapp 应用名 这里以app1为例…

6个免费icon图标素材网站

在这个数字化时代,优秀的图标设计对于提升用户体验至关重要。为了帮助设计师和开发者找到高质量的免费icon图标素材,我整理了以下6个实用的网站,让你轻松获取精美图标,助力你的设计工作。快来一起看看吧! 1、菜鸟图库 …

如何显示Dialog窗口

文章目录 1. 概念介绍2. 使用方法2.1 Overlay效果2.1 Dialog效果 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示snackBar"相关的内容,本章回中将介绍使用get显示Dialog.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在…