GPU Basics

先介绍 GPU 的基本知识,再讲解一下对于租借 GPU 的相关知识

GPU 基础知识

核心是什么

从硬件底层架构来看,CPU 和 GPU 的“核心”虽然都叫 Core,但设计目标和物理结构完全不同

CPU 核心:全能的“瑞士军刀”

CPU 的核心(Core)被设计用来处理复杂的逻辑和顺序任务。为了最大程度降低单个任务的延迟(Latency),其硬件资源分配非常不均衡:

  • 巨大的控制单元 (Control Unit):包含极其复杂的流水线(Pipeline)、分支预测器(Branch Predictor)和乱序执行(Out-of-Order Execution)逻辑。这使得它能在代码出现大量 if-else 或跳转时,依然保持高速运行
  • 庞大的缓存 (Cache):每个核心通常配备大容量的 L1/L2 缓存及共享的 L3 缓存,目的是尽量减少访问内存(DRAM)的次数,因为内存访问非常慢
  • 计算单元 (ALU):相比控制逻辑和缓存,实际负责加减乘除的算术逻辑单元(ALU)占用的芯片面积反而较小

GPU 核心:纯粹的“计算劳动力”

GPU 的核心(如 NVIDIA 的 CUDA Core)目标是极致的吞吐量(Throughput)。它并不追求单个任务快,而是追求在一秒钟内完成尽可能多的计算

  • 精简的控制逻辑:GPU 将数十个甚至上百个核心组合成一个流式多处理器(SM, Streaming Multiprocessor)。这些核心共享同一套控制逻辑,遵循 SIMT(单指令多线程) 架构。这意味着它们必须像仪仗队一样,在同一时间执行相同的指令,只是处理的数据不同
  • 极小的缓存:GPU 核心没有巨大的缓存来存储数据,它依赖极高的显存带宽(如 HBM3)和大量的并行线程来掩盖访问延迟
  • 密集的计算单元 (ALU):GPU 的绝大部分芯片面积都给了 ALU。一个 GPU 芯片可以容纳数千甚至上万个核心,而 CPU 通常只有几十个

硬件对比总结

特性 CPU 核心 GPU 核心 (CUDA/Stream Core)
设计目标 低延迟 (Latency Oriented) 高吞吐量 (Throughput Oriented)
控制逻辑 极其复杂 (分支预测、乱序执行) 极其简单 (多核共享控制逻辑)
缓存容量 巨大 (MB 级别) 极小 (KB 级别)
并行模式 SISD / MIMD (独立运行) SIMT / SIMD (集体行动)
擅长领域 系统逻辑、复杂算法、串行任务 矩阵运算、图形渲染、深度学习训练

简单来说,CPU 核心像是一个拥有博士学位的全才,能独立解决极其复杂的逻辑难题;而 GPU 核心更像是流水线上的一名熟练工,虽然只会简单的加减乘除,但成千上万个工人同时开工,处理规则数据的速度远超博士

你在进行 VLA 研究时,是否遇到过 CPU 预处理速度跟不上 GPU 训练速度(即数据瓶颈)的情况?

GPU(Graphics Processing Unit,图形处理器)的核心设计理念是大规模并行计算

  • 架构差异:
    • CPU:设计用于处理复杂的控制逻辑和串行任务,核心数较少(通常为数十个),但每个核心的主频高、缓存大
    • GPU:设计用于处理高度重复、独立的计算任务。其内部包含数千个小型计算单元(如 NVIDIA 的 CUDA Cores 或 Tensor Cores),能够同时处理海量数据
  • 关键指标:
    1. 显存 (VRAM):决定了你能跑多大的模型。对于 VLA 或 MLLM 任务,显存容量是首要瓶颈
    2. 算力 (TFLOPS):衡量每秒浮点运算次数。Tensor Cores(张量核心)专门为深度学习中的矩阵乘法加速,是现代 AI 研究关注的重点
    3. 显存带宽 (Bandwidth):数据在显存与核心间的传输速度,直接影响大模型的推理速度

GPU 租借与计费逻辑

在超算中心或云服务商租借 GPU 时,通常不直接按小时计费,而是使用“核·时”(Core-Hour)或“机时”作为虚拟货币进行结算。这种方式是为了统一不同性能硬件的价值

1. 核·时(Core-Hour)的概念

“核·时”是一种折算后的资源单位。由于 A100、H100 与老旧的 V100 性能差异巨大,系统通过权重(Weight)来平衡成本

2. 计算公式

$$消耗核时 = 使用显卡数量 \times 使用时间 \times 对应卡的权重$$

3. 实例解析:10,000 核·时与 A100

根据你提供的逻辑:1 张 A100 工作 1 小时 = 100 核·时

  • 可用时间计算:

    如果你拥有 10,000 核·时,全部用于单张 A100,则总可用时长为:

    $$T = \frac{10,000 \text{ 核·时}}{100 \text{ 核·时/卡时}} = 100 \text{ 小时}$$

  • 多卡并行场景:

    如果你开启一个分布式的训练任务,同时调用 8 张 A100(即一个标准节点):

    每小时消耗:$8 \times 100 = 800 \text{ 核·时}$

    总可用时间:$\frac{10,000}{800} = 12.5 \text{ 小时}$


租借建议与注意事项

  • 显存分配:租借时需确认是“独占”还是“共享”。在做 VLA Benchmarking 等涉及大规模数据处理的任务时,务必选择独占显存,避免算力竞争导致的 OutOfMemory (OOM) 错误
  • 存储费用:租借 GPU 的费用通常仅包含计算资源。存储训练数据(如 AMASS, BABEL 等数据集)可能产生额外的存储空间费用
  • 环境预装:优先选择预装了 PyTorch、CUDA 驱动以及 Conda 环境的镜像,可以节省大量的配置机时(这些配置时间通常也是计费的)

在高性能计算(HPC)和云采样计费语境下,“核”通常指代标准 CPU 逻辑核心(vCPU/Core)。它被用作一种“定价基准”或“通用货币”,用于统一衡量不同硬件资源的成本

1. 计费层面的“核心”:归一化系数

超算系统之所以将 1 张 A100 换算为 100 个“核”,主要基于以下逻辑:

  • 资源占用等效性:一台服务器不仅有 GPU,还配套有高配 CPU、大容量内存、InfiniBand 网卡和散热系统。当租借 1 张 A100 时,系统会预留相应的 CPU 核心(通常是 12-24 核)和内存支撑其运行
  • 成本折算:1 张 A100 的购置与维护成本远高于单个 CPU 核心。通过归一化系数(Normalization Factor),管理者可以方便地在同一套财务系统里结算 CPU 任务和 GPU 任务

计算逻辑:

假设该集群总共有 100 万核的预算,如果全部跑 CPU 任务,可以跑 100 万核·时;如果跑 A100 任务,则只能跑 $1,000,000 / 100 = 10,000$ 卡·时


2. 硬件层面的“核心”:CPU Core vs. CUDA Core

计费单位里的“核”与 GPU 内部真实的硬件核心数是两个完全不同的概念:

维度 计费单位 (Core) GPU 内部核心 (CUDA Core)
物理本质 CPU 物理/逻辑核心 GPU 运算单元 (ALU)
A100 数量 100(虚拟折算单位) 6912(实际物理单元)
职能 负责调度、控制与计费 负责大规模并行的矩阵/浮点运算

3. 实际应用场景分析

以你的 10,000 核·时 预算为例,它本质上是一个“能量池”:

  1. 运行 CPU 任务:

    如果你提交一个需要 64 核 CPU 的数值模拟任务,它可以运行:

    $$T = \frac{10,000}{64} \approx 156.25 \text{ 小时}$$

  2. 运行 GPU 任务 (A100):

    由于 1 张 A100 消耗 100 核·时,它能运行:

    $$T = \frac{10,000}{100} = 100 \text{ 小时}$$

总结:计费时的“核”是成本权重系数。当你看到“每卡时消耗 100 核·时”时,只需将其视为 1 GPU 小时 = 100 积分,而你的账户里共有 10,000 积分

这种设计确保了即便你租借的是不同型号的 GPU(例如 H100 可能是 200 核·时),系统也能用同一套“核·时”额度进行结算

“机时”是超算中心的虚拟货币,“核·时”是它的单位。你可以将其理解为话费余额,而“每卡时消耗100核·时”则是话费套餐的扣费标准

具体的解析与计算如下:

1. 基本概念

  • 核·时 (Core-Hour):这是超算资源的计费单位。通常指 1 个 CPU 核心运行 1 小时所消耗的资源
  • 卡时 (GPU-Hour):指 1 张 GPU 显卡运行 1 小时的时间

2. A100 的“汇率”

邮件中提到的“每卡时消耗 100 核·时”,意味着:

  • 使用 1 张 A100 显卡 1 小时 = 扣除 100 个核·时单位

3. 你的“余额”能用多久?

你账号里共有 10,000 核·时 的赠送机时

  • 如果你只用 1 张卡(单卡作业):

    $$\frac{10,000 \text{ 核·时}}{100 \text{ 核·时/小时}} = 100 \text{ 小时}$$

    即:你可以连续运行 100 小时的实验

  • 如果你用满 1 台机器的 8 张卡(全节点作业):

    每小时消耗:$8 \times 100 = 800 \text{ 核·时}$

    总可用时长:$\frac{10,000 \text{ 核·时}}{800 \text{ 核·时/小时}} = 12.5 \text{ 小时}$

4. 关键提醒

  • 后台持续扣费:容器作业一旦创建,无论你是否关闭网页浏览器,只要作业没在“作业管理”中点击“关闭”,系统就会一直按每小时 100(或更多)核·时的速度扣费
  • 关机即省钱:配完环境或跑完程序后,务必手动终止作业,否则 100 小时的额度很快就会耗尽

1. 什么是“节点” (Node)?

节点指的是一台独立的物理服务器

  • 直观理解:你可以把它想象成一个巨大的电脑主机,只是这个主机没有显示器
  • 你的情况:邮件里说“1个节点(8卡/节点)”,意思是你租到的这台“巨型电脑”里,插了 8 张 A100 显卡
  • 计算关系:如果你开启了一个“1卡”的作业,你只占用了这台机器 $1/8$ 的显卡资源;如果你开“8卡”,你就包下了这整台机器

2. 什么是“集群” (Cluster)?

集群是由很多个“节点”通过高速网络连接在一起形成的服务器阵列

  • 直观理解:如果“节点”是一台电脑,那么“集群”就是由成百上千台这种电脑组成的电脑集群中心
  • 你的情况:你使用的 k8s_xingyiai_2(星逸智算集群)就是广州超算中心里专门划出来给 AI 计算用的一大片服务器区域

3. 关于“不可访问互联网”的误解

这正是新手最容易担心的地方。请放心:你的笔记本电脑绝对不会断网

  • 谁不能联网?:是远在广州的那台 GPU 服务器默认不能直接上百度、GitHub 或 Hugging Face。这是为了防止黑客攻击和数据泄露的物理隔离措施
  • 你在自己电脑上操作会怎样?:你依然可以一边在浏览器里查资料、刷 B 站,一边通过 SSH 连着服务器。你的本地网络完全不受影响
  • 如果你需要服务器下载东西怎么办?:
    • 这就是邮件里提到“上网代理”的原因
    • 虽然服务器默认是“孤岛”,但超算中心给你留了一个名为 Proxy(代理) 的“秘密地道”
    • 你只需要在服务器的黑框框里输入那两行 export http_proxy=... 代码,服务器就能通过这个地道,假装成一个普通的上网终端去下载 PyTorch 或代码库了

总结

  1. 节点 = 一台装了 8 张显卡的远程电脑
  2. 集群 = 装着很多台这种电脑的机房区域
  3. 不联网 = 远程那台电脑没网,你的电脑网速照旧。你想让它有网,得用邮件里的代理账号密码