首页 > 其他分享 >使用GPU

使用GPU

时间:2024-05-03 16:33:35浏览次数:25  
标签:使用 dev mknod nvidia GPU com 设备

使用场景

物理机上GPU卡被挂载到容器中,容器中安装GPU驱动来管理GPU。

约束

k8s对GPU设备的管理只能处理设备个数这一种情况。
GPU产品有AMD和NVIDIA,在k8s中对应amd.com/gpu和nvidia.com/gpu。
GPU数量只能设置在limits,requests默认与limits相同,不支持小数,独占GPU。

GPU插件通过gRPC与kubelet交互

1. 在Pod的limits字段声明nvidia.com/gpu: 1,kube-scheduler完成调度。 
2. 针对kubelet的Allocate请求,Device Plugin根据kubelet传递过来的设备ID,把设备路径(例如/dev/nvidia0)和驱动目录(例如/usr/local/nvidia/*)返回给kubelet。 
3. kubelet把这些信息放到创建容器的CRI请求中。其中,GPU设备路径是该容器启动时的Devices参数,驱动目录是容器启动时的Volume参数。

查看内核加载的nvidia模块

lsmod | grep ^nvidia

2张GPU卡场景

机器上有GPU之后,安装驱动(宿主机)和CUDA(容器镜像,上层应用程序库)才能使用。只有真实存在GPU卡,才能成功安装GPU驱动。    
安装GPU驱动后,有2张GPU卡时,/dev目录下生成5个文件nvidiactl(与nvidia+数字这个文件一起出现)、nvidia-uvm(与nvidia-uvm-tools一起出现)、nvidia-uvm-tools、nvidia0、nvidia1。
谷歌GPU插件github.com/GoogleCloudPlatform/container-engine-accelerators,根据正则表达式^nvidia[0-9]*$,在/dev目录下找GPU设备,nvidia0和nvidia1表示2个GPU设备。

创建假的GPU设备

构造假文件
mknod命令用于创建字符设备文件和块设备文件。
mknod [选项] [文件名称] [文件类型] [主设备号] [次设备号]
ll /dev结果显示b开头和c开头的,即标识了块设备和字符设备。
为了管理设备,设备中都有两个设备号。
主设备号用于区分不同类型的设备,次设备号用于区分同一设备下不同子设备。
例如 通过ls /dev/null -l ,查看null设备:
crw-rw-rw-  1 root root      1,   3 2017-08-16 15:32 null 
c开头,所以null设备为字符设备,主设备号为1,次设备号为3

mknod /dev/nvidiactl c 50 0
mknod /dev/nvidia-uvm c 50 1
mknod /dev/nvidia-uvm-tools c 50 2
mknod /dev/nvidia0 c 50 3
mknod /dev/nvidia1 c 50 4

编译部署谷歌GPU

cd $GOPATH/src
mkdir -p github.com/GoogleCloudPlatform
cd github.com/GoogleCloudPlatform/
git clone https://github.com/GoogleCloudPlatform/container-engine-accelerators.git
cd container-engine-accelerators
git checkout stable
docker build -t nvidia-gpu:v1.0 .
# 覆盖原有daemonset.yaml
cp $GOPATH/src/k8s.io/kubernetes/cluster/addons/device-plugins/nvidia-gpu/daemonset.yaml ./
# 修改daemonset.yaml中容器镜像为nvidia-gpu:v1.0,去掉nodeAffinity
vim daemonset.yaml
kubectl create -f daemonset.yaml

节点kubelet上报有2个GPU。

标签:使用,dev,mknod,nvidia,GPU,com,设备
From: https://www.cnblogs.com/WJQ2017/p/18171336

相关文章

  • linux锁的介绍和使用 -04
    本节参考:https://www.kernel.org/doc/html/latest/locking/index.htmlhttps://mirrors.edge.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/  锁的类型 Linux内核提供了很多类型的锁,它们可以分为两类: ①自旋锁(spinninglock); ②睡眠锁(sleepinglo......
  • 【排课小工具】排排课使用文档
    概述该工具致力于解决小学排课问题,通过输入固定格式的课程以及教师等数据,可以快速完成整个年级的排课任务,输出的排课结果遵循自然规律,避免时间冲突,同时尽可能将教师的上课时间分散开。除了输出每个班级的课表外,还附带输出每个教师视角下的课表,使得教师从整体上看到自己的时间安排......
  • GPU插件介绍
    对于NVIDIAGPU,存在3种设备插件的实现。官方NVIDIAGPU插件要求1.节点安装了NVIDIA驱动。2.节点安装nvidia-docker2.0。3.Docker的默认运行时必须设置为nvidia-container-runtime,而不是runc。4.NVIDIA驱动版本~=384.81。NVIDIAContainerRuntime把docker的默认运行时......
  • Windows使用WSL2及docker(Ubuntu22.04 LTS)
    WSL2初始化1.换源#1cp/etc/apt/sources.list/etc/apt/sources.list.bak#2vim/etc/apt/sources.list#清空原源并替换成以下源#deb-srchttps://mirrors.tuna.tsinghua.edu.cn/ubuntu/focalmainrestricteduniversemultiversedebhttps://mirrors.tuna.tsinghua.e......
  • mORMot 1.18 第23章 使用纯SQL
    mORMot1.18第23章使用纯SQL有时你可能不想使用ORM,或者由于现有且不可更改的数据库与ORM不兼容而无法使用它。在这些情况下,你仍然可以依靠mORMot的其他功能,同时使用纯SQL。你可以发出纯SQL命令并以JSON格式获取数据。下面的示例展示了如何使用快速且开源的Zeos数据库库与Maria......
  • 原子操作的实现原理与使用-03
    所谓“原子操作”就是这个操作不会被打断。Linux有2种原子操作:原子变量、原子位。 原子变量的内核操作函数原子变量的操作函数在Linux内核文件arch\arm\include\asm\atomic.h中。原子变量类型如下,实际上就是一个结构体(内核文件include/linux/types.h):  原子变量的内......
  • iptables使用详解(centos7)
    iptables使用详解(centos7)小百菜已于2024-03-2114:40:02修改阅读量7.2k收藏22点赞数2文章标签:iptables限速版权GitCode开源社区文章已被社区收录加入社区我们需要安装iptables-services,用来启动和停止iptables服务防火墙配置文件/etc/sysconfig/iptables查......
  • QT使用Http协议通信的实现示例
    转载自:https://www.jb51.net/program/3074287bh.htm 使用QT进行应用开发时,有时候需要进行客户端和服务端的网络通信,本文主要介绍了QT使用Http协议通信的实现示例,具有一定的参考价值,感兴趣的可以了解一下 −目录介绍1.多个独立参数GET请求2.参数数组GET请求3.上传......
  • 显卡瓶颈是什么,如何识别显卡GPU瓶颈并解决以提升PC性能
    在数字时代的洪流中,显卡GPU作为计算机视觉体验的核心,其性能好坏直接影响着用户的数字生活质量。显卡瓶颈,这一术语在游戏玩家和专业内容创造者的词汇库中愈发常见,它描述了一个现象:当显卡成为制约整体计算机性能发挥的弱环节时,用户的互动体验便会大打折扣。在这篇文章中,我们将深入探......
  • pycnblog的使用
    功能一键拖拽上传默认“未发布”,可选择直接发布重复上传,提示是否更新博客环境python3是需要python环境的,python的安装自己去百度一下pycnblog的使用[email protected]:dongfanger/pycnblog.gitpipinstallpyyaml注意博客园6.21更新,MetaWeblog现在不支持密......