优秀的编程知识分享平台

网站首页 > 技术文章 正文

容器内vGPU的使用(容器 gpu)

nanyue 2025-05-08 20:18:59 技术文章 19 ℃

场景描述

假设你需要在 Kubernetes/Docker 容器中运行一个 GPU 加速的深度学习推理任务,并希望使用 NVIDIA vGPU 技术将物理 GPU 资源动态分配给多个容器。以下是关键步骤:


1. 环境准备

  • 物理机要求
    • 安装 NVIDIA GRID 驱动的 GPU(如 Tesla T4/Tesla V100 等)
    • 激活 NVIDIA vGPU 许可证(需企业版 GRID 授权)
    • 安装 NVIDIA Container Toolkit 以支持容器访问 GPU
  • vGPU 配置(示例):
  • bash
# 在宿主机上,将物理 GPU 划分为 vGPU # 假设将 GPU 0 划分为 4 个 1GB 显存的 vGPU nvidia-smi vgpu -i 0 -c 4 -g 1

2. 容器配置(Dockerfile)

构建支持 vGPU 的容器镜像:

dockerfile

# 使用 NVIDIA CUDA 基础镜像
FROM nvidia/cuda:11.8.0-base-ubuntu22.04

# 安装 Python 和深度学习库
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip3 install torch torchvision

# 确保容器内的 NVIDIA 驱动兼容性
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

3. 运行容器时分配 vGPU

通过环境变量指定容器使用的 vGPU 资源:

bash

# 启动容器,分配 vGPU 实例(假设使用 vGPU 0 和 1)
docker run --gpus '"device=0,1"' --rm -it my-vgpu-image

4. Python 代码示例

在容器内运行的 Python 脚本(inference.py),检查 vGPU 并执行计算:

python

import torch

def check_vgpu():
    if torch.cuda.is_available():
        device_count = torch.cuda.device_count()
        print(f"可用 vGPU 数量: {device_count}")
        for i in range(device_count):
            print(f"vGPU {i}: {torch.cuda.get_device_name(i)}")
    else:
        print("未检测到 vGPU")

def run_inference():
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    x = torch.randn(1024, 1024).to(device)
    y = torch.randn(1024, 1024).to(device)
    z = torch.matmul(x, y)
    print(f"矩阵乘法结果(部分): {z[0][0:5]}")

if __name__ == "__main__":
    check_vgpu()
    run_inference()

5. 验证 vGPU 使用情况

在容器内执行脚本:

bash

python3 inference.py

预期输出

可用 vGPU 数量: 2
vGPU 0: Tesla T4 (GRID vGPU)
vGPU 1: Tesla T4 (GRID vGPU)
矩阵乘法结果(部分): tensor([ 12.3456,  -5.4321,   3.1415, ...], device='cuda:0')

6. 高级用例:动态 vGPU 资源管理

在 Kubernetes 中通过 Device PluginsResource Limits 分配 vGPU:

yaml

# Kubernetes Pod 定义
apiVersion: v1
kind: Pod
metadata:
  name: vgpu-pod
spec:
  containers:
  - name: inference-container
    image: my-vgpu-image
    command: ["python3", "/app/inference.py"]
    resources:
      limits:
        nvidia.com/gpu: 2  # 请求 2 个 vGPU 实例

关键注意事项

  1. 许可证配置
  2. 确保宿主机上的 GRID 许可证服务器正常运行,vGPU 功能需要持续验证许可证。
  3. vGPU 类型选择
  4. 根据任务需求选择计算型(如 vComputeServer)或图形型(如 vApps)vGPU 配置文件。
  5. 监控工具
  6. 使用 nvidia-smi 或 nvidia-smi vgpu 在宿主机上监控 vGPU 状态:
  7. bash
  8. 复制
  9. nvidia-smi vgpu -q

通过上述步骤,你可以在容器化环境中高效利用 NVIDIA GRID vGPU 资源,适用于 AI 推理、图形渲染等场景。

最近发表
标签列表