AI系列1-1: 离线部署通义大模型及持续修正-RedHat+NVIDA GPU

发布于:2025-06-26 ⋅ 阅读:(21) ⋅ 点赞:(0)

[题记]2025/6/21-6/22 两天辛苦的成果 ,有的是靠回忆写的,欢迎指正

1.环境基础

   Redhat

        查看redhat版本

         cat /etc/redhat-release     7.9 Maipo

  docker和docker compose安装

参考

https://zhuanlan.zhihu.com/p/14648196830

docker下载地址

https://download.docker.com/linux/static/stable/x86_64/

docker-compose下载地址

https://github.com/docker/compose/releases/tag/v2.37.1

安装过程

考虑到很多公司禁止使用知乎,再复制一下

(1)将docker-26.0.0.tgz压缩包与docker-compose-linux-x86_64上传到 /tmp 目录下

(2)解压docker-26.0.0.tgz压缩包并复制到/usr/bin/路径

tar -zxvf docker-*.tgz

sudo cp docker/* /usr/bin/

(3)对docker-compose-linux-x86_64文件重命名并添加可执行权限

mv docker-compose-* docker-compose

chmod +x docker-compose

(4)将docker-compose复制到/usr/bin并查看版本

sudo cp docker-compose /usr/bin/

docker-compose version

(5)创建docker.service文件

cd /etc/systemd/system/

touch docker.service

文件内容

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target


[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity
TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s


[Install]

WantedBy=multi-user.target

(7)添加可执行权限并加载

sudo chmod +x /etc/systemd/system/docker.service

sudo systemctl daemon-reload 

(8)启动docker并查看状态

sudo systemctl start docker

sudo systemctl status docker

(9)设置开机启动并查看版本

sudo systemctl enable docker.service

docker -v

安装NVIDIA Container Toolkit

NVIDIA 驱动版本确认---非必须

        运行 nvidia-smi --query-gpu=name,driver_version --format=csv 检查NVIDIA 驱动版本。

      -----我的是525

     NVIDIA 驱动版本 525(R525)NVIDIA Container Toolkit 的版本之间没有严格的绑定关系,但需要确保驱动版本和 Toolkit 的 CUDA 版本兼容。

  • NVIDIA 驱动 525 支持 CUDA 12.0 及以下版本(如 CUDA 11.8、11.7 等)。

   nvidia-smi    查看是12

离线安装包准备

  • Debian/Ubuntu:使用 .deb 包。

  • RHEL/CentOS:使用 .rpm 包。

  • 系统架构:通常为 x86_64(64位)

1)在联网的 RHEL/CentOS  7.9机器上添加 NVIDIA 仓库:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

2)安装 yumdownloader 工具

sudo yum install -y yum-utils

创建个文件夹存放

mkdir -p ~/nvidia-container-toolkit-offline
cd ~/nvidia-container-toolkit-offline

3)下载 .rpm 包及其依赖 

sudo yumdownloader --resolve --destdir . nvidia-container-toolkit

    安装

    1).rpm

    cd /tmp/nvidia-container-toolkit-offline
    sudo yum localinstall -y *.rpm

    注意可能会报错:

    error:Failed dependencies:

               libseccomp.so.2()(64bit) is needed by 

    注意这个不用额外去下载,因为一般redhat自带,只是默认没有安装

    sudo  yum install  libseccomp  即可一般都是大于 2版本的

    验证

    //第一行不知道需不需要
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker


    新建nvidia-container-toolkit.repo文件

    文件名称:nvidia-container-toolkit.repo
    内容:

        

    [nvidia-container-toolkit]
    name=nvidia-container-toolkit
    baseurl=https://nvidia.github.io/libnvidia-container/stable/rpm/$basearch
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    
    [nvidia-container-toolkit-experimental]
    name=nvidia-container-toolkit-experimental
    baseurl=https://nvidia.github.io/libnvidia-container/experimental/rpm/$basearch
    repo_gpgcheck=1
    gpgcheck=0
    enabled=0
    gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    

    需要放置到:

        /etc/yum.repos.d/

    要是没有权限,可以使用  sudo vim

    可选:sudo dnf-config-manager --enable nvidia-container-toolkit-experimental

    把nvidia配置给docker

    前提是已经完成上面3步

    sudo nvidia-ctk runtime configure --runtime=docker

    sudo systemctl restart docker

    参照

    https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation

    最终验证

    下载unbuntu镜像验证

    在有网的环境:

             docker pull ubuntu:latest

              docker save -o ubuntu_latest.tar ubuntu:latest

              将生成的 ubuntu_latest.tar 文件拷贝到目标离线机器上

               docker load -i ubuntu_latest.tar

    验证语句

    sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

    输出类似于

    报错

       could not select device driver "" with capabilities:: [gpu]

    是NVIDIA Container Toolkit没有安装好

      再次确认是不是这几个文件,我的下载分享里面有

    再次执行  sudo yum localinstall -y *.rpm

    可选

    可选:设置默认 runtime 为 nvidia(可选)
    编辑 /etc/docker/daemon.json(创建文件如果不存在):
    
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }

    报错

    1.注册nvidia  真人认证报错

    Validator failed to load, please check your browser settings, such as ad blockers.

    需要使用ipv4

    2.Ollama安装

    在线下载

    docker pull ollama/ollama:latest

    docker save -o ollama_latest.tar ollama/ollama:latest     下载不到的留言给我

    本地docker home验证

     

    上传到离线电脑,进入存放tar文件的目录

     sudo docker load -i ollama_latest.tar

          docker run -d -v ollama:/root/.ollama -p 11434:11434 ollama/ollama:latest

    -v ollama:/root/.ollama: 将名为 ollama 的 Docker 卷挂载到容器内部的 /root/.ollama 路径。这意味着任何写入容器内该路径的数据都会被存储在 Docker 卷 ollama 中,从而允许数据持久化并可在其他容器中使用

    拷贝出来到windows 桌面

    3.千问

    下载qianwen14

     我是进入本地docker home的docker 内部执行 :

           ollama pull qwen:14b

    将下载的千问模型导出到本地

    linux:     docker cp ollama:/root/.ollama/models /path/to/local/directory

    因为我是用windows上的docker home下载的,所以运行cmd并输入以下内容就可以拷贝到桌面

    docker cp boring_ride:/root/.ollama/models C:/Users/%USERNAME%/Desktop/ollama_models

     下载完成后的文件夹

     上传到远程计算机

    把容器外的文件copy到容器内root/.ollama/models目录下

    1)copy manifests文件夹 到容器内: 注意没有双引号

        sudo docker  cp  xxx/manifests/  容器ID:/root/.ollama/models/

    2)同理copy blobs文件夹

       如果想进到容器去看,可以sudo docker exec -it   dockerID   /bin/sh

        可以用ls查看文件夹找到root文件夹,进入root文件夹可以用 ls  -la  看到.llama这种隐藏式文件夹

    3)重启docker服务:

    4)验证:   在宿主机内执行:   curl http://localhost:11434/api/tags

         会输出 models信息即安装成功,注意记下model 名称

    postman调用

    POST     http://ip:11434/api/generate

                   选择Body json

                    参数

                          {

                          "models": "qwen:14b",

                          "prompt":  "请描述量子力学"

                          }


    网站公告

    今日签到

    点亮在社区的每一天
    去签到