前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit

玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit

原创
作者头像
运维有术
发布2024-05-07 09:06:28
1310
发布2024-05-07 09:06:28
举报
文章被收录于专栏:运维有术运维有术

玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit

2024 年云原生运维实战文档 99 篇原创计划 第 014 篇 |玩转 AIGC「2024」系列 第 004 篇

你好,欢迎来到运维有术

今天分享的内容是 玩转 AIGC「2024」 系列文档中的 打造本地 AI 大模型地基,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit

本文将详细介绍如何在 AI 大模型云主机 Ubuntu 24.04 LTS 中安装 Docker 和 NVIDIA Container Toolkit ,从而实现 Docker 容器使用 GPU 运行本地大模型。

1. 前置条件

1.1 硬件环境

  • 服务器: 科脑 X99-D3、4*32G DDR3 内存、Intel E5-2698Bv3
  • 显卡:NVIDIA P104-100 魔改 8G 版
  • AI 云主机:8C、32G、40G 系统盘、500G 数据盘(大模型比较大,直接分 500G 的精简模式的磁盘)

本文选择纯矿卡 NVIDIA P104-100 作为演示,配置方法同样适用于其他型号显卡。

1.2 软件环境

  • 虚拟化平台:Proxmox Virtual Environment 8.0.4
  • AI 云主机系统: Ubuntu 24.04 LTS
  • Docker:26.1.1(默认版本比较新,你可以指定安装旧版本)
  • NVIDIA Container Toolkit:1.15

1.3 操作系统基础配置

本文假设你已经完成了操作系统 Ubuntu 24.04 LTS 的安装配置。

接下来,我们完成 500G 数据盘的格式化及自动挂载。

由于内容比较基础,我们直接使用 Shell 脚本自动化完成磁盘的格式化及 LVM 配置。

数据盘配置如下,如果你的环境跟我的不一致,请修改脚本。

磁盘设备名:/dev/sdb

挂载点:/data

磁盘分区形式:LVM

Docker 数据根目录:/data/docker

容器运行数据目录:/data/containers

代码语言:bash
复制
pvcreate /dev/sdb
vgcreate data /dev/sdb
lvcreate -l 100%VG data -n lvdata
mkfs.xfs /dev/mapper/data-lvdata
mkdir /data
mount /dev/mapper/data-lvdata /data/
tail -1 /etc/mtab >> /etc/fstab
mkdir -p /data/containers

将上面的脚本保存为 create-lvm.sh,然后执行。

脚本执行过程如下:

代码语言:bash
复制
root@AI-LLM-Prod:~# sh create-lvm.sh 
  Physical volume "/dev/sdb" successfully created.
  Volume group "data" successfully created
  Logical volume "lvdata" created.
meta-data=/dev/mapper/data-lvdata isize=512    agcount=4, agsize=32767744 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=1
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=131070976, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=63999, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

验证磁盘挂载结果:

代码语言:bash
复制
root@AI-LLM-Prod:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              3.2G  1.2M  3.2G   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   38G  4.8G   31G  14% /
tmpfs                               16G     0   16G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G   95M  1.7G   6% /boot
tmpfs                              3.2G   12K  3.2G   1% /run/user/1000
/dev/mapper/data-lvdata            500G  9.7G  491G   2% /data

2. 安装 Docker

以下所有操作均在 root 用户下完成,并假定操作系统是新安装的干净环境。

2.1 更新系统并安装依赖

代码语言:bash
复制
apt-get update
apt-get install ca-certificates curl gnupg

2.2 信任 Docker 的 GPG 公钥并添加仓库

我们使用清华大学开源软件镜像站的软件仓库 mirrors.tuna.tsinghua.edu.cn,作为安装源。

代码语言:bash
复制
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

2.3 安装最新版的 Docker

代码语言:bash
复制
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.4 自定义配置文件

创建配置文件 /etc/docker/daemon.json

代码语言:bash
复制
cat > /etc/docker/daemon.json <<EOF
{
  "data-root": "/data/docker",
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "log-level": "info",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  },
  "storage-driver": "overlay2"
}
EOF

2.5 启动 Docker

启动 Docker 服务,并设置开机自启。

代码语言:bash
复制
systemctl restart docker
systemctl enable docker --now

2.6 验证 Docker

  • 查看 Docker 信息
代码语言:bash
复制
 docker info
  • 使用镜像 hello-world 创建测试容器
代码语言:bash
复制
 docker run hello-world
  • 正确执行输出结果如下:
代码语言:bash
复制
root@AI-LLM-Prod:~# docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

3. 安装 NVIDIA GPU 驱动

本文实验环境是个人的学习开发环境,所以我们采用比较简单的方式,利用系统安装包安装 NVIDIA 显卡驱动。生产环境建议选择适配的 .run 格式二进制安装包。

3.1 查询适配的显卡驱动

代码语言:bash
复制
root@AI-LLM-Prod:~# ubuntu-drivers devices
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
ERROR:root:aplay command not found
== /sys/devices/pci0000:00/0000:00:10.0 ==
modalias : pci:v000010DEd00001B87sv00000000sd00000000bc03sc02i00
vendor   : NVIDIA Corporation
model    : GP104 [P104-100]
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

注意: 重点关注 driver : nvidia-driver-535 - distro non-free recommended

3.2 自动安装适配的显卡驱动

执行下面的命令,自动安装适配的显卡驱动。

代码语言:bash
复制
ubuntu-drivers autoinstall

如果想安装指定版本的 GPU 驱动,可以执行下面的命令。

代码语言:bash
复制
apt install nvidia-driver-470

安装完成后,重启服务器(必须执行)

代码语言:bash
复制
reboot

3.3 验证显卡驱动

  • 执行下面的命令
代码语言:bash
复制
nvidia-smi
  • 正确执行输出结果如下:
代码语言:bash
复制
ubuntu@AI-LLM-Prod:~$ nvidia-smi 
Mon May  6 14:46:22 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.171.04             Driver Version: 535.171.04   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA P104-100                Off | 00000000:00:10.0 Off |                  N/A |
| 72%   36C    P8               7W / 180W |      0MiB /  8192MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

4. 安装 NVIDIA Container Toolkit

NVIDIA Container Toolkit 软件仓库在 NVIDIA GitHub 上,所以安装过程依赖于网络,如果失败,请多次尝试。

4.1 添加软件仓库

代码语言:bash
复制
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

4.2 更新软件包索引

代码语言:bash
复制
apt-get update

4.3 安装 NVIDIA Container Toolkit

代码语言:bash
复制
apt-get install -y nvidia-container-toolkit

5. 配置 Docker 使用 nvidia 容器运行时

5.1 配置 Docker

  1. 使用 nvidia-ctk 命令配置 Docker 容器运行时
代码语言:bash
复制
nvidia-ctk runtime configure --runtime=docker

正确执行输出结果如下:

代码语言:bash
复制
root@AI-LLM-Prod:~# nvidia-ctk runtime configure --runtime=docker
INFO[0000] Loading config from /etc/docker/daemon.json  
INFO[0000] Wrote updated config to /etc/docker/daemon.json 
INFO[0000] It is recommended that docker daemon be restarted. 

root@AI-LLM-Prod:~# cat /etc/docker/daemon.json 
{
    "data-root": "/data/docker",
    "exec-opts": [
        "native.cgroupdriver=systemd"
    ],
    "log-level": "info",
    "log-opts": {
        "max-file": "5",
        "max-size": "100m"
    },
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "storage-driver": "overlay2"
}
  1. 重启 Docker 进程
代码语言:bash
复制
systemctl restart docker

5.2 验证测试 CUDA

运行 CUDA 示例容器进行验证测试

代码语言:bash
复制
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
# 也可以用下面的命令
# docker run -it --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

正确执行输出结果如下:

代码语言:bash
复制
root@AI-LLM-Prod:~# docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
49b384cc7b4a: Pull complete 
Digest: sha256:3f85b7caad41a95462cf5b787d8a04604c8262cdcdf9a472b8c52ef83375fe15
Status: Downloaded newer image for ubuntu:latest
Mon May  6 15:11:10 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.171.04             Driver Version: 535.171.04   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA P104-100                Off | 00000000:00:10.0 Off |                  N/A |
| 71%   34C    P8               6W / 180W |      0MiB /  8192MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

6. 常见问题

6.1 问题 1

  • 问题现象
代码语言:bash
复制
root@AI-LLM-Prod:~# nvidia-smi 
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
  • 解决方案

安装完 NVIDIA 显卡驱动没有重启机器,重启后问题解决。

本文实战演示了如何在最新版的 Ubuntu 24.04 LTS 操作系统中安装 Docker 和 NVIDIA Container Toolkit,安装成功后我们进行了基本功能的验证测试且测试通过。

因为,该操作系统刚刚发布,并不在 NVIDIA Container Toolkit 官方支持的 Linux 发行版列表中。所以,如果你在使用的过程中遇到问题,可以切换到 Ubuntu 22.04 LTS

以上,就是今天分享的内容,下一期我们会分享如何用 Docker 方式部署大模型运行管理器 Ollama 并使用 GPU 运行大模型。敬请持续关注!!!

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

Get 本文实战视频(请注意,文档视频异步发行,请先关注)

如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @ 运维有术,及时收看更多好文!

欢迎加入 「知识星球|运维有术」 ,获取更多的 KubeSphere、Kubernetes、云原生运维、自动化运维、AI 大模型等实战技能。未来运维生涯始终有我坐在你的副驾

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit
    • 1. 前置条件
      • 1.1 硬件环境
      • 1.2 软件环境
      • 1.3 操作系统基础配置
    • 2. 安装 Docker
      • 2.1 更新系统并安装依赖
      • 2.2 信任 Docker 的 GPG 公钥并添加仓库
      • 2.3 安装最新版的 Docker
      • 2.4 自定义配置文件
      • 2.5 启动 Docker
      • 2.6 验证 Docker
    • 3. 安装 NVIDIA GPU 驱动
      • 3.1 查询适配的显卡驱动
      • 3.2 自动安装适配的显卡驱动
      • 3.3 验证显卡驱动
    • 4. 安装 NVIDIA Container Toolkit
      • 4.1 添加软件仓库
      • 4.2 更新软件包索引
      • 4.3 安装 NVIDIA Container Toolkit
    • 5. 配置 Docker 使用 nvidia 容器运行时
      • 5.1 配置 Docker
      • 5.2 验证测试 CUDA
    • 6. 常见问题
      • 6.1 问题 1
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com