Skip to content

NVIDIA Docker Install

Background

Docker 是一种虚拟化技术,之前部署 OpenWebUI 时真正第一次使用,发现在快速部署上非常优雅。之后做机器学习发现配置环境非常繁琐,趁这次正好有一个偏工程化一点的计划,在配置组里面新到的 GPU 服务器时要了 root 来配置。

Internet

当你发现一个服务器无法联网,不要急,我有一套继承自师兄的方法。

1.在本机上使用代理软件开放一个端口 (比如说 clash 默认的 7892) 且保证能通过代理联网。

2.本机上运行

bash
ssh -R  2333:localhost:7892 <user>@<host.adress>

3.服务器上运行

bash
export ALL_PROXY="http://127.0.0.1:2333"
export https_proxy="http://127.0.0.1:2333"
export http_proxy="http://127.0.0.1:2333"

然后记得并不是所有流量都会经过代理。 不过现在可以愉快的联网了!

Install

需要安装两个部分,Docker 以及 NVIDIA Container Toolki。

我以 rocky_8 为例

Docker

联网之后当然好说,然后没有 root 是装不了的(

使用管理账号,按照教程 所示

bash
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

dnf update

dnf install docker-ce

然后设置普通用户的使用权限(rootless 就不搞了)

bash
usermod -aG docker $USER

newgrp docker

NVIDIA Container Toolki

按照Nvidia 给的教程 多半是有问题的(没错!是联网的问题) 我还是按Rocky社区的教程

bash
wget -O /etc/yum.repos.d/nvidia-container-toolkit.repo https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo # 配置仓库信息

dnf install -y nvidia-container-toolkit # 安装容器工具包 

nvidia-ctk runtime configure --runtime=docker # 该 nvidia-ctk 命令会修改 /etc/docker/daemon.json 主机上的文件,以便 Docker 可以使用 NVIDIA 容器运行

systemctl restart docker # 重启 docker 服务

然后记得给 docker 联网,默认是不走代理的(

Vscode

这个仅仅是记录,就不解释了,vscode开发容器构建太麻烦了(连不了网的时候)

json
#.devcontainer/devcontainer.json

{
  "name": "GPU Development",
  "build": {
      "dockerfile": "Dockerfile"
  },
  "runArgs": [
      "--gpus=all",
      "--network=host"
  ],
  "remoteUser": "root", // 使用 root 用户,避免用户不存在的问题
  "postCreateCommand": "nvidia-smi"
}
Dockerfile
#.devcontainer/Dockerfile

# 使用 NVIDIA CUDA 12.6.1 开发镜像
FROM nvidia/cuda:12.6.1-runtime-rockylinux8

USER root

# 配置国内镜像源
RUN sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/Rocky-*.repo && \
    sed -i 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' /etc/yum.repos.d/Rocky-*.repo

# 禁用CUDA存储库(因为基础镜像已经包含CUDA)
RUN if [ -f /etc/yum.repos.d/cuda.repo ]; then \
      sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/cuda.repo; \
    fi

RUN yum install -y kmod

# 设置容器的工作目录
WORKDIR /workspace