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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1198805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最大支持多少张批量处理?系统限制说明

最大支持多少张批量处理&#xff1f;系统限制说明 1. 批量处理能力解析 你是不是也遇到过这样的情况&#xff1a;手头有一堆照片需要转成卡通风格&#xff0c;一张张上传太麻烦&#xff0c;效率低得让人抓狂&#xff1f;这时候&#xff0c;批量处理功能就成了你的救星。但问题…

Z-Image-Turbo自动化生成,Python脚本调用示例

Z-Image-Turbo自动化生成&#xff0c;Python脚本调用示例 你是否还在手动点击UI界面生成图片&#xff1f;每次调整提示词都要重新打开浏览器、输入参数、等待加载&#xff1f;如果你已经熟悉了Z-Image-Turbo的基本使用&#xff0c;是时候迈出下一步&#xff1a;用Python脚本实…

批量处理音频文件?FSMN VAD未来功能抢先了解

批量处理音频文件&#xff1f;FSMN VAD未来功能抢先了解 1. FSMN VAD&#xff1a;不只是语音检测&#xff0c;更是效率革命 你有没有遇到过这种情况&#xff1a;手头有几十个会议录音、电话访谈或课堂音频&#xff0c;需要从中提取出有效的说话片段&#xff1f;传统方式要么靠…

YOLO26评估指标解读:mAP、precision、recall查看方法

YOLO26评估指标解读&#xff1a;mAP、precision、recall查看方法 在目标检测模型的实际落地中&#xff0c;训练完一个YOLO26模型只是第一步&#xff0c;真正决定它能否投入使用的&#xff0c;是评估结果是否可信、指标是否达标、问题是否可定位。很多新手跑通了训练流程&#…

Z-Image-Turbo输出格式控制:PNG/JPG切换与质量压缩参数详解

Z-Image-Turbo输出格式控制&#xff1a;PNG/JPG切换与质量压缩参数详解 Z-Image-Turbo 是一款高效的图像生成模型&#xff0c;其 UI 界面简洁直观&#xff0c;专为提升用户操作体验设计。界面左侧为参数设置区&#xff0c;包含图像尺寸、生成模式、输出格式选择、压缩质量调节…

Live Avatar sample_solver参数切换:不同求解器效果对比

Live Avatar sample_solver参数切换&#xff1a;不同求解器效果对比 1. Live Avatar阿里联合高校开源的数字人模型 Live Avatar是由阿里巴巴与多所高校联合推出的开源数字人生成项目&#xff0c;能够基于文本、图像和音频输入生成高质量的虚拟人物视频。该模型结合了大规模视…

效果惊艳!bert-base-chinese打造的新闻分类案例展示

效果惊艳&#xff01;bert-base-chinese打造的新闻分类案例展示 1. 引言&#xff1a;为什么中文新闻分类需要BERT&#xff1f; 每天都有成千上万条新闻在互联网上传播&#xff0c;如何快速、准确地将这些内容归类&#xff0c;是媒体平台、舆情系统和推荐引擎面临的核心挑战。…

软件需求:编曲需要的软件,音乐人首选AI编曲软件

探索音乐人首选的 AI 编曲软件&#xff0c;开启音乐创作新时代 在音乐创作的广阔天地里&#xff0c;编曲是一项至关重要却又极具挑战的工作。它不仅需要创作者具备深厚的音乐理论知识&#xff0c;还得有丰富的创造力和对各种乐器音色的敏锐感知。传统的编曲方式往往耗时费力&am…

小白也能玩转Meta-Llama-3-8B:手把手教你搭建智能对话系统

小白也能玩转Meta-Llama-3-8B&#xff1a;手把手教你搭建智能对话系统 你是不是也经常刷到各种AI对话机器人&#xff0c;看着别人和大模型聊得热火朝天&#xff0c;自己却不知道从哪下手&#xff1f;别担心&#xff0c;今天这篇文章就是为你准备的。哪怕你是零基础、没学过编程…

编曲配乐技巧有哪些?音乐人总结AI编曲软件实用功能

编曲配乐技巧大揭秘&#xff0c;AI编曲软件实用功能全解析 在音乐创作的领域中&#xff0c;编曲配乐技巧犹如一把神奇的钥匙&#xff0c;能够打开音乐无限可能的大门。优秀的编曲配乐可以让一首歌曲从平淡无奇变得动人心弦&#xff0c;赋予其独特的风格和灵魂。而随着科技的飞速…

2026国内符合欧标EI120防火卷帘门厂家排行哪家好

欧标EI120防火卷帘门作为建筑消防安全的重要组成部分,其具备120分钟耐火完整性和隔热性,能有效阻止火势蔓延,保障人员疏散与财产安全。国内近年来在该领域技术不断提升,涌现出多家符合欧标标准的专业厂家,为不同建…

图层生成黑科技:Qwen-Image-Layered技术原理浅析(小白版)

图层生成黑科技&#xff1a;Qwen-Image-Layered技术原理浅析&#xff08;小白版&#xff09; 你有没有遇到过这种情况&#xff1a;AI生成了一张非常满意的图片&#xff0c;但就是衣服颜色不太对&#xff0c;或者背景有点杂乱。你想改一下&#xff0c;结果一动&#xff0c;整个…

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

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

Llama3-8B训练中断?检查点恢复实战解决方案

Llama3-8B训练中断&#xff1f;检查点恢复实战解决方案 1. 问题背景与核心挑战 你有没有遇到过这种情况&#xff1a;Llama3-8B模型训练到第5个epoch&#xff0c;突然断电、显存溢出或者服务器崩溃&#xff0c;重启后发现所有进度清零&#xff1f;这不仅浪费了大量算力资源&am…

2026年四川碳化钨喷涂服务商五强解析:技术、服务与市场验证

第一部分:行业趋势与焦虑制造 当前,中国制造业正经历从规模扩张向质量效益升级的深刻转型。在钢铁、化工、汽车、能源等重工业领域,关键零部件的耐磨、防腐与防粘性能,已不再是简单的“维护成本”问题,而是直接关…

风格强度自由调,我的卡通头像终于满意了

风格强度自由调&#xff0c;我的卡通头像终于满意了 1. 引言&#xff1a;从“不像我”到“这就是我”的转变 你有没有试过把自己的照片变成卡通头像&#xff1f;以前我也折腾过不少工具&#xff0c;结果不是画风太夸张&#xff0c;就是五官走形&#xff0c;最后出来的图连我妈…

麦橘超然Flux部署教程:Docker镜像封装实践案例

麦橘超然Flux部署教程&#xff1a;Docker镜像封装实践案例 1. 引言与学习目标 你是否也遇到过这样的问题&#xff1a;想在本地跑一个高质量的AI图像生成模型&#xff0c;但显存不够、环境依赖复杂、配置文件一堆报错&#xff1f;今天这篇文章就是为你准备的。 本文将带你一步…

矩阵优化dp

矩阵乘法 考虑一个 \(n\times m\)(即 n 行 m 列)的矩阵乘上一个 \(m\times k\) 的矩阵,乘法后得到 \(n\times k\) 的矩阵。 代数的写法就是 \[C_{i,j}=\sum_{t=1}^m A_{it}\cdot B_{tj} \]在写的时候,先枚举 \(i,k…

Qwen3-Embedding-4B性能评测:长文本嵌入速度实测对比

Qwen3-Embedding-4B性能评测&#xff1a;长文本嵌入速度实测对比 1. Qwen3-Embedding-4B介绍 Qwen3 Embedding 模型系列是 Qwen 家族中专为文本嵌入与排序任务打造的最新成员&#xff0c;基于强大的 Qwen3 系列基础模型构建。该系列覆盖了从 0.6B 到 8B 的多种参数规模&#…

手把手教你部署CV-UNet,5分钟实现智能去背

手把手教你部署CV-UNet&#xff0c;5分钟实现智能去背 1. 快速上手&#xff1a;什么是CV-UNet图像抠图&#xff1f; 你有没有遇到过这样的问题&#xff1a;想换一张照片的背景&#xff0c;但头发丝、肩膀边缘总是处理不好&#xff1f;手动用PS抠图太费时间&#xff0c;效果还…