跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

GPU技术交流论坛

  1. 主页
  2. 版块
  3. 知识交流
  4. 运维部署交流
  5. Ubuntu本地部署大模型环境指南

Ubuntu本地部署大模型环境指南

已定时 已固定 已锁定 已移动 运维部署交流
1 帖子 1 发布者 25 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    lanlanlu
    编写于 最后由 编辑
    #1

    Ubuntu本地部署各种大模型环境

    本教程基于:
    **Ubuntu Server 22.04.3 LTS
    Driver 550.144.03 / CUDA 12.4

    1. 系统配置

    1.1 root账户设置密码

    当前普通用户界面下输入命令,然后按提示两次输入密码即可。

    sudo passwd root
    

    1.2 SSH配置

    # 查看是否安装了SSH服务
    ps -ef | grep ssh 
    
    # 没有安装的话,执行下面语句
    sudo apt update                   # 先更新下资源列表
    sudo apt install openssh-server   # 安装openssh-server
    sudo ps -ef | grep ssh           # 查看是否安装成功
    sudo systemctl restart ssh       # 重新启动SSH服务 
    
    # 进入ssh配置文件
    sudo vim /etc/ssh/sshd_config
    

    PermitRootLogin是一个用于配置SSH服务器的选项。这个选项决定了是否允许root用户通过SSH直接登录到服务器。通常情况下,为了提高安全性,最好禁止root用户通过SSH直接登录,而是使用一个普通用户登录后再通过su或者sudo切换到root用户来执行需要特权的操作。这样可以降低系统受到攻击的风险。

    常见的PermitRootLogin选项取值包括:

    • yes:允许root用户通过SSH直接登录
    • no:禁止root用户通过SSH直接登录
    • without-password:允许root用户通过SSH密钥登录,但不允许使用密码登录

    按i进入编辑模式,找到#PermitRootLogin prohibit-password,默认是注释掉的。
    把PermitRootLogin without-password改为PermitRootLogin yes,注意PermitRootLogin without-password被注释掉了,要去掉注释。如果没有找到PermitRootLogin without-password,直接文件末尾添加PermitRootLogin yes即可。然后按esc,输入:wq保存并退出。

    1.3 重启sshd服务

    sudo systemctl restart ssh
    

    2. 安装Docker

    2.1 准备条件

    # 安装前先卸载操作系统默认安装的docker
    apt remove docker docker-engine docker.io containerd runc
    
    # 安装必要支持
    apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
    

    2.2 准备安装

    # 添加Docker官方GPG key(可能国内现在访问会存在问题)
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # 阿里源(推荐使用阿里的gpg KEY)
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # 添加apt源:
    # Docker官方源
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # 阿里apt源
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # 更新源
    apt update
    apt-get update
    

    2.3 安装Docker

    # 安装最新版本的Docker
    apt install docker-ce docker-ce-cli containerd.io
    # 等待安装完成
    
    # 查看Docker版本
    docker version
    
    # 查看Docker运行状态
    systemctl status docker
    

    3. 安装NVIDIA驱动

    3.1 更新系统

    # 确保系统已更新到最新版本
    apt update
    apt upgrade -y
    

    3.2 安装依赖项

    apt install -y build-essential dkms
    

    3.3 禁用Nouveau驱动

    Nouveau是开源的NVIDIA驱动,可能与官方驱动冲突。

    # 创建配置文件:
    vim /etc/modprobe.d/blacklist.conf
    # 添加以下内容:
    blacklist nouveau
    options nouveau modeset=0
    # 更新initramfs:
    update-initramfs -u
    # 重启服务器:
    reboot
    # 检查nouveau是否关闭成功,应当无输出
    lsmod | grep nouveau
    

    3.4 安装驱动

    3.4.1 在线安装

    apt install nvidia-driver-550 -y
    apt update
    # 安装完成后,重启服务器
    

    3.4.2 本地安装

    # 下载并安装NVIDIA驱动包
    # 下载的文件放在:/data/program/目录下
    cd /data/program
    dpkg -i nvidia-linux-grid-550_550.144.03_amd64.deb
    apt install -y cuda-drivers
    apt update
    # 安装完成后,重启服务器
    

    3.5 验证安装

    nvidia-smi
    

    4. 安装CUDA

    4.1 在线安装

    # 安装zlib1g库
    apt install zlib1g -y
    # 下载cuda
    wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
    # 安装cuda
    sh cuda_12.4.1_550.54.15_linux.run
    

    4.2 离线安装

    cd /data/program
    # 添加执行权限
    chmod +x cuda_12.4.0_550.54.14_linux.run
    # 执行脚本
    ./cuda_12.4.0_550.54.14_linux.run
    

    执行后要等一会加载,然后进入交互式界面,按如下步骤操作:

    • 提示已经存在驱动…选择continue
    • 阅读并接受协议,输入accept回车
    • 上下光标选中
      Driver
      列,按空格以取消勾选驱动,再选择Install回车
    • 等待安装完成

    4.3 更新环境

    # 在/root/.bashrc文件末尾输入:
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.4/lib64 
    export PATH=$PATH:/usr/local/cuda-12.4/bin 
    export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-12.4
    # 执行
    source /root/.bashrc
    # 验证
    nvcc --version
    systemctl status nvidia-persistenced
    

    5. Docker Nvidia部署

    5.1 安装NVIDIA Container Toolkit

    Docker默认不支持GPU,需先安装NVIDIA官方提供的容器工具包:

    # 添加NVIDIA仓库
    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
      
    apt update
    apt install -y nvidia-container-toolkit nvidia-container-runtime
    

    5.2 检查Docker默认运行时配置

    确保Docker的默认运行时为nvidia,编辑/etc/docker/daemon.json:

    {
      "default-runtime": "nvidia",
      "runtimes": {
        "nvidia": {
          "path": "nvidia-container-runtime",
          "runtimeArgs": []
        }
      }
    }
    

    重启Docker服务

    systemctl daemon-reload
    systemctl restart docker
    

    6. 部署modelscope下载模型

    #安装pip
    apt install python3-pip
    # 安装modelscope
    #官方源
    pip install modelscope
    #清华源
    pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 下载模型
    # 参考例子
    modelscope download --model Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ
    modelscope download --model Valdemardi/DeepSeek-R1-Distill-Qwen-32B-AWQ
    modelscope download --model Qwen/QwQ-32B-AWQ
    modelscope download --model Qwen/Qwen3-32B-AWQ
    modelscope download --model Qwen/Qwen2.5-VL-32B-Instruct-AWQ
    
    modelscope download --model Qwen/Qwen3-Reranker-0.6B
    
    # 如果不设置下载路径将默认保存在下面路径(user为实际用户名)
    # /home/user/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ
    # 我是root用户,是以下路径
    # /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ
    

    7. Xinference Docker部署

    7.1 安装Xinference

    7.1.1拉取镜像

    #Dockerhub
    docker pull xprobe/xinference:latest
    #阿里源
    docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:latest
    #1
    
    docker pull docker.1ms.run/xprobe/xinference:latest
    docker pull docker-pull.ygxz.in/xprobe/xinference:latest
    

    7.1.2运行docker

    docker run -d \
      --name xinference \
      --restart=always \
      -v /root/.xinference:/root/.xinference \
      -v /root/.cache/huggingface:/root/.cache/huggingface \
      -v /root/.cache/modelscope:/root/.cache/modelscope \
      -v /root/.xinference/log:/root/models/logs \
      -e VLLM_WORKER_MULTIPROC_METHOD=spawn \
      -e HF_ENDPOINT=https://hf-mirror.com \
      -p 9997:9997 \
      --shm-size=16g \
      --gpus all \
      --ipc=host \
      xprobe/xinference:latest \
      xinference-local -H 0.0.0.0 --log-level debug
    

    OAuth2 系统(待更新)

    参考配置文件

    # 大佬的配置
    xinference launch --model-name qwen2.5-instruct --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 72 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --model-path /root/models/Qwen2.5-72B-Instruct-AWQ --tensor_parallel_size 4 --gpu_memory_utilization 0.85 --max_model_len 16384 --block_size 32 --dtype half --disable_custom_all_reduce true
    
    # QWQ-AWQ
    xinference launch --model-name QwQ-32B --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 32 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ --block_size 32 --gpu_memory_utilization 0.85 --max_model_len 40960 --tensor_parallel_size 4 --dtype half
    
    #DeepSeek-R1-Distill-Llama-70B
    xinference launch --model-name deepseek-r1-distill-llama --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 70 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ --reasoning-content false --block_size 32 --gpu_memory_utilization 0.85 --max_model_len 16384 --tensor_parallel_size 4 --dtype half
    
    #DeepSeek-R1-Distill-Qwen-32B
    xinference launch --model-name deepseek-r1-distill-qwen --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 32 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Valdemardi/DeepSeek-R1-Distill-Qwen-32B-AWQ --reasoning-content false --block_size 32 --gpu_memory_utilization 0.8 --max_model_len 40960 --tensor_parallel_size 4 --dtype half
    
    xinference launch --model-name bge-m3 --model-type embedding --replica 1
    
    

    查看日志

    # 查看日志
    docker logs -f xinference
    

    8. Lmdeploy部署

    8.1 Docker部署(推荐)

    8.1.1 拉取镜像

    docker pull openmmlab/lmdeploy:latest
    

    8.1.2 启动镜像

    参数详解
    参数 值 说明
    --model-name Qwen/QwQ-32B-AWQ 服务中模型名称
    --model-format awq 指定模型格式为AWQ量化
    --tp 4 张量并行(需要4块GPU)
    --server-port 8080 服务端口号
    --api-keys llm2025 API访问密钥
    --log-level INFO 日志记录级别
    --cache-max-entry-count 0.75 KV Cache缓存比例(0~1之间)
    --max-batch-size 32 最大批处理大小
    --session-len 12000 最大会话长度(tokens数)
    --quant-policy 8 KV量化策略:4表示int4量化,8表示int8量化
    Qwen/QwQ-32B
    docker run -d\
        --it \
        --name lmdeploy-QwQ-32B-AWQ \
        --gpus all \
        --shm-size 16g \
        -v /root/.cache/modelscope/:/root/.cache/modelscope/ \
        -v /root/.cache/huggingface/:/root/.cache/huggingface/ \
        -p 23333:23333 \
        --ipc=host \
        openmmlab/lmdeploy:latest \
        lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ \
        --model-name Qwen/QwQ-32B-AWQ \
        --model-format awq \
        --tp 4 \
        --server-port 23333 \
        --api-keys llm2025 \
        --log-level INFO \
        --cache-max-entry-count 0.8 \
        --max-batch-size 32 \
        --session-len 16384 \
        --quant-policy 8 \
    
    Qwen/Qwen3-32B
    docker run -d\
        --it \
        --name lmdeploy-Qwen3-32B-AWQ \
        --gpus all \
        --shm-size 16g \
        -v /root/.cache/modelscope/:/root/.cache/modelscope/ \
        -v /root/.cache/huggingface/:/root/.cache/huggingface/ \
        -p 23333:23333 \
        --ipc=host \
        openmmlab/lmdeploy:latest \
        lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen3-32B-AWQ \
        --model-name Qwen/Qwen3-32B-AWQ \
        --model-format awq \
        --tp 4 \
        --server-port 23333 \
        --api-keys llm2025 \
        --log-level INFO \
        --cache-max-entry-count 0.75 \
        --max-batch-size 64 \
        --session-len 131072 \
        --quant-policy 8 \
    
    Qwen/Qwen2.5-VL-32B-Instruct-AWQ
    docker run -d\
        --it \
        --name lmdeploy-Qwen2.5-VL-32B-AWQ \
        --gpus all \
        --shm-size 16g \
        -v /root/.cache/modelscope/:/root/.cache/modelscope/ \
        -v /root/.cache/huggingface/:/root/.cache/huggingface/ \
        -p 23333:23333 \
        --ipc=host \
        openmmlab/lmdeploy:latest \
        lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen2___5-VL-32B-Instruct-AWQ \
        --model-name Qwen/Qwen2.5-VL-32B-AWQ \
        --model-format awq \
        --tp 4 \
        --server-port 23333 \
        --api-keys llm2025 \
        --log-level INFO \
        --cache-max-entry-count 0.2 \
        --max-batch-size 32 \
        --min-pixels 256 * 28 * 28
        --max-pixels 1280 * 28 * 28 \
        --session-len 32768 \
        --quant-policy 8 \
    

    8.2. conda环境下部署

    8.2.1 安装miniconda环境

    # 下载miniconda3
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    # 执行安装
    bash Miniconda3-latest-Linux-x86_64.sh
    

    阅读许可协议并按Enter,然后输入yes接受许可协议。安装过程中,建议选择默认路径(如~/miniconda3)。
    初始化环境变量:输入yes自动将Miniconda添加到~/.bashrc。

    # 运行脚本
    source ~/.bashrc
    # 安装完成后,重新启动终端,或者手动执行下面
    source ~/miniconda3/bin/activate
    # 完成后检测版本号
    conda --version
    # 成功后升级conda文件
    conda update conda 
    

    8.2.2 安装partial_json_parser(可选)

    # 注意,如果出现ModuleNotFoundError: No module named 'partial_json_parser'报错,手动安装即可
    pip install partial_json_parser
    

    8.2.3 conda中部署Lmdeploy

    # 创建conda环境
    conda create -n lmdeploy python=3.11 -y
    # 在环境中安装lmdeploy
    conda activate lmdeploy
    # 官方pip下载
    pip install lmdeploy
    # 清华镜像下载
    pip install lmdeploy -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 华为镜像下载
    pip install lmdeploy -i https://mirrors.huaweicloud.com/repository/pypi/simple/
    

    8.2.4 加载模型

    # QWQ
    lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ \
      --model-name Qwen/QwQ-32B-AWQ \
      --model-format awq \
      --tp 4 \
      --server-port 23333 \
      --api-keys llm2025 \
      --log-level INFO \
      --cache-max-entry-count 0.8 \
      --max-batch-size 32 \
      --session-len 16384 \
    
    # Qwen/Qwen2.5-72B-Instruct
    lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen2.5-72B-Instruct-AWQ \
      --model-name Qwen/Qwen2.5-72B-Instruct-AWQ \
      --model-format awq \
      --tp 4 \
      --server-port 23333 \
      --api-keys llm2025 \
      --log-level INFO \
      --cache-max-entry-count 0.8 \
      --max-batch-size 32 \
      --session-len 16384 \
      --quant-policy 8
    
    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门
    • 世界
    • 用户
    • 群组