day82-容器技术day09实现容器内使用GPU-8.05

 

学习tip:

1.为什么要学这个?

2.这个有什么用?

3. 听完提出自己的问题。

4. 自己总结,不要直接抄老师的笔记。

5. 自己写一遍或者画图画一遍,是输出一遍。(费曼学习法)

=============

重点:

抓住问题的本质

万变不离其宗。

抓重点,放次要的

 

高薪必问 数据库(mysql,redis)

数据库的学习重点给你点一下,

1.索引结构与慢查询优化,

2.事务,

3.存储引擎,

4.多种主从架构及流程,

5.两阶段提交,

6.锁机制,

7.死锁问题处理,

8.乐观锁悲观锁等

容器:

容器本质是:“共享内核, 隔离文件系统”

 

=====老师笔记========

一、cpu与gpu

	cpu:擅长逻辑控制,串行运算,cpu就好像一个老教授,老教授的特点是啥数学题都能算
	
	gpu:擅长大规模的并发计算机,gpu就好像是一群只会算简单的加减法的小学生
	
二、要想启动一个容器使用gpu需要具备哪些条件
	1、宿主机上必须插一块gpu卡
	2、宿主机上需要为该gpu卡安装驱动程序
	3、安装官方的容器引擎,例如docker容器引擎
	4、配套安装一个nvidia-container-runtime
	5、启动容器采用参数--gpus指定启动gpu,
	或者修改配置文件把默认的runc替换为nvidia-container-runtime这样就不用加--gpus参数启动
	容器默认都能访问gpu
	
	强调:容器环境内必须有cuda环境才行

=====昨天问题========

 

====自问自答-预习=====

1. 是什么?

2. 为什么?

3.有什么用?

 

====自问自答-听课=====

1. 怎么在容器里实现GPU访问?

正常是不能访问的。

得宿主机有CUDA驱动,才能访问

2. 英伟达 做了什么适配docker?

做了2个版本,

nvidia-docker1.0 实现的时候耦合度很高

nvidia-docker2.0 实现的runc那一部分

 

image

 

 

3. 创建GPU的示意图:

注意:要提前安装nvidia-runc 这个东西

image

 

image

4.要创建GPU要具备哪些条件?

 
1、宿主机上必须插一块gpu卡
2、宿主机上需要为该gpu卡安装驱动程序
3、安装官方的容器引擎,例如docker容器引擎
4、配套安装一个nvidia-container-runtime
5、启动容器采用参数--gpus指定启动gpu,
或者修改配置文件把默认的runc替换为nvidia-container-runtime这样就不用加--gpus参数启动
容器默认都能访问gpu
 
强调:容器环境内必须有cuda环境才行
当你发现容器内部发现CUDA Version: N/A,就是因为容器内没有cuda的driver接口,需要在镜像里定制好 ,如下制作一个带有cuda环境的java镜像(注意cuda版本)

5.具体的流程是?

image

 

  • 1、正常创建一个容器的流程是这样的:

    docker –> dockerd –> containerd–> containerd-shim –>runc –> container-process

    docker客户端将创建容器的请求发送给dockerd, 当dockerd收到请求任务之后将请求发送给containerd, containerd经过查看校验启动containerd-shim或者自己来启动容器进程。
    创建一个使用GPU的容器

  • 2、创建GPU容器的流程如下:

    docker–> dockerd –> containerd –> containerd-shim–> nvidia-container-runtime –> nvidia-container-runtime-hook –> libnvidia-container  — > container-process

    基本流程和不使用GPU的容器差不多,只是把docker默认的运行时替换成了NVIDIA自家的nvidia-container-runtime。
    这样当nvidia-container-runtime创建容器时,先执行nvidia-container-runtime-hook这个hook去检查容器是否需要使用GPU(通过环境变NVIDIA_VISIBLE_DEVICES来判断)。如果需要则调用libnvidia-container来暴露GPU给容器使用。否则走默认的runc逻辑

 

 

6.docker19.03版本以前还是用英伟达的1.0时代?

是的,

docker的版本若是在docker19以前,

那么就需要用nvidia-docker1.0 

要下载一个全的。(从dockerd 那里构建的)

7.仓库地址[群友提供,还没验证]:

参考:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#linux-distributions

 

增加一个文件:

vim /etc/yum.repos.d/nvidia-container-runtime.repo

添加这个:

[nvidia-container-toolkit]
name=nvidia-container-toolkit
#baseurl=https://nvidia.github.io/libnvidia-container/stable/rpm/$basearch
baseurl=https://nvidia.github.io/libnvidia-container/centos7/x86_64/
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-toolkit-experimental]
name=nvidia-container-toolkit-experimental
#baseurl=https://nvidia.github.io/libnvidia-container/experimental/rpm/$basearch
baseurl=https://nvidia.github.io/libnvidia-container/centos7/x86_64/
repo_gpgcheck=1
gpgcheck=0
enabled=0
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

8.[动手实践]刚才的视频在讲什么?

9.[动手实践]刚才的视频在讲什么?

10.[动手实践]刚才的视频在讲什么?

11.[动手实践]刚才的视频在讲什么?

12.有什么用?

13.有什么用?

14.有什么用?

15.有什么用?

今日作业:

 

参考资料:

英伟达驱动runc:https://nvidia.github.io/nvidia-container-runtime/

https://egonlin.com/?p=7366

 

posted @ 2025-08-05 09:07  77gg  阅读(21)  评论(0)    收藏  举报