问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

快速搭建GPU环境 | Docker、k8s中使用GPU

创作时间:
作者:
@小白创作中心

快速搭建GPU环境 | Docker、k8s中使用GPU

引用
CSDN
1.
https://m.blog.csdn.net/weixin_48711696/article/details/145483878

本文详细介绍了在裸机、Docker容器以及Kubernetes集群中部署和使用GPU的完整流程,包括GPU驱动安装、CUDA工具包配置以及GPU监控设置等关键步骤。无论是进行深度学习模型训练还是其他GPU加速计算任务,本文都能为读者提供全面的技术指导。

一、裸机部署

在裸机上使用GPU需要安装以下组件:

  • GPU驱动
  • CUDA工具包

二者的关系如NVIDIA官网上的图所示:

GPU驱动包含了GPU驱动和CUDA驱动,CUDA工具包则包含了CUDA运行时。

首先确认机器上是否有GPU:

lspci | grep NVIDIA

可以看到,该设备有1张Tesla V100 GPU。

安装GPU驱动

到NVIDIA驱动下载页面下载对应的显卡驱动:

复制下载链接:

wget https://cn.download.nvidia.com/tesla/550.144.03/nvidia-driver-local-repo-ubuntu2204-550.144.03_1.0-1_amd64.deb

安装驱动:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential dkms
sudo dpkg -i nvidia-driver-local-repo-ubuntu2204-550.144.03_1.0-1_amd64.deb
sudo apt install -y nvidia-driver-550
nvidia-smi

至此,GPU驱动已安装完成,系统能正常识别GPU。

安装CUDA工具包

对于深度学习程序,通常需要依赖CUDA环境,因此需要在机器上安装CUDA工具包。

下载对应的安装包:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

配置PATH环境变量。

测试

使用Python和PyTorch进行测试:

import torch

def check_cuda_with_pytorch():
    """检查PyTorch CUDA环境是否正常工作"""
    try:
        print("检查PyTorch CUDA环境:")
        if torch.cuda.is_available():
            print(f"CUDA设备可用,当前CUDA版本是: {torch.version.cuda}")
            print(f"PyTorch版本是: {torch.__version__}")
            print(f"检测到 {torch.cuda.device_count()} 个CUDA设备。")
            for i in range(torch.cuda.device_count()):
                print(f"设备 {i}: {torch.cuda.get_device_name(i)}")
                print(f"设备 {i} 的显存总量: {torch.cuda.get_device_properties(i).total_memory / (1024 ** 3):.2f} GB")
                print(f"设备 {i} 的显存当前使用量: {torch.cuda.memory_allocated(i) / (1024 ** 3):.2f} GB")
                print(f"设备 {i} 的显存最大使用量: {torch.cuda.memory_reserved(i) / (1024 ** 3):.2f} GB")
        else:
            print("CUDA设备不可用。")
    except Exception as e:
        print(f"检查PyTorch CUDA环境时出现错误: {e}")

if __name__ == "__main__":
    check_cuda_with_pytorch()

二、Docker环境

在Docker环境中使用GPU需要安装nvidia-container-toolkit

安装nvidia-container-toolkit

# 配置生产仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 选择性配置实验包仓库
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新包列表
sudo apt-get update
# 安装NVIDIA容器工具包
sudo apt-get install -y nvidia-container-toolkit

配置使用该runtime

支持Docker、Containerd、CRI-O、Podman等CRI。

新版toolkit带有一个nvidia-ctk工具,执行以下命令即可一键配置:

sudo nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

Docker环境中的CUDA调用:

使用一个带CUDA Toolkit的镜像即可。最后我们启动一个Docker容器进行测试,其中命令中增加--gpu参数来指定要分配给容器的GPU。

docker run --rm --gpus all nvidia/cuda:12.0.1-runtime-ubuntu22.04 nvidia-smi

三、k8s环境

在k8s环境中使用GPU需要部署以下组件:

  • gpu-device-plugin:用于管理GPU
  • gpu-exporter:用于监控GPU

安装device-plugin

device-plugin一般由对应的GPU厂家提供,比如NVIDIA的k8s-device-plugin。

安装命令:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.15.0/deployments/static/nvidia-device-plugin.yml

device-plugin启动之后,会感知节点上的GPU设备并上报给kubelet,最终由kubelet提交到kube-apiserver。

可以在Node可分配资源中看到GPU:

root@test:~# k describe node test|grep Capacity -A7
Capacity:
  cpu:                48
  ephemeral-storage:  460364840Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             98260824Ki
  nvidia.com/gpu:     2
  pods:               110

安装GPU监控

安装DCCM exporter结合Prometheus输出GPU资源监控信息:

helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts
helm repo update
helm install --generate-name gpu-helm-charts/dcgm-exporter

查看metrics:

curl -sL http://127.0.0.1:8080/metrics

测试

在k8s创建Pod要使用GPU资源很简单,和cpu、memory等常规资源一样,在resource中申请即可。

比如,下面这个yaml里面我们就通过resource.limits申请了该Pod要使用1个GPU:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  restartPolicy: Never
  containers:
- name: cuda-container
      image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 1 GPU

启动后,查看日志:

kubectl logs gpu-pod
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

至此,k8s环境中的GPU配置完成。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号