NVIDIA 把整个 GPU 函数计算平台开源了——NVCF 架构拆解与上手实践

2026-05-22 34 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:10 分钟

NVIDIA 做了一件不太寻常的事:把 build.nvidia.com 背后跑的整套函数计算平台——NVCF(NVIDIA Cloud Functions)——以 Apache 2.0 协议完整开源。不是 SDK,不是客户端库,不是"参考实现",而是控制平面、调用平面、计算平面、CLI、Helm charts、数据库迁移脚本,全部丢进一个单体仓库 github.com/nvidia/nvcf。这意味着你可以在自己的集群里跑一套和 NVIDIA 内部同架构的 GPU 函数调度系统。

为什么这件事值得关注

函数计算(FaaS)在 CPU 世界已经很成熟——AWS Lambda、Azure Functions、Cloud Run 都能按请求调度容器。但 GPU 函数计算一直是个硬骨头:GPU 资源贵、冷启动慢、显存管理复杂、多租户隔离难。市面上大多数"GPU 函数计算"产品只做了请求路由,底层调度逻辑闭源,你看不到它怎么把一个推理请求塞进一张还在跑别的任务的卡上。

NVCF 开源的意义在于:调度策略、任务排队、GPU 分配、冷启动优化——这些核心逻辑你都能直接读代码。想改优先级算法?想加自定义指标调度?想适配非 NVIDIA GPU?fork 一份就能动手。

三平面架构:控制、调用、计算各管什么

NVCF 把系统拆成三个平面,职责边界清晰:

控制平面(Control Plane)——管理函数定义、版本、部署策略、配置元数据。你注册一个新函数、发布一个新版本、设置伸缩策略,都走这里。相当于"注册中心 + 配置中心"。

调用平面(Invocation Plane)——接收外部请求,做路由、鉴权、限流、排队,然后把请求转发到对应的计算实例。这是用户流量的入口,也是延迟最敏感的部分。

计算平面(Compute Plane)——真正管 GPU 容器的地方。负责拉镜像、分配 GPU、启动工作负载、监控健康状态、回收资源。一个计算平面可以管理多个 Kubernetes 集群或裸金属节点群。

三个平面之间通过内部 API 通信,每个平面可以独立伸缩。这种拆法的好处:调用平面可以轻量部署在边缘节点,计算平面留在有 GPU 的数据中心,控制平面只需要高可用不需要高算力。

仓库结构速览

克隆仓库后,核心目录大致如下:

nvcf/
├── control-plane/     # 函数注册、版本管理、配置服务
├── invocation-plane/  # 请求路由、排队、鉴权网关
├── compute-plane/     # GPU 容器调度、资源分配引擎
├── cli/               # nvcf 命令行工具
├── helm/              # 各平面的 Helm charts
├── migrations/        # 数据库 schema 迁移脚本
└── docs/              # 架构文档与部署指南

每个平面内部又按微服务拆分,比如计算平面里有调度器(scheduler)、节点代理(node-agent)、监控收集器(metrics-collector)等子服务。

上手:用 Helm 在本地集群部署 NVCF

下面是一个最小化部署流程,假设你有一个 Kubernetes 集群(minikube 或真实集群均可)和 Helm 3。

1. 克隆仓库并安装依赖

git clone https://github.com/nvidia/nvcf.git
cd nvcf

# 确认 Helm 和 kubectl 可用
helm version --short
kubectl cluster-info

2. 创建命名空间并部署控制平面

kubectl create namespace nvcf-system

# 先部署数据库(NVCF 使用 PostgreSQL 作为元数据存储)
helm install nvcf-db helm/nvcf-db \
  --namespace nvcf-system \
  --set persistence.enabled=false  # 开发环境用临时存储

# 运行数据库迁移
kubectl apply -f migrations/ -n nvcf-system

# 部署控制平面
helm install nvcf-control helm/nvcf-control \
  --namespace nvcf-system \
  --set replicaCount=1

3. 部署调用平面

helm install nvcf-invocation helm/nvcf-invocation \
  --namespace nvcf-system \
  --set replicaCount=1 \
  --set controlPlane.endpoint=nvcf-control:8080

4. 部署计算平面(需要 GPU 节点)

如果你的集群有 NVIDIA GPU 节点并且已安装 NVIDIA device plugin:

helm install nvcf-compute helm/nvcf-compute \
  --namespace nvcf-system \
  --set controlPlane.endpoint=nvcf-control:8080 \
  --set gpuResourceType=nvidia.com/gpu \
  --set scheduler.strategy=priority-based

如果没有 GPU 节点,可以先用 CPU 模拟模式跑通流程(调度器会忽略 GPU 请求,所有函数以 CPU 模式运行):

helm install nvcf-compute helm/nvcf-compute \
  --namespace nvcf-system \
  --set controlPlane.endpoint=nvcf-control:8080 \
  --set gpuEmulation.enabled=true

5. 用 CLI 注册并调用一个函数

# 安装 CLI
pip install -e cli/

# 注册一个示例函数(使用 NVIDIA 提供的 Triton 推理服务器镜像)
nvcf function create \
  --name "my-triton-fn" \
  --image "nvcr.io/nvidia/tritonserver:24.01-py3" \
  --gpu-count 1 \
  --endpoint "/v2/models/default/infer"

# 发布版本
nvcf function publish --name "my-triton-fn" --version 1

# 调用函数
nvcf function invoke \
  --name "my-triton-fn" \
  --version 1 \
  --payload '{"inputs": [{"name": "input__0", "shape": [1, 3, 224, 224], "datatype": "FP32", "data": [...]}]}'

⚠️ 以上 CLI 子命令和参数基于仓库文档推断。NVCF 刚开源,CLI 接口可能仍在调整,实际使用前请对照仓库中 cli/ 目录的最新 README 确认具体命令格式。

调度策略:看代码比看文档更靠谱

NVCF 的计算平面调度器是整个系统最值得深读的部分。几个关键设计点:

优先级队列 + GPU 碎片整理——请求不是简单 FIFO。高优先级函数(比如实时推理)可以抢占低优先级函数(比如批量离线处理)占用的 GPU。调度器会计算 GPU 显存碎片,尝试把小模型打包到同一张卡上,而不是一张卡只跑一个模型。

冷启动分层——首次调用需要拉镜像、初始化运行时,延迟可能到数十秒。NVCF 的做法是:热门函数保持 warm pool(预启动容器池),冷函数走 on-demand 启动。warm pool 的大小由控制平面根据历史调用频率动态调整。

多集群调度——计算平面可以管理多个 Kubernetes 集群。调度器收到请求后,会根据各集群的 GPU 负载、网络延迟、成本标签选择目标集群。这为"跨区域 GPU 调度"提供了基础。

想看具体实现,直接读 compute-plane/scheduler/ 下的 Go 代码,核心调度逻辑集中在 schedule.gogpu_allocator.go 两个文件。

实际落地的几个考量

适合谁用? 如果你在运营 GPU 推理服务集群,需要多租户调度、按请求计费、函数版本管理——NVCF 直接可用。如果你只是跑单模型服务,Kubernetes + Triton 就够了,NVCF 的三层架构反而过重。

GPU 依赖——计算平面目前硬绑定 NVIDIA GPU(通过 nvidia.com/gpu resource)。想跑 AMD 或 Intel GPU,需要改 device plugin 配置和调度器的 GPU 类型枚举,工作量不小。

数据库选择——元数据存储用 PostgreSQL。大规模部署需要考虑 PG 的高可用和性能调优,小规模开发可以用临时存储。

安全边界——调用平面做了鉴权和限流,但多租户之间的 GPU 显存隔离依赖容器级隔离(MIG 或时间切片),不是 NVCF 自己实现的。部署前要确认你的 GPU 隔离策略。

快速检查清单

部署 NVCF 前过一遍这几项:

检查项 要求
Kubernetes 版本 ≥ 1.26,支持 device plugin
NVIDIA GPU driver ≥ 535,容器内可访问
NVIDIA device plugin 已安装并正常报告 nvidia.com/gpu
PostgreSQL 控制平面元数据存储,生产环境需 HA
Helm 3 部署各平面组件
网络策略 三平面间内部 API 互通,调用平面对外暴露

NVCF 开源把 GPU 函数计算从"黑箱产品"变成了"可读、可改、可移植的基础设施"。对做 GPU 集群调度的人来说,这是目前能拿到最完整的一份参考实现——不是纸面设计,是跑在 build.nvidia.com 上的那套代码。


相关推荐