NVIDIA-GPU归入K8S集群管理的安装文档--第二版
一,nvidia K80驱动安装
1, 查看服务器上的Nvidia(英伟达)显卡信息,命令lspci |grep NVIDIA

2, 按下来,进行显卡驱动程序的安装,驱动程序可到nvidia的官网进行下载,网址为https://www.nvidia.com/Download/index.aspx?lang=en-us,安装完成之后,查看版本:NVIDIA-SMI 410.48,运行nvidia-smi可获得此信息。


***如果nvidia-smi很慢,可先执行一次nvidia-persistenced --persistence-mode。
二,NVIDIA CUDA Toolkit 安装
1,根据前一节的驱动,先把合适的CUDA Toolkit版本进行下载安装。
下载网址:https://developer.nvidia.com/cuda-toolkit-archive
驱动程序和CUDA的对应关系如下图:

2,安装时,按如下图选择即可:

3,使用cuda中的deviceQuery可以获得其安装信息

三,安装cuDNN
1, cuDNN是GPU加速计算深层神经网络的库,网址:
https://developer.nvidia.com/rdp/cudnn-archive

2, 选择与cuda对应的版本,下载解压到cuda对应目录即可。
|
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* |
***如果只是在宿主机上使用NVIDIA的GPU,那么,经过上面的步骤之后,就可以安装一些学习框架进行操作了。但如果想更灵活干净的让应用在容器内运行,则还需要进行接下来的操作准备。***
四,nvidia-docker2安装
1,Nvidia关于docker项目的支持,github网址:https://github.com/NVIDIA/nvidia-docker。它使用一个nvidia-docker2应用来延伸docker的内置功能。架构如下:

2,nvidia-docker2要求的docker安装版本比较新,安装的版本为ce-18.09.6-3。Nvidia-docker2安装的版本为2.0.3-3。(这几个rpm包我都收下载好,可随时共享)
安装命令(需要解决rpm包依赖,未列明):
|
Sudo yum install docker-ce-18.09.6-3.el7.x86_64.rpm Sudo yum install nvidia-docker2-2.0.3-3.docker18.09.6.ce.noarch.rpm |
3,在安装完成之后,有两个配置文件需要更改或新建:
a,/etc/systemd/system/docker.service.d/docker.conf
|
[Service] ExecStart= ExecStart=/usr/bin/dockerd --graph=/xxx --storage-driver=overlay --insecure-registry harbor.xxx.com.cn |
这个文件,公司所有的docker都有这个设置更改,graph参数指定docker镜像的存放目录,需要一个较大的硬盘空间。
b,/etc/docker/daemon.json
|
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } |
4,此文件为nvidia-docker2应用所需,用于替换docker的默认runc。
当这些更改应用之后,再启动docker服务,会看到相应的更改已生效。

五,Docker镜像测试:
1,此次测试的镜像如下:
l ---anibali/pytorch: cuda-10.0
l ---tensorflow/tensorflow: 1.14.0-gpu-py3-jupyter
2,在服务器新装之后,如果有特别个性化的需求,可以考虑以anaconda镜像为基础进行自定义制作。
3,在以上两个镜像中,GPU加速的效果,都可以达到CPU的10倍左右。

六,使用K8S管理docker容器的部署
1, 将此节点加入集群。
sudo kubeadm join master --token xx--discovery-token-unsafe-skip-ca-verification
2, 安装Nvidia Device Plugin。
Nvidia-device-plugin.yaml
|
apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset-1.12 namespace: kube-system spec: updateStrategy: type: RollingUpdate template: metadata: annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: nvidia-device-plugin-ds spec: tolerations: - key: CriticalAddonsOnly operator: Exists - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - image: harbor.xxx.com.cn/3rd_part/nvidia/k8s-device-plugin:1.11 name: nvidia-device-plugin-ctr securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins |
然后,在集群里运行如下命令,将yaml文件应用到集群里。
Kubectl apply –f Nvidia-device-plugin.yaml
1, 检查GPU资源已正常被集群识别。
Kubectl get nodes \
"-o=custom-columns=NAME:.metadata.name,\
GPU:.status.allocatable.nvidia\.com/gpu"
输出如下则说明一切正常。

2, Jupyter环境部署
Jupyter.yaml内容
|
apiVersion: apps/v1 kind: Deployment metadata: name: sss-ai-jupyter spec: replicas: 1 selector: matchLabels: name: sss-ai-jupyter template: metadata: labels: name: sss-ai-jupyter spec: nodeSelector: accelerator: nvidia-tesla-k80 containers: - name: sss-ai-jupyter image: harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter imagePullPolicy: IfNotPresent resources: limits: nvidia.com/gpu: 1 --- apiVersion: v1 kind: Service metadata: name: sss-ai-jupyter spec: type: NodePort ports: - port: 8888 targetPort: 8888 nodePort: 30302 selector: name: sss-ai-jupyter |
然后,在集群里运行如下命令,将yaml文件应用到集群里。
Kubectl apply –f Nvidia-device-plugin.yaml
3, 测试
进入POD,手工测试结果如下:

在容器外部,通过curl命令,返回如下:

***通过浏览器测试()

七,KubeFlow部署
Kubeflow 是目前基于 Kubernetes 的主流机器学习解决方案,它抽象了和机器学习相关的 PS-Worker 模型,实现了一套 pipeline 的工作流,支持超参数训练和 Jupyter notebooks 集成等能力。
由于kubeflow的安装,涉及众多组件依赖,较为复杂。所以官方提供的都是一站式安装方案。而这安装的前提条件,必须又能连外网(包括上网),又同时保持k8s master的连接。
目前,公司的网络条件暂不具体,故暂未进行安装部署。稍后,会以microk8s的方式来测试单机部署。
NVIDIA-GPU归入K8S集群管理的安装文档--第二版的更多相关文章
- Greenplum/Deepgreen(集群/分布式)安装文档
Deepgreen分布式安装文档 环境准备 1.安装VMware虚拟机软件,然后在VMware安装三台Linux虚拟机(使用centos7版本) 2.使用的虚拟机如下: 192.168.136.155 ...
- k8s 集群管理和微服务 适合做啥
k8s 集群管理和微服务 适合做啥 都知道k8s是集群 适合微服务 有很多教程 但你可以先了解他能干啥 traefix 是负载均衡工具 k8s 适合部署无状态依赖的微服务 可以按需求开启多个微服务 管 ...
- 整理全网最全K8S集群管理工具、平台
整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...
- 近万字案例:Rancher + VMware PKS实现全球数百站点K8S集群管理
Sovereign Systems是一家成立于2007年的技术咨询公司,帮助客户将传统数据中心技术和应用程序转换为更高效的.基于云的技术平台,以更好地应对业务挑战.曾连续3年提名CRN,并且在2012 ...
- 强大多云混合多K8S集群管理平台Rancher入门实战
@ 目录 概述 定义 为何使用 其他产品 安装 简述 规划 基础环境 Docker安装 Rancher安装 创建用户 创建集群 添加Node节点 配置kubectl 创建项目和名称空间 发布应用 偏好 ...
- 多k8s集群管理
多集群的切换是K8s运维中比不可少的问题,常见的基于多个集群进行切换的方法有三种: 切换config文件 通过context进行集群切换 用kubecm进行集群切换 切换config文件 我们先看看放 ...
- RHEL 集群(RHCS)配置小记 -- 文档记录
1.RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pd ...
- Hadoop 集群搭建和维护文档
一.前言 -- 基础环境准备 节点名称 IP NN DN JNN ZKFC ZK RM NM Master Worker master1 192.168.8.106 * * * * * * maste ...
- 如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1)
适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 11.2.0.2 [发行版 11.2]本文档所含信息适用于所有平台 用途 这篇文档提 ...
随机推荐
- ORB-SLAM2初步
一.ORB-SLAM简介 最近开始入坑SLAM,经过简单调研,各位大咖认为,目前最优秀的视觉SLAM系统是ORB-SLAM2,因此对ORB-SLAM2进行了学习. ORB-SLAM2是2015年提出的 ...
- 基于DFA算法、RegExp对象和vee-validate实现前端敏感词过滤
面临敏感词过滤的问题,最简单的方案就是对要检测的文本,遍历所有敏感词,逐个检测输入的文本是否包含指定的敏感词. 很明显上面这种实现方法的检测时间会随着敏感词库数量的增加而线性增加.系统会因此面临性能和 ...
- 比较两个jar包的版本号
一.背景 我们经常会遇到比较两个jar包的版本号,这里贴下相关实现. 请尊重作者劳动成果,转载请标明原文链接:https://www.cnblogs.com/waterystone/p/1138547 ...
- FWT-快速沃尔什变换
FWT-快速沃尔什变换 FWT有啥用啊 我们知道,FFT可以解决多项式的卷积,即 \[ C_k=\sum_{i+j=k}A_i*B_j \] 如果将操作符换一下,换成集合运算符 比如 \[ C_k=\ ...
- 第五次实验报告:使用Packet Tracer理解OSPF路由协议
目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 4. 配置 4.1 配置并激活串行地址和以太网地址 4.1.1 R1 4.1.2 R2 4.1.3 R3 4.1.4 PC ...
- vue 学习记录
模板:通常是指html模板 组件component的概念: 在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例, 将组件看作自定义的HTML元素.使用组件的前提是创建并注册组件 v ...
- Using MS Soap toolkit to generate web services .md
Different SOAP encoding styles - RPC, RPC-literal, and document-literal SOAP Remote Procedure Call(R ...
- 获取 Rancher 中 Prometheus 的数据
1.需求 在 rancher 应用商店添加集群监控,会安装 prometheus.grafana:需要从 prometheus 的 api 中收集 pod 的一些信息. 查看grafana 配置的数据 ...
- NPOI中的PhysicalNumberOfCells 与 LastCellNum
这两个理论上一个是算空列,一个不算空列,但是实际上有时候相同数据的excel,不同的excel编辑工具保存后的,PhysicalNumberOfCells可能不一样,会导致莫名其妙错误,最好使用Las ...
- MySQL如何定位并优化慢查询sql
1.如何定位并优化慢查询sql a.根据慢日志定位慢查询sql SHOW VARIABLES LIKE '%query%' 查询慢日志相关信息 slow_query_log 默认是off关闭 ...