news 2026/4/17 19:23:59

DeepSeek-R1-Distill-Qwen-1.5B自动化部署:Shell脚本编写实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek-R1-Distill-Qwen-1.5B自动化部署:Shell脚本编写实例

DeepSeek-R1-Distill-Qwen-1.5B自动化部署:Shell脚本编写实例

1. 引言:让模型部署像启动音乐播放器一样简单

你有没有这样的经历?好不容易调好一个AI模型,结果每次重启服务器都要重新安装依赖、下载模型、配置路径,重复操作让人头大。今天我们要解决的就是这个问题——把 DeepSeek-R1-Distill-Qwen-1.5B 的部署变成一键启动

这个模型不一般:它是在 Qwen-1.5B 基础上,用 DeepSeek-R1 的强化学习蒸馏数据训练出来的推理专家,特别擅长数学题、写代码和逻辑推演。跑起来需要 GPU 支持(CUDA),但只要配置一次,就能永久复用。

本文会带你从零写一个完整的 Shell 脚本,实现:

  • 自动检查环境
  • 智能安装依赖
  • 后台启动服务
  • 日志追踪与安全关闭

学完你不仅能部署这个模型,还能套用到其他 AI 项目中。咱们的目标是:以后只需要敲一行命令./deploy.sh,整个服务就跑起来

2. 环境准备与依赖管理

2.1 系统要求与前置判断

在写脚本之前,先明确几个关键点:

  • Python 版本必须 ≥3.11
  • CUDA 需要 12.8(兼容性最好)
  • 核心库:torch,transformers,gradio

我们的 Shell 脚本第一步就是“自我诊断”——自动检测当前环境是否满足条件。

#!/bin/bash echo " 正在检查系统环境..." # 检查 Python 版本 PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}') if [[ "$PYTHON_VERSION" < "3.11" ]]; then echo "❌ 错误:Python 版本过低,当前为 $PYTHON_VERSION,需要 3.11 或更高" exit 1 else echo " Python 版本符合要求: $PYTHON_VERSION" fi # 检查 CUDA 是否可用 if ! command -v nvidia-smi &> /dev/null; then echo "❌ 未检测到 NVIDIA 显卡驱动" exit 1 else echo " NVIDIA 驱动已安装" fi # 检查 GPU 上是否有足够的显存(至少 6GB) GPU_MEM=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits -i 0) if [ "$GPU_MEM" -lt 6144 ]; then echo " 显存不足($GPU_MEM MB),建议使用更大显存的 GPU" read -p "是否继续在 CPU 模式下运行?(y/N): " choice if [[ ! "$choice" =~ ^[Yy]$ ]]; then exit 1 fi export DEVICE="cpu" else export DEVICE="cuda" echo " 检测到充足显存: ${GPU_MEM}MB,将使用 GPU 加速" fi

这段脚本做了三件事:

  1. 检查 Python 版本
  2. 确认有 NVIDIA 显卡支持
  3. 判断显存是否够用,不够则提示切换 CPU 模式

这样即使换一台机器,也能自动适应。

2.2 自动化依赖安装

接下来是安装 Python 包。我们不想每次都重装,所以加个判断:如果已经装了且版本正确,就跳过。

# 安装依赖函数 install_dependencies() { echo "📦 开始安装 Python 依赖..." # 创建虚拟环境避免污染全局 if [ ! -d "venv" ]; then python3 -m venv venv fi source venv/bin/activate # 检查是否已安装并版本达标 PIP_LIST=$(pip list) if echo "$PIP_LIST" | grep -q "torch" && pip show torch | grep -q "Version: 2.9.1"; then echo " torch 已安装" else pip install torch==2.9.1 --index-url https://download.pytorch.org/whl/cu121 fi if echo "$PIP_LIST" | grep -q "transformers" && pip show transformers | grep -q "Version: 4.57.3"; then echo " transformers 已安装" else pip install transformers==4.57.3 fi if echo "$PIP_LIST" | grep -q "gradio" && pip show gradio | grep -q "Version: 6.2.0"; then echo " gradio 已安装" else pip install gradio==6.2.0 fi echo " 所有依赖安装完成" }

这里用了虚拟环境venv来隔离包,防止和其他项目冲突。同时指定了 PyTorch 的 CUDA 12.1 版本源,确保 GPU 支持。

3. 模型加载与服务启动

3.1 模型路径智能识别

模型默认缓存在/root/.cache/huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-1___5B,但不同用户可能路径不同。我们可以让脚本自动查找或引导下载。

# 设置模型路径 MODEL_DIR="/root/.cache/huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B" if [ ! -d "$MODEL_DIR" ]; then echo " 模型未找到,位于: $MODEL_DIR" read -p "是否从 Hugging Face 下载?(y/N): " download_choice if [[ "$download_choice" =~ ^[Yy]$ ]]; then huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir $MODEL_DIR else echo "请手动下载模型后重试" exit 1 fi else echo " 模型已就位: $MODEL_DIR" fi

这样既支持本地已有模型快速启动,也提供一键下载选项。

3.2 编写 Web 服务入口文件

我们需要一个app.py文件作为 Gradio 接口。下面是简化版示例:

# app.py import os from transformers import AutoTokenizer, AutoModelForCausalLM import gradio as gr import torch # 使用前面脚本设置的设备 device = os.getenv("DEVICE", "cuda") tokenizer = AutoTokenizer.from_pretrained("/root/.cache/huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B") model = AutoModelForCausalLM.from_pretrained( "/root/.cache/huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B", torch_dtype=torch.float16, device_map="auto" if device == "cuda" else None, local_files_only=True ).eval() def generate_text(prompt): inputs = tokenizer(prompt, return_tensors="pt").to(device) outputs = model.generate( **inputs, max_new_tokens=2048, temperature=0.6, top_p=0.95, do_sample=True ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response.replace(prompt, "").strip() gr.Interface( fn=generate_text, inputs=gr.Textbox(label="输入你的问题"), outputs=gr.Markdown(label="回复"), title="🧠 DeepSeek-R1-Distill-Qwen-1.5B 助手", description="支持数学推理、代码生成与复杂逻辑分析" ).launch(server_port=7860, share=False)

这个脚本能根据环境变量自动选择 CPU/GPU,并限制最大 token 数为 2048,温度设为推荐值 0.6。

3.3 一键后台启动服务

现在把所有步骤整合进主脚本,实现“一键部署”。

# 主程序逻辑 main() { echo " 开始部署 DeepSeek-R1-Distill-Qwen-1.5B 服务..." # 激活环境 source venv/bin/activate # 检查端口是否被占用 if lsof -i:7860 > /dev/null; then echo "❌ 端口 7860 已被占用,请关闭其他服务" ps aux | grep 7860 exit 1 fi # 启动服务并输出日志 nohup python3 app.py > /tmp/deepseek_web.log 2>&1 & # 获取进程 ID 并保存 echo $! > /tmp/deepseek_pid.txt echo " 服务已启动!" echo " 访问地址: http://localhost:7860" echo "📄 日志路径: /tmp/deepseek_web.log" echo " 使用 'tail -f /tmp/deepseek_web.log' 查看实时日志" } # 调用主函数 main

这一步完成了真正的“自动化”:自动检查端口、后台运行、记录 PID 方便后续管理。

4. 服务管理与运维脚本增强

4.1 添加停止与重启功能

光能启动还不够,还得能优雅关闭。我们在脚本里加入子命令支持。

# 停止服务 stop_server() { if [ -f "/tmp/deepseek_pid.txt" ]; then PID=$(cat /tmp/deepseek_pid.txt) if ps -p $PID > /dev/null; then kill $PID rm /tmp/deepseek_pid.txt echo "🛑 服务已停止 (PID: $PID)" else echo " 进程不存在,清理残留 PID 文件" rm /tmp/deepseek_pid.txt fi else echo "ℹ 未发现运行中的服务" fi } # 重启服务 restart_server() { stop_server sleep 2 main }

然后通过参数调用:

case "$1" in start|"" ) main ;; stop ) stop_server ;; restart ) restart_server ;; logs ) tail -f /tmp/deepseek_web.log ;; * ) echo "用法: $0 [start|stop|restart|logs]" exit 1 ;; esac

现在你可以这样操作:

  • ./deploy.sh→ 启动
  • ./deploy.sh stop→ 停止
  • ./deploy.sh restart→ 重启
  • ./deploy.sh logs→ 实时看日志

4.2 故障自检与容错处理

再加一点“健壮性”:比如网络断了重试、磁盘满了预警。

# 检查磁盘空间 check_disk_space() { USAGE=$(df /root | tail -1 | awk '{print $5}' | sed 's/%//') if [ $USAGE -gt 90 ]; then echo "🚨 警告:根分区使用率已达 ${USAGE}%,可能影响模型加载" read -p "是否继续?(y/N): " confirm [[ ! "$confirm" =~ ^[Yy]$ ]] && exit 1 fi }

还可以加超时机制防止卡死:

# 设置最长执行时间(30分钟) export TIMEOUT=1800 { # 主流程放在这里 } & PID=$! ( sleep $TIMEOUT if kill -0 $PID 2>/dev/null; then echo "⏰ 超时 ($TIMEOUT 秒),强制终止" kill $PID fi ) &

5. Docker 化部署方案优化

虽然可以直接运行脚本,但在生产环境中更推荐容器化。我们改进之前的 Dockerfile,让它更高效。

5.1 多阶段构建减少体积

# Stage 1: 构建依赖 FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 AS builder RUN apt-get update && apt-get install -y \ python3.11 \ python3-pip \ && rm -rf /var/lib/apt/lists/* WORKDIR /build COPY requirements.txt . RUN pip3 download -r requirements.txt --dest ./wheels # Stage 2: 最终镜像 FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y \ python3.11 \ python3-pip \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=builder /build/wheels ./wheels RUN pip3 install ./wheels/*.whl COPY app.py . # 挂载模型目录 VOLUME ["/root/.cache/huggingface"] EXPOSE 7860 CMD ["python3", "app.py"]

配合requirements.txt

torch==2.9.1+cu121 transformers==4.57.3 gradio==6.2.0

5.2 容器启动脚本封装

创建start_container.sh

#!/bin/bash docker build -t deepseek-r1-1.5b:latest . docker run -d --gpus all \ -p 7860:7860 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -e DEVICE=cuda \ --name deepseek-web \ deepseek-r1-1.5b:latest echo "容器已启动,访问 http://localhost:7860"

这样就把整个部署流程彻底标准化了。

6. 总结:打造可复用的 AI 部署模板

我们一步步实现了 DeepSeek-R1-Distill-Qwen-1.5B 的全自动化部署方案:

  • 环境自检:自动判断 Python、GPU、显存
  • 依赖管理:虚拟环境 + 版本锁定
  • 模型处理:本地优先,缺失则提示下载
  • 服务控制:支持 start/stop/restart/logs
  • Docker 封装:便于跨平台迁移

这套脚本不仅可以用于这个模型,稍作修改就能适配其他基于 Transformers 的 LLM。关键是掌握了“把重复劳动交给机器”的思路。

未来你还可以继续扩展:

  • 加入 HTTPS 支持
  • 集成 Prometheus 监控
  • 添加 API 密钥认证
  • 实现多模型热切换

自动化不是一蹴而就的,但每写一个脚本,你就离“躺着跑 AI”更近一步。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 23:25:46

Glyph支持分布式部署吗?多卡并行处理方案探讨

Glyph支持分布式部署吗&#xff1f;多卡并行处理方案探讨 1. Glyph&#xff1a;视觉推理的新范式 你有没有遇到过这样的问题&#xff1a;大模型明明能理解内容&#xff0c;但一碰到几千字的长文档就“失明”了&#xff1f;传统语言模型受限于上下文长度&#xff0c;面对合同、…

作者头像 李华
网站建设 2026/4/17 17:24:56

Unsloth多GPU训练尝试:加速效果实测记录

Unsloth多GPU训练尝试&#xff1a;加速效果实测记录 1. 实验背景与目标 最近在使用Unsloth进行大模型微调时&#xff0c;一直听说它在单卡上表现非常出色——号称“2倍速度、70%显存降低”。但实际项目中&#xff0c;我们往往需要更大的batch size或更复杂的任务&#xff0c;…

作者头像 李华
网站建设 2026/4/16 10:42:36

编曲配器软件哪个好?音乐人对比传统软件与AI编曲软件

在音乐创作领域&#xff0c;编曲配器软件的选择至关重要&#xff0c;它直接影响着音乐作品的质量和创作效率。传统的编曲配器软件&#xff0c;如FL Studio、Ableton Live、Cubase等&#xff0c;凭借其丰富的功能和强大的专业性&#xff0c;在过去很长一段时间里一直是音乐人的首…

作者头像 李华
网站建设 2026/4/16 10:42:37

Llama3-8B与Phi-3对比:移动端适配性部署评测

Llama3-8B与Phi-3对比&#xff1a;移动端适配性部署评测 1. 引言&#xff1a;轻量大模型的落地之争 当前&#xff0c;AI 模型正从“越大越强”转向“够用就好”的实用主义阶段。尤其在移动端、边缘设备和消费级显卡场景下&#xff0c;如何在性能与资源之间取得平衡&#xff0…

作者头像 李华
网站建设 2026/4/16 10:42:39

YOLOv9来了!这个官方镜像让目标检测变得超级简单

YOLOv9来了&#xff01;这个官方镜像让目标检测变得超级简单 你是不是也经历过这样的场景&#xff1a;好不容易找到一个看起来很厉害的目标检测模型&#xff0c;结果光是配置环境就花了整整两天&#xff1f;CUDA版本不对、PyTorch装不上、依赖冲突报错满屏飞……还没开始训练&…

作者头像 李华
网站建设 2026/4/16 10:42:43

Live Avatar参数详解:从prompt到num_clip的调优手册

Live Avatar参数详解&#xff1a;从prompt到num_clip的调优手册 1. 引言&#xff1a;Live Avatar阿里联合高校开源的数字人模型 你有没有想过&#xff0c;只需要一张照片和一段音频&#xff0c;就能让静态人物“活”起来&#xff1f;阿里联合多所高校推出的Live Avatar项目&a…

作者头像 李华