K8S中使用英伟达GPU —— 筑梦之路
前提条件
根据不同的操作系统,安装好显卡驱动,并能正常识别出来显卡,比如如下截图:

GPU容器创建流程
containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process
GPU驱动安装
# ubuntu系统apt-get update
apt-get install gcc make
## cuda10.1
wget -c https://ops-software-binary-1255440668.cos.ap-chengdu.myqcloud.com/nvidia/NVIDIA-Linux-x86_64-430.50.run
bash NVIDIA-Linux-x86_64-430.50.run
## cuda10.2
wget -c https://ops-software-binary-1255440668.cos.ap-chengdu.myqcloud.com/nvidia/NVIDIA-Linux-x86_64-440.100.run
bash NVIDIA-Linux-x86_64-440.100.run
## cuda11
wget -c https://ops-software-binary-1255440668.cos.ap-chengdu.myqcloud.com/nvidia/NVIDIA-Linux-x86_64-450.66.run
bash NVIDIA-Linux-x86_64-450.66.run
## cuda11.4
wget -c https://ops-software-binary-1255440668.cos.ap-chengdu.myqcloud.com/nvidia/NVIDIA-Linux-x86_64-470.57.02.run
bash NVIDIA-Linux-x86_64-470.57.02.run
安装nvidia runtime
https://nvidia.github.io/nvidia-container-runtime/# ubuntu在线安装curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
cat > /etc/apt/sources.list.d/nvidia-docker.list <<'EOF'
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
EOF
apt-get update
apt-get install nvidia-container-runtime# centos 在线安装distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
DIST=$(sed -n 's/releasever=//p' /etc/yum.conf)
DIST=${DIST:-$(. /etc/os-release; echo $VERSION_ID)}
sudo rpm -e gpg-pubkey-f796ecb0
sudo gpg --homedir /var/lib/yum/repos/$(uname -m)/$DIST/nvidia-docker/gpgdir --delete-key f796ecb0
sudo yum makecache
yum -y install nvidia-container-runtime
配置docker/containerd
# docker配置cat /etc/docker/daemon.json{"registry-mirrors": ["https://wlzfs4t4.mirror.aliyuncs.com"],"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "10m","max-file": "3"},"data-root": "/data/var/lib/docker","bip": "169.254.31.1/24","default-runtime": "nvidia","runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}
}systemctl restart docker# containerd配置cat /etc/containerd/config.toml#其他的根据自己的需求修改,我这里只说明适配gpu的配置
[plugins][plugins."io.containerd.grpc.v1.cri"][plugins."io.containerd.grpc.v1.cri".containerd]
#-------------------修改开始-------------------------------------------default_runtime_name = "nvidia"
#-------------------修改结束-------------------------------------------[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
#-------------------新增开始-------------------------------------------[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] privileged_without_host_devices = falseruntime_engine = ""runtime_root = ""runtime_type = "io.containerd.runc.v2"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]BinaryName = "/usr/bin/nvidia-container-runtime"
#-------------------新增结束-------------------------------------------systemctl restart containerd.service
方案一:使用nvidia官方插件
【根据显卡数量分配,独占显卡】
应用yaml分配GPU资源示例:
resources:limits:nvidia.com/gpu: '1'requests:nvidia.com/gpu: '1'
其中1表示使用1张GPU卡
在Kubernetes中启用GPU支持
# cat nvidia-device-plugin.yaml apiVersion: apps/v1
kind: DaemonSet
metadata:name: nvidia-device-plugin-daemonsetnamespace: kube-system
spec:selector:matchLabels:name: nvidia-device-plugin-dsupdateStrategy:type: RollingUpdatetemplate:metadata:labels:name: nvidia-device-plugin-dsspec:tolerations:- key: nvidia.com/gpuoperator: Existseffect: NoSchedule# Mark this pod as a critical add-on; when enabled, the critical add-on# scheduler reserves resources for critical add-on pods so that they can# be rescheduled after a failure.# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/priorityClassName: "system-node-critical"containers:- image: ycloudhub.com/middleware/nvidia-gpu-device-plugin:v0.12.3name: nvidia-device-plugin-ctrenv:- name: FAIL_ON_INIT_ERRORvalue: "false"securityContext:allowPrivilegeEscalation: falsecapabilities:drop: ["ALL"]volumeMounts:- name: device-pluginmountPath: /var/lib/kubelet/device-pluginsvolumes:- name: device-pluginhostPath:path: /var/lib/kubelet/device-plugins# 应用yaml文件并检查kubectl apply -f nvidia-device-plugin.yml
kubectl get po -n kube-system | grep nvidiakubectl describe nodes ycloud
......
Capacity:cpu: 32ephemeral-storage: 458291312Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 131661096Kinvidia.com/gpu: 2pods: 110
Allocatable:cpu: 32ephemeral-storage: 422361272440hugepages-1Gi: 0hugepages-2Mi: 0memory: 131558696Kinvidia.com/gpu: 2pods: 110
......
方案二:使用第三方插件
【根据显卡显存大小分配,共享显卡】
# 阿里云官方git地址:https://github.com/AliyunContainerService/gpushare-device-plugin/resources:limits:aliyun.com/gpu-mem: '3'requests:aliyun.com/gpu-mem: '3'# 其中3表示使用的显存大小,单位G
安装gpushare-scheduler-extender插件
参考文档:
https://github.com/AliyunContainerService/gpushare-scheduler-extender/blob/master/docs/install.md
1.修改kube-scheduler配置
# 创建/etc/kubernetes/scheduler-policy-config.json{"kind": "Policy","apiVersion": "v1","extenders": [{"urlPrefix": "http://127.0.0.1:32766/gpushare-scheduler","filterVerb": "filter","bindVerb": "bind","enableHttps": false,"nodeCacheCapable": true,"managedResources": [{"name": "aliyun.com/gpu-mem","ignoredByScheduler": false}],"ignorable": false}]
}# 修改cat /etc/systemd/system/kube-scheduler.service文件,添加--policy-config-file相关内容cat /etc/systemd/system/kube-scheduler.service[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-scheduler \--address=127.0.0.1 \--master=http://127.0.0.1:8080 \--leader-elect=true \--v=2 \--policy-config-file=/etc/kubernetes/scheduler-policy-config.json
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target# 重启服务systemctl daemon-reload
systemctl restart kube-scheduler.service
2. 部署gpushare-schd-extender
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/gpushare-schd-extender.yamlkubectl apply -f gpushare-schd-extender.yaml
3.部署device-plugin
# 给节点添加label "gpushare=true"kubectl label node <target_node> gpushare=true
For example:
kubectl label node mynode gpushare=true# 部署device-plugin插件wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-rbac.yamlkubectl apply -f device-plugin-rbac.yamlwget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-ds.yamlkubectl apply -f device-plugin-ds.yaml
4.安装kubectl-inspect-gpushare插件,用来查看GPU使用情况
cd /usr/bin/wget https://github.com/AliyunContainerService/gpushare-device-plugin/releases/download/v0.3.0/kubectl-inspect-gpusharechmod u+x /usr/bin/kubectl-inspect-gpushare
以上内容仅供参考。
相关文章:
K8S中使用英伟达GPU —— 筑梦之路
前提条件 根据不同的操作系统,安装好显卡驱动,并能正常识别出来显卡,比如如下截图: GPU容器创建流程 containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvid…...
2024-2025年最值得选的Java计算机毕业设计选题大全:800个热门选题
一、前言 博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ…...
libnl教程(2):发送请求
文章目录 前言示例示例代码构造请求创建套接字发送请求 简化示例 前言 前置阅读要求:libnl教程(1):订阅内核的netlink广播通知 本文介绍,libnl如何向内核发送请求。这包含三个部分:构建请求;创建套接字;发送请求。 …...
【软件测试】功能测试理论基础
目录 项目的测试流程🏴 需求评审 评审形式 测试人员在需求评审中职责 测试计划与方案 测试计划 问题 测试方案🏴 测试计划与方案的对比 功能测试设计🏴 测试设计的步骤 项目的测试流程🏴 作用: 有序有效开展…...
玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本
很多工作室需要将修改好的系统导出来制作线刷包。前面分享过很多制作线刷包类的教程。那么一个机型中有很多分区。那些分区回读后要写入。那些分区不需要写入。强写有可能会导致不开机 不进系统的故障。首先要明白。就算机型全分区导出后在写回去 都不一定可以开机进系统。那么…...
MongoDB 插入文档
MongoDB 插入文档 MongoDB 是一个流行的 NoSQL 数据库,它使用文档存储数据。在 MongoDB 中,数据以 BSON(Binary JSON)格式存储,这是一种二进制表示的 JSON 格式。MongoDB 提供了灵活的数据模型,使得插入和查询文档变得非常简单。本文将详细介绍如何在 MongoDB 中插入文档…...
【内网】服务器升级nginx1.17.0
今天用rpm包升级内网nginx版本,上来就给我报错 警告:nginx-1.27.0-2.el7.ngx.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 7bd9bf62: NOKEY 错误:依赖检测失败: libcrypto.so.10()(64bit) 被 nginx-1:1.27.0-2.el7.ngx.x…...
歌曲爬虫下载
本次编写一个程序要爬取歌曲音乐榜https://www.onenzb.com/ 里面歌曲。有帮到铁子的可以收藏和关注起来!!!废话不多说直接上代码。 1 必要的包 import requests from lxml import html,etree from bs4 import BeautifulSoup import re impo…...
transformer-explainer
安装和启动 找到这个项目,然后装好了。 这个项目的目的如名字。 https://github.com/poloclub/transformer-explainerTransformer Explained: Learn How LLM Transformer Models Work with Interactive Visualization - poloclub/transformer-explainerhttps:/…...
C#中的S7协议
S7协议-S7COMM S7COMM 进行写 CTOP->PDU type已知枚举值 0X0E连接请求0x0d连接确认0x08断开请求0x0c断开确认0x05拒绝访问0x01加急数据0x02加急数据确认0x04用户数据0x07TPDU错误0x0f数据传输 S7Header->ROSCTR已知枚举值 0X01JOB REQUEST。主站发送请求0x02Ack。从站…...
2024-08-16升级记录:使用Android RecyclerView控件显示列表型信息
在页面上使用RecyclerView实现一个列表型信息展示: 步骤如下: 一、在页面布局中添加RecyclerView控件 <TextViewandroid:id"id/txt_gnss_info"android:layout_width"match_parent"android:layout_height"wrap_content"…...
通义千问 ( 一 ) 基础实例
1.相关概念 1.1.模型与平台 1.1.1.通义千问 通义千问 : 是阿里云研发的大语言模型;用于理解和分析用户输入的自然语言,在不同领域和任务为用户提供服务和帮助。 具体应用场景如下: 文字创作:撰写故事、公文、邮件、剧本和诗歌…...
docker 修改数据目录
1.停止 Docker 服务 sudo systemctl stop docker sudo systemctl stop docker.socket2.复制数据目录 sudo cp -rp /var/lib/docker /data/ 或 # sudo rsync -aP /var/lib/docker/ /data/docker/3.修改 Docker 配置 编辑 Docker 的配置文件,设置新的数据目录&#…...
r4s软路由写入iStoreOS镜像
需要用到的工具: 1、r4s软路由 2、32G及以上的TF卡 3、TF卡读卡器 4、镜像写入软件(推荐Etcher,下载地址:https://github.com/balena-io/etcher/releases/download/v1.19.21/balenaEtcher-1.19.21.Setup.exe) 5、…...
[C++][opencv]基于opencv实现photoshop算法灰度化图像
测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 BlackWhite.hpp #ifndef OPENCV2_PS_BLACKWHITE_HPP_ #define OPENCV2_PS_BLACKWHITE_HPP_#include "opencv2/core.hpp"namespace cv {class BlackWhite { public:float red; //红色的灰度系…...
Emacs23.x版本之重要特性及用法实例(一百五十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…...
机器学习 第11章-特征选择与稀疏学习
机器学习 第11章-特征选择与稀疏学习 11.1 子集搜索与评价 我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelevant feature)。从给定的特征集合中选择出相关特征子集的过程&a…...
Grok 2携AI图片生成重生
埃隆马斯克(Elon Musk)的人工智能初创公司xAI推出其最新的AI助手Grok 2的测试版,添加了类似于OpenAI的DALL-E和Google的Gemini的图像生成工具,但对可以生成的图像类型的限制显然较少。<这是其中的一个“亮点”,一些…...
使用Nexus搭建Maven私服仓库
一、私服仓库简介 在Java的世界中,我们通常使用Maven的依赖体系来管理构件(artifact,又称为二方库或三方库)的依赖,Maven仓库用于存储这些构件。一般的远程仓库(比如Maven Central)只提供下载功…...
云计算day27
任务背景 公司的服务器越来越多, 维护⼀些简单的事情都会变得很繁琐。⽤ shell脚本来管理少量服务器效率还⾏, 服务器多了之后, shell脚本⽆ 法实现⾼效率运维。这种情况下,我们需要引⼊⾃动化运维⼯具, 对 多台服务器实现⾼效运维。 任务要求任务要求 通过管…...
深度学习结合CT图像预测岩石渗透率:从孔隙网络到升尺度计算
1. 项目概述:当深度学习遇见岩石CT图像 在油气勘探、地热开发乃至二氧化碳地质封存这些领域,我们这些从业者最头疼的问题之一,就是如何准确知道一块岩石的“透水能力”,也就是渗透率。传统上,我们依赖实验室岩心驱替实…...
RAGFlow源码解析-4、文档处理(deepdoc)(第二周)
一、文档解析器工厂架构详解 1.1 deepdoc/parser/init.py解析器工厂完整解析 代码完整解析(40行) # Licensed under the Apache License, Version 2.0 (the "License"); # you may obtain a copy of the License at # # http://www.apache.org/licenses/LIC…...
共有云环境redis的热key怎么处理
共有云Redis热key处理方案共有云Redis常见形态:集群分片、读写分离实例,业务跑在ECS、ACK容器上,具备弹性扩容、自带监控诊断、一键启停能力。一、云上专属:快速定位热key不用自己写脚本抓取,直接用平台工具排查1、控制…...
13.解决 99% 刷机故障!小米 / 华为 / OV / 苹果通用救砖与分区修复教程
摘要 本文面向具备基础电子知识的技术人员,系统阐述主流品牌手机(华为、小米、OPPO、vivo、一加、苹果)的刷机与维修全流程。内容涵盖底层引导加载机制、分区表结构、签名验证原理,并提供完整的刷机脚本与维修诊断工具链。所有代码均已测试,可直接在Linux/Windows环境下运…...
OpenAI RLHF的理解
OpenAI RLHF的理解 1. RLHF 的优化目标 objectiveE(x,y)∼DπθRL[rθ(x,y)−βlogπθ(y∣x)πref(y∣x)]γ Ex∼Dpretrain[logπθRL(x)] \text{objective} \mathbb{E}_{(x,y) \sim D_{\pi_\theta^{RL}}} \left[ r_\theta(x, y) - \beta \log \frac{\pi_\theta(y \mid …...
逆向分析第一步:手把手教你搭建WinDbg+VMware双机调试环境(含问题排查)
逆向工程实战:从零构建WinDbg与VMware双机调试环境调试器与虚拟机的组合是安全研究人员分析软件行为、挖掘漏洞的必备工具链。想象一下,当你需要观察一个可疑驱动程序如何与操作系统内核交互,或是追踪某个恶意样本在系统底层的活动轨迹时&…...
Capsule技术:游戏引擎与数据中心资源隔离的创新方案
1. Capsule技术核心解析:当游戏引擎遇见数据中心资源隔离在云游戏爆发式增长的今天,数据中心的GPU资源利用率成为决定商业成败的关键指标。传统游戏引擎设计存在一个根本性矛盾:现代GPU的计算能力呈指数级增长(如NVIDIA RTX 4090拥…...
用Python手把手复现GRO淘金优化算法(附完整代码与CEC2005测试)
用Python手把手复现GRO淘金优化算法(附完整代码与CEC2005测试)当算法工程师第一次接触GRO淘金优化算法时,往往会被其独特的生物启发式设计所吸引。这种模拟19世纪淘金者行为的元启发式算法,在解决复杂优化问题时展现出令人惊讶的效…...
酒店门锁V10SDK接口说明-幽冥大陆(一百22)—东方仙盟
调用函数库://-----------------------------------------------------------------------------------//功能:读DLL版本,不涉及USB口操作C原型:int __stdcall GetDLLVersion(uchar *bufVer)返回:DLL版本//-----------…...
如何免费解锁Wand专业版功能:Wand-Enhancer完整使用指南
如何免费解锁Wand专业版功能:Wand-Enhancer完整使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为Wand(原WeMod&…...
