DeepSeek-R1-Distill-Qwen-70B 模型部署

1、模型部署脚本:

#!/bin/bash

# 参数校验,必须传两个参数,第一个参数需要是一个目录,同时目录不为空,第二个参数是使用的GPU数量
if [ $# -ne 2 ]; then
  echo "参数错误,请输入模型存放位置和需要使用的加速卡数量"
  echo "Example,sh install_gpu_for_model.sh /data/DeepSeek-R1-Distill-Qwen-70B 8"
  exit 1
fi
# 定义变量
MODEL_PATH="$1"
GPU_NUM=$2
MODEL_NAME=$(echo "$1" | sed 's/\/$//' | awk -F"/" '{print $NF}')
TAR_FILE="vllm0.8.5-torch2.7.0.tar"
IMAGE_NAME="vllm:0.8.5-torch2.7.0"
CONTAINER_NAME="vllm-$MODEL_NAME"
INSTALL_IP=$(hostname -I | awk '{print $1}')
CONTAINER_MODEL_PATH="/root/vllm/$MODEL_NAME"
LOCAL_LOG_DIR="/opt/gridview/vllm"
LOG_DIR="/root/vllm/logs"
LOG_FILE="$LOG_DIR/$CONTAINER_NAME-$(date +%Y%m%d_%H%M%S).log"

# 步骤 1: 检查tar包是否存在,若存在则加载镜像
# 检查tar包是否存在
if [ -f "$TAR_FILE" ]; then
  echo "Tar包存在,正在检查镜像是否已存在..."
  # 检查镜像是否已存在
  if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^$IMAGE_NAME$"; then
    echo "镜像 $IMAGE_NAME 已经存在,跳过加载镜像。"
  else
    echo "镜像不存在,正在加载镜像..."
    if ! docker load -i $TAR_FILE; then
      echo "加载镜像失败"
      exit 1
    fi
  fi
else
  echo "Tar包文件不存在,"
  # 检查镜像是否已存在
  if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^$IMAGE_NAME$"; then
    echo "镜像 $IMAGE_NAME 已经存在,跳过加载镜像。"
  else
    echo "Tar包文件和镜像都不存在,请检查文件路径:$TAR_FILE"
    exit 1
  fi
fi

# 步骤 2: 判断模型文件夹是否存在
if [ ! -d "$MODEL_PATH" ]; then
  echo "模型文件夹 $MODEL_PATH 不存在,请检查路径!"
  exit 1
fi

# 步骤 3: 检查容器是否存在,如果存在则停止并删除容器;如果不存在则启动新容器
# 检查容器是否存在
if [ "$(docker ps -a -q -f name=$CONTAINER_NAME)" ]; then
  echo "容器 $CONTAINER_NAME 已存在,正在停止并删除容器..."
  docker rm -f $CONTAINER_NAME
else
  echo "容器 $CONTAINER_NAME 不存在,正在创建并启动新容器..."
fi

# 启动新的容器
NV_GPU=$GPU_NUM docker run -dit \
  --shm-size 100g \
  --ulimit memlock=-1 \
  --privileged \
  --group-add video \
  --ipc=host \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  -v $MODEL_PATH:$CONTAINER_MODEL_PATH \
  -v $LOCAL_LOG_DIR:$LOG_DIR \
  -p 8015:8000 \
  --name $CONTAINER_NAME \
  $IMAGE_NAME \
  /bin/bash

# 步骤 4: 检查容器是否存在,若不存在报错,若存在则进入容器
echo "正在检查容器 $CONTAINER_NAME 是否存在..."
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
  echo "容器 $CONTAINER_NAME 存在..."
else
  echo "容器 $CONTAINER_NAME 不存在,无法进入容器。"
  exit 1
fi

# 步骤 5: 容器内检查模型文件是否存在,若存在则运行模型
echo "正在检查容器内模型文件路径 $CONTAINER_MODEL_PATH..."
if docker exec $CONTAINER_NAME bash -c "[ -d \"$CONTAINER_MODEL_PATH\" ]"; then
  echo "模型文件存在,正在运行模型..."
  # 修改后的关键部分:激活conda环境后启动服务
  if docker exec $CONTAINER_NAME bash -c "\
          export VLLM_USE_V1=1 && \
          export VLLM_WORKER_MULTIPROC_METHOD=spawn && \
          export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 && \
          export VLLM_HOST_IP=$(hostname -I | awk '{print $1}') && \
          export VLLM_HOST_IP && echo $VLLM_HOST_IP && \
          nohup vllm serve $CONTAINER_MODEL_PATH \
          --trust-remote-code \
          --served-model-name $MODEL_NAME \
          --gpu-memory-utilization 0.9 \
          --tensor-parallel-size 8 \
          --host 0.0.0.0 \
          --port 8000 \
          --enforce-eager \
          --enable-auto-tool-choice \
          --tool-call-parser llama3_json \
          --enable-reasoning \
          --reasoning-parser deepseek_r1 \
          > $LOG_FILE 2>&1 & "; then
    echo "模型启动,日志输出到路径: $LOCAL_LOG_DIR,待日志中模型启动成功后,您可以使用此地址进行调用http://$INSTALL_IP:8015/v1"
  else
    echo "模型启动失败"
    exit 1
  fi
else
  echo "模型文件挂载失败,请检查容器挂载路径:$MODEL_PATH"
  exit 1
fi

2、启动模型服务

sh install_gpu_for_model.sh /public/model/DeepSeek-R1-Distill-Llama-70B/ 8
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容