近期做了一些机器学习平台开放API接入的事情,涉及到一些环境搭建的工作,整理一份文档,帮助理解,并作为备忘。
转一张来自知乎的图,对整个结构描述的比较清晰。
从底层到上层依次是:硬件 → 操作系统 → 驱动程序 → cuda开发工具包 → GPU运算加速库 → 机器学习框架。
显卡驱动程序
显卡硬件,在机器学习领域,基本上都是 nvidia 家的。插上显卡后,需要安装显卡驱动程序,才能正常识别显卡,并使用显卡功能。
驱动安装的过程可以从 nvidia 官网找到
https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html#introduction
安装后就能通过 nvidia-smi 命令观察 nvidia 的GPU资源使用情况了。
cuda工具包
组成结构
上图是来自 nvidia 官网的 cuda组成 图,cuda本身只包含图中的 CUDA Toolkit 部分,包括 runtime、一些依赖库,和工具。
为了方便使用,cuda也集成了一个 nvidia 显卡驱动包,其中 nvidia.ko 为显卡驱动程序,libcuda.so 为给开发者提供的编程接口。
驱动版本兼容性
如上图的组成结构,CUDA Toolkit 和 显卡驱动之间是不同的版本体系。机器上已经安装的驱动程序,可能会和用户安装的 CUDA Toolkit 间存在不兼容的问题,官方给出了兼容性表格。
从官方docker获取
cuda与cudnn可以从dockerhub快速获取基础镜像,不用自己编译安装。
https://hub.docker.com/r/nvidia/cuda/tags。
例如1
FROM nvidia/cuda:11.2.2-devel-centos7
其中
- base镜像 包含 cuda runtime
- runtime镜像,基于base镜像制作,包含了一些运算库
- devel镜像,基于 runtime 镜像制作,包含了一些开发用的头文件和工具集
自行安装
如果要自己安装也行,参考 官方的安装指南
cudnn运算加速库
cudnn 是 nvida 为他家显卡开发的深度卷积神经网络的加速库,要使用 nvidia 的GPU进行GPU运算,一般的训练/推导框架,都需要安装这个库。
从docker获取
找到镜像1
FROM nvidia/cuda:11.2.2-cudnn8-devel-centos7
自行安装
参考 官方的安装指南
容器中挂载GPU
很多时候,训练/运算任务并不是直接在物理机/虚拟机上进行,而是在容器中进行的。 直接启动一个 带 cuda 的容器,也是没办法调用 cuda 的,需要在宿主机上安装一些组件,并且在容器启动时增加一些参数。
安装 nvidia-container-runtime
为了支持容器挂载GPU驱动,首先需要安装 nvidia-container-runtime:
https://nvidia.github.io/nvidia-container-runtime/
挂载命令
本文链接:https://www.zoucz.com/blog/2022/04/26/20baff30-c50f-11ec-9fe7-534bbf9f369d/