【大模型系列篇】GPU资源容器化访问使用指南

在当今的高性能计算和机器学习领域,GPU(图形处理单元)因其卓越的并行计算能力而扮演着至关重要的角色。随着容器化技术如 Docker 的普及,越来越多的数据科学家和开发者选择将他们的应用和工作负载封装到 Docker 容器中,以实现更便捷的开发、测试和部署流程。然而,默认情况下,Docker 容器是无法自动识别或利用宿主机上的 NVIDIA GPU 资源的。这一限制可能会导致那些依赖于 GPU 加速的工作负载性能大幅下降,甚至完全无法运行。

为了打破这种隔离,使得容器内的应用程序可以像在裸机上一样使用 GPU,接下来我们一起来探索,开启容器对 NVIDIA GPU 的访问之旅。

1.安装 NVIDIA 驱动程序

Nvidia官网下载驱动程序: https://www.nvidia.cn/drivers/lookup/

wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/550.120/NVIDIA-Linux-x86_64-550.120.run

安装过程中会出现:

  • he distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。

  • Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 no 继续。

  • Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up。选择 yes 继续。

安装成功后,reboot 重启,输入nvidia-smi 查看。

2.安装 CUDA Toolkit

CUDA Toolkit 是 NVIDIA 提供的一套全面的开发工具,旨在帮助开发者创建、优化和部署基于 CUDA 的应用程序。它为利用 GPU 进行加速计算提供了必要的基础设施和支持,使得开发者可以充分利用 NVIDIA GPU 的并行处理能力来加速各种计算密集型任务。

 https://developer.nvidia.com/cuda-toolkit-archive

NVIDIA驱动版本与CUDA版本对应关系查看: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html 

3.安装 NVIDIA Container Toolkit

NVIDIA Container Toolkit 是一个专为构建和运行利用 GPU 加速的容器而设计的强大工具集。它通过集成到 Docker 引擎中,自动配置容器以支持 NVIDIA GPU,从而简化了 GPU 支持的容器化应用的部署与管理。

该工具包包括一个容器运行时库和一系列实用程序,能够自动处理与 NVIDIA GPU 交互的复杂性。当启动一个配置了 --gpus 选项的容器时,NVIDIA Container Toolkit 会自动将必要的 GPU 设备文件挂载到容器内,并设置相应的环境变量,使应用程序可以直接访问 GPU 资源。

Make sure you have installed the NVIDIA driver for your Linux Distribution Note that you do not need to install the CUDA Toolkit on the host system, but the NVIDIA driver needs to be installed。

https://github.com/NVIDIA/nvidia-container-toolkit

截至 2024/04/08 ,nvidia-container-runtime 已经废弃了,现在叫 nvidia-container-toolkit

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

依赖关系如下,version 是指 NVIDIA Container Toolkit 版本:

 例如下面是官方文档的图,它是如何和 docker 工作的。

3.1.安装容器工具包
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum install -y nvidia-container-toolkit  
 3.2.配置容器运行时
  • 使用 nvidia-ctk 命令配置:

sudo nvidia-ctk runtime configure --runtime=docker

The nvidia-ctk command modifies the /etc/docker/daemon.json file on the host. The file is updated so that Docker can use the NVIDIA Container Runtime.

 {"default-runtime": "nvidia","runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}
  • 重启 Docker 守护进程

sudo systemctl restart docker
  • 验证配置

docker run --rm --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi

4.K8S如何使用GPU

k8s 需要部署 NVIDIA 的 device plugin ,会 daemonset 起一个服务挂载宿主机 /var/lib/kubelet/device-plugins/ 目录,然后在目录下生成 socket 文件,kubelet 和这个 socket 文件按照 device plugin 要求 grpc 调用,部署去看官方的 github 部署。

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml

确保 Kubernetes 集群中已安装 NVIDIA Device Plugin。

kubectl get pods -n kube-system kubectl logs nvidia-device-plugin-daemonset-hzldk -n kube-system
  • kubectl describe node ?

  • 新建 gpu-pod.yaml 并部署

apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:restartPolicy: OnFailurecontainers:- name: cuda-vector-addimage: "nvidia/samples:vectoradd-cuda10.2"resources:limits:nvidia.com/gpu: 1requests:nvidia.com/gpu: "1"
kubectl apply -f gpu-pod.yaml
  • kubectl describe pod gpu-pod

  • kubectl logs gpu-pod

在 Kubernetes (K8s) 中,GPU 资源的管理通常依赖于设备插件(Device Plugin),它使得 GPU 可以作为扩展资源被调度。然而,默认情况下,Kubernetes 对于 GPU 的资源请求和限制只支持整数级别的分配,即你只能请求整个 GPU 或者不请求。这意味着如果你想要更细粒度地控制 GPU 资源,例如只分配一部分显存或计算核心给某个容器,就需要采取额外的措施。

这个简单介绍一种方法,HAMi 是一个开源的 vGPU 方案,它可以实现对 GPU core 和 memory 使用 1% 级别的隔离,确保共享同一 GPU 的各个 Pod 都能获得足够的资源。

通过 HAMi,你可以为每个 Pod 指定具体的 GPU 显存量和核心数量,从而更好地利用 GPU 资源。具体来说,你可以修改 Pod 的 YAML 文件,在 resources 字段中添加 gpu-memgpu-count 这样的扩展资源。

apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: ubuntu-containerimage: ubuntu:18.04command: ["bash", "-c", "sleep 86400"]resources:limits:nvidia.com/gpu: 1gpu-mem: "2048Mi"  # 限制显存为2GBrequests:nvidia.com/gpu: 1gpu-mem: "2048Mi"  # 请求显存为2GB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【毕业设计选题】数据科学与大数据专业毕业设计选题与建议

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…

大数据笔记之flink-cdc实时同步数据

大数据笔记之flink-cdc实时同步数据(mysql -->doris) 一、基本概念 Flink CDC 是一个基于流的数据集成工具,旨在为用户提供一套功能更加全面的编程接口(API)。 该工具使得用户能够以 YAML配置文件的形式,优雅地定义其 ETL&…

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇 2024年的蓝桥杯即将拉开序幕!对于许多编程爱好者来说,这不仅是一次展示自我能力的舞台,更是一次学习和成长的机会。作为一名大一新生的小蓝,对蓝桥杯充满了期待,但面对初次参赛的…

【有啥问啥】大语言模型Prompt中的“System指令”:深入剖析与误区澄清

大语言模型Prompt中的“System指令”:深入剖析与误区澄清 引言 在与大语言模型(LLM)交互时,“prompt”(提示符)这一概念已不再陌生。Prompt是引导模型生成特定类型文本的关键输入,决定了模型的…

linux/centOS7用户和权限管理笔记

linux系列中可以: 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别,分别是: 针对用户的权限控制针对用户组的权限控制 一,root用户 root用户拥有最大的系统操作权限,而普通…

sheng的学习笔记-AI-注意力模型(Attention Model)

Ai目录:sheng的学习笔记-AI目录-CSDN博客 先看下这两个文章: 序列模型:sheng的学习笔记-AI-序列模型(Sequence Models),RNN,GRU,LSTM_音乐识别是一对多吗-CSDN博客 机器翻译 sheng的学习笔记-AI-自然语…

el-table组件树形数据修改展开箭头

<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…

已解决:elasticsearch创建索引失败

报错信息 具体报错&#xff1a; org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [typeillegal_argument_exception, reasonunknown setting [index.mappings.properties.category.analyzer] please check that any required plugins are installed…

JAVA学习笔记——第十一章 枚举和注解

一、引出枚举类 1.先看一个需求demo package com.hspedu.enum_;public class Enumration01 {public static void main(String[] args) {Season Spring new Season("春天", "温暖");Season Summer new Season("夏天", "炎热");Seas…

GeeCache-单体并发缓存

实现LRU中value接口的缓存类 使用互斥锁封装LRU缓存类&#xff0c;实现并发访问 实现Group组&#xff0c;用名称对缓存分类 Getter为缓存击穿时调用的回调函数 若缓存击穿则调用回调函数&#xff0c;并把读取到的值加载到缓存中

吸烟抽烟行为识别数据集-超高识别率,支持YOLO,COCO,VOC格式的标注,10162张各种姿势场景下的吸烟图片

吸烟抽烟行为识别数据集-超高识别率&#xff0c;支持YOLO&#xff0c;COCO,VOC格式的标注&#xff0c;10162张各种姿势场景下的吸烟图片 数据集分割 训练组91&#xff05; 9279图片 有效集5&#xff05; 507图片 测试集4% 376图片 预处理 自动定…

云原生基础设施指南:精通 Kubernetes 核心与高级用法

1. 云原生的诞生 随着互联网规模的不断增长&#xff0c;以及企业对敏捷开发、快速交付和高可用性的需求日益增强&#xff0c;传统的单体架构逐渐暴露出局限性&#xff0c;难以满足现代业务对动态扩展和高效迭代的要求。为此&#xff0c;云原生应运而生。 云原生是为云计算时代…

使用Windbg排查C++软件安装包安装时被安全软件拦截导致安装堵塞(线程卡住)的问题

目录 1、问题描述 2、初步分析 3、将Windbg附加到安装包进程上进行分析 4、在Windbg中查看相关变量的值&#xff0c;并设置断点进行动态调试 4.1、在Windbg中查看相关变量的值 4.2、在Windbg中使用bp命令设置断点进行动态调试 5、腾讯电脑管家已经退出&#xff0c;但其…

【OJ题解】面试题三步问题

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 &#x1f4d8; 基础数据结构【C语言】 &#x1f4bb; C语言编程技巧【C】 &#x1f680; 进阶C【OJ题解】 &#x1f4dd; 题解精讲 目录 **题目链接****解题思路****1. 问题分析****2. 递归思路****3. 优化方案&a…

源码编译安装MySQL

MySQL相应版本的tar包下载 在5.7的版本的MySQL编译安装的时候&#xff0c;需要依赖C语言的库文件【boost】&#xff0c; 如上图所示&#xff0c;如果你使用第一个MySQL的tar包&#xff0c;还需要去网上去下载boost即C语言的库文件&#xff0c;但是第二个tar包就既包含MySQL的源…

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000 01 前言 大数据系列&#xff0c;学到了Hive&#xff0c;搭建环境的时候&#xff0c;因为使用的是本机WSL2&#xff08;别问为啥不用VMware&#xff0c;问就是条件有限&#xff0c;而且WS…

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现快速排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 6 8 7 9 0 1 3 2 4 5 (说明&#xff1a;第一行是元素个数&a…

若依实现图片上传时自动添加水印

文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用&#xff0c;并有效保护图片版权&#xff0c;若依项目需要实现一个功能&#xff1a;上传图片时&#xff0c;自动在图片上添加水印。这不仅可以有效防止盗用&#xff…

Mave下载、安装以及idea(2024)进行配置

目录 Maven简介 Maven下载 配置环境变量 配置本地仓库 在idea环境配置Maven 使用Maven创建工程 创建一个普通的java工程 创建一个Web项目 Maven简介 Maven是一个跨平台的项目管理工具&#xff0c;也是Apache组织中的一个成功的开源项目。它主要服务于基于Java的项目构…

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…