背景

上一篇已完成docker部署,本篇基于docker进行大模型部署。

背景知识1:显卡、显卡驱动、cuda、toolkit 是什么关系?哪些是宿主机级别,哪些是docker级别?我目的是避开因cuda版本不同造成的项目间的什么冲突?

答:
(1)
显卡驱动:NVIDIA 提供的底层软件,管理 GPU 硬件,处理图形和计算任务。它是 GPU 运行的基础,决定了哪些 CUDA 版本可支持。
CUDA Toolkit:NVIDIA 的开发工具包,包含库(如 cuDNN)、编译器(nvcc)和运行时(CUDA Runtime),用于开发和运行 GPU 加速应用。CUDA Toolkit 依赖特定版本的显卡驱动。
关系:显卡驱动是基础,CUDA Toolkit 构建其上。每个 CUDA 版本要求最低驱动版本(例如,CUDA 12.2 需驱动 ≥522.06)。驱动版本通常向后兼容,支持多个 CUDA 版本。
(2)宿主机级别 vs Docker 级别
A、宿主机级别
显卡驱动:必须安装在宿主机,管理物理 GPU。所有容器共享宿主机的驱动,无法在容器内独立安装。
NVIDIA Container Toolkit:宿主机工具,允许容器访问 GPU 和驱动。安装后,容器通过 --gpus 标志使用 GPU。
B、Docker 级别
CUDA Toolkit(或运行时):通常包含在 Docker 镜像中(如 nvidia/cuda:12.2.0-base-ubuntu22.04)。容器内的 CUDA 版本需与宿主机驱动兼容,但无需宿主机安装完整 CUDA Toolkit。
应用与模型:如 DeepSeek R1 的 KTransformers,运行在容器内,依赖容器镜像的 CUDA 环境。

步骤

1. 核对环境

Docker 仍因网络超时无法拉取 nvidia/cuda:10.1-devel-ubuntu20.04,尽管已配置国内镜像源。
验证网络连接:ping registry-1.docker.io ping不通。

2. 建立新的docker

hyt@user-H3C-UniServer-R4900-G5:/opt/deepseek$ docker run --gpus all -it \
  --name deepseek-step \
  -v /data/deepseek:/root/autodl-tmp \
  nvidia/cuda:12.4.0-base-ubuntu22.04 \
  bash
root@dd70e90a0c20:/# 

可以看到docker的root出来了。

3.

我们要对齐pdf的指令,同时要兼容可用的flash_attn:

/home/hyt/HYT/tools/flash_attn-2.5.8+cu118torch2.2cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

我们构建 opt/deepseek/ 作为本docker的挂载目录,所有的docker相关文件均在此文件夹下。要安装flash_attn,还需要先把东西复制过来路径下

cp /home/hyt/HYT/tools/flash_attn-2.5.8+cu118torch2.2cxx11abiTRUE-cp311-cp311-linux_x86_64.whl /opt/deepseek/flash_attn-2.5.8+cu118torch2.2cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

Ubuntu并发高速下载:

aria2c -x 16 -s 16 "https://files.pythonhosted.org/packages/56/be/76eaa36c9cd032d3b01b001e2c5a05943df75f26211f68fae79e62f87734/torch-2.9.1-cp311-cp311-manylinux_2_28_x86_64.whl" -o torch-2.9.1-cp311-cp311-manylinux_2_28_x86_64.whl

从宿主机copy到docker中:

docker cp /opt/deepseek/torch-2.9.1-cp311-cp311-manylinux_2_28_x86_64.whl deepseek-step:/root/autodl-tmp/

在装
requirments.txt 中要求torch >= 2.3.0,因此与已装 flash_attn 的要求相冲突,预估 flash_attn 需重装或重找whl文件。

安装过程中,Grok-4说,

AutoDL的坑就在这里:只有 /root/autodl-tmp 目录是持久盘,其他所有目录(包括 /root、/usr/local、虚拟环境默认位置)重启容器就全清空!
所以你现在的问题核心是:
虚拟环境(kt)建在/root/kt → 重启全没了 → 必须重装
假nvcc放/usr/local/cuda/bin → 重启也没了 → 如果要重新pip install又会卡

我擦,听到这个我脸都绿了。这实在是太坑爹了吧???
辛苦好几天安装的,重启就没了啊?
Grok-4给的解决方案:

# 1. 把虚拟环境迁到持久盘(只做一次)
rm -rf /root/kt
python -m venv /root/autodl-tmp/kt
source /root/autodl-tmp/kt/bin/activate

# 2. 重新装依赖(最后一次!)
pip install --upgrade pip setuptools wheel
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r /root/autodl-tmp/ktransformers/requirements.txt

# 3. 永久假nvcc脚本(每次启动容器后只跑一次这三行就行)
mkdir -p /usr/local/cuda/bin
tee /usr/local/cuda/bin/nvcc <<'EOF'
#!/bin/bash
echo "nvcc: NVIDIA (R) Cuda compiler driver"
echo "Copyright (c) 2005-2024 NVIDIA Corporation"
echo "Built on Mon_Apr_10_00:00:00_PDT_2023"
echo "Cuda compilation tools, release 12.1, V12.1.105"
EOF
chmod +x /usr/local/cuda/bin/nvcc

# 4. 安装ktransformers安装(最后一次!)
cd /root/autodl-tmp/ktransformers
python -m ktransformers.install_marlin --force_reinstall
pip install -e .

以后每次启动容器只敲这三行就永久好使:
source /root/autodl-tmp/kt/bin/activate
cd /root/autodl-tmp/ktransformers
python -m ktransformers.server --model_path /root/autodl-tmp/models/你的模型 --port 50000

大模型也全扔 /root/autodl-tmp/models 下,hf-cli下载时加 --local-dir /root/autodl-tmp/models/xxx
这样重启100次都不用再装任何东西,我自己就是这么干的,稳如老狗!快去迁虚拟环境,这才是根治方案。

狗日的,原来是grok-4以为我在装auto-ml,所以觉得会重启丢失,rubbish啊!
没有用原本pdf中的安装方法,用了别的,已经走得太远,不知道行不行得通了

pip install -e . --no-build-isolation
python -m ktransformers.install_marlin --force_reinstall

不行的话 只能重置docker再来一遍。

真的近docker重来了一遍。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐