一、环境准备与离线包管理
在离线环境中部署GPU容器环境,首要任务是构建完整的依赖库。建议采用”基础镜像+增量包”模式:
- 基础系统镜像:使用CentOS7官方Minimal ISO制作本地YUM源,通过
createrepo工具构建本地仓库。示例命令:mkdir /localrepo && cp *.rpm /localrepocreaterepo /localrepo
- GPU驱动包:从NVIDIA官网下载对应驱动(如NVIDIA-Linux-x86_64-470.xx.xx.run)及CUDA Toolkit离线包(需匹配驱动版本)。推荐使用
wget --no-check-certificate在联网环境下载后传输至离线服务器。 - 容器运行时:准备Docker CE离线包(包含docker-ce、docker-ce-cli、containerd.io)及nvidia-docker2组件。建议使用
yumdownloader工具下载完整依赖链。
二、GPU驱动离线安装
-
内核头文件准备:
rpm -ivh kernel-devel-$(uname -r).rpm kernel-headers-$(uname -r).rpm
需确保版本与当前运行内核完全一致,可通过
uname -r验证。 -
驱动安装:
chmod +x NVIDIA-Linux-x86_64-*.run./NVIDIA-Linux-x86_64-*.run --silent --dkms --no-opengl-files
关键参数说明:
--silent:静默安装--dkms:动态内核模块支持--no-opengl-files:仅安装计算相关组件
- 验证安装:
nvidia-smi# 应显示GPU信息及驱动版本modinfo nvidia | grep version# 验证内核模块
三、容器运行时配置
-
Docker离线安装:
rpm -ivh docker-ce-*.rpm docker-ce-cli-*.rpm containerd.io-*.rpmsystemctl enable docker
-
NVIDIA Container Toolkit配置:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/yum.repos.d/nvidia-docker.repo# 离线场景需手动创建repo文件并放置离线包rpm -ivh nvidia-container-toolkit-*.rpm
-
运行时配置:
编辑/etc/docker/daemon.json:{"default-runtime": "nvidia","runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}}
重启服务:
systemctl restart docker
四、容器化GPU验证
-
基础验证:
docker run --gpus all nvidia/cuda:11.0-base nvidia-smi# 应显示容器内GPU信息
-
深度学习框架测试:
docker run --gpus all -it tensorflow/tensorflow:latest-gpu python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"# 应输出GPU设备列表
五、离线环境维护建议
-
版本锁定机制:
创建/etc/yum/repos.d/local.repo固定包版本:[local]name=Local Repositorybaseurl=file:///localrepoenabled=1gpgcheck=0
-
容器镜像管理:
使用docker save和docker load进行镜像传输:docker save -o cuda_image.tar nvidia/cuda:11.0-basedocker load -i cuda_image.tar
-
安全更新策略:
- 定期通过外网服务器同步安全补丁
- 使用
yum update --disablerepo=* --enablerepo=local仅更新本地包 - 建立补丁审核流程,避免引入不兼容更新
六、常见问题处理
-
驱动与内核不匹配:
错误现象:modprobe: ERROR: could not insert 'nvidia': Unknown symbol in module
解决方案:# 确认内核版本uname -r# 安装对应版本的kernel-develrpm -qa | grep kernel-devel
-
容器GPU不可见:
错误现象:docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
排查步骤:
- 检查
nvidia-container-cli日志:journalctl -u nvidia-containerd
- 验证
/etc/nvidia-container-runtime/config.toml配置
- 性能异常:
建议使用nvidia-smi dmon监控GPU利用率,若发现异常:
- 检查
/etc/modprobe.d/nvidia.conf中的参数设置 - 验证
/usr/lib/modprobe.d/dist-blacklist.conf是否屏蔽了nouveau驱动
七、进阶配置
-
多GPU调度:
通过NVIDIA_VISIBLE_DEVICES环境变量控制:docker run --gpus '"device=0,1"' -it tensorflow/tensorflow:latest-gpu
-
MIG设备配置:
对于A100等支持MIG的GPU:nvidia-smi mig -i 0 -C 3g.10gb# 创建MIG实例后,容器中通过device ID访问
-
性能优化参数:
在/etc/nvidia/nvidia-application-profiles-*.rc中配置:[gpu_0]# 启用持久模式减少初始化开销Option "PersistentMode" "1"# 优化自动boost功能Option "AutoBoost" "0"Option "AutoBoostDefault" "0"
本方案已在多个生产环境验证,可支持从TensorFlow/PyTorch训练到CUDA计算的全场景GPU容器化需求。建议定期进行nvidia-bug-report.sh收集诊断信息,建立完善的离线环境更新机制。