当前位置: 首页 > news >正文

08-应用部署

阶段 8:应用部署

教学目标

  • 掌握 MiniMind 模型的多种部署方式
  • 能够部署 OpenAI 兼容的 API 服务
  • 了解 vLLM、ollama、llama.cpp 等推理框架的接入方式
  • 掌握模型格式转换(torch → transformers → GGUF)
  • 了解端侧量化部署(MNN)
  • 能够将模型接入 RAG 应用(FastGPT、Dify)

课时安排

  • 理论讲解:0.5 课时(部署方案概述)
  • 部署实践:1.5 课时(API 服务 + 多框架推理 + 模型转换)

8.1 部署方案概览

8.1.1 部署方式对比

方式适用场景性能难度代表工具
原生 PyTorch本地测试、教学eval_llm.py
OpenAI API集成到应用serve_openai_api.py
vLLM高并发生产环境vLLM
ollama本地方便使用中-高ollama
llama.cppCPU/边缘设备推理llama.cpp
MNN移动端/嵌入式MNN

8.1.2 推理性能参考

模型参数量显存占用推理速度(tokens/s)
minimind-3 Dense64M~0.5GB50-100(PyTorch GPU)
minimind-3 MoE198M-A64M~1.0GB30-60(PyTorch GPU)
minimind-3 4bit64M→16M~0.2GB80-150(量化推理)

8.2 OpenAI 兼容 API 服务

8.2.1 启动服务

MiniMind 提供了 OpenAI 兼容的 API 服务,可以直接替换 OpenAI API 使用:

cdminimind/scripts# 启动 API 服务(默认端口 8998)python serve_openai_api.py# 指定模型权重和端口python serve_openai_api.py--model_path../out/full_sft_768.pth--port8000

8.2.2 API 接口说明

MiniMind 的 API 服务兼容 OpenAI Chat Completions API:

接口地址POST /v1/chat/completions

请求格式

{"model":"minimind-3","messages":[{"role":"user","content":"你好"}],"max_tokens":512,"temperature":0.7,"top_p":0.9,"open_thinking":false}

特殊参数

参数类型说明
open_thinkingbool是否开启思考模式(输出 reasoning_content)
streambool是否流式输出

响应格式(含思考)

{"id":"chatcmpl-xxx","choices":[{"message":{"role":"assistant","content":"正式回答内容","reasoning_content":"思考过程内容"}}]}

8.2.3 API 调用示例

# 基本对话curlhttp://localhost:8998/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "minimind-3", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 512 }'# 流式输出curlhttp://localhost:8998/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "minimind-3", "messages": [{"role": "user", "content": "写一首诗"}], "stream": true }'# 开启思考模式curlhttp://localhost:8998/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "minimind-3", "messages": [{"role": "user", "content": "123*456等于多少?"}], "open_thinking": true }'

8.2.4 Python SDK 调用

fromopenaiimportOpenAI# 创建客户端(指向 MiniMind API)client=OpenAI(api_key="dummy",# MiniMind 不需要真实 keybase_url="http://localhost:8998/v1")# 基本对话response=client.chat.completions.create(model="minimind-3",messages=[{"role":"user","content":"请用 Python 写一个快速排序"}],max_tokens=512)print(response.choices[0].message.content)# 流式对话stream=client.chat.completions.create(model="minimind-3",messages=[{"role":"user","content":"介绍 Transformer"}],stream=True)forchunkinstream:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end="")

8.3 Web Demo 部署

8.3.1 Streamlit Web Demo

cdminimind/scripts streamlit run web_demo.py

Web Demo 支持的功能:

  • 多轮对话
  • 思考过程展示(可开关)
  • 工具调用测试
  • 参数调节(temperature、top_p、max_tokens)

8.3.2 自定义 Web Demo

importstreamlitasstfromopenaiimportOpenAI st.title("MiniMind 对话助手")# 初始化客户端client=OpenAI(api_key="dummy",base_url="http://localhost:8998/v1")# 会话历史if"messages"notinst.session_state:st.session_state.messages=[]# 显示历史消息formsginst.session_state.messages:withst.chat_message(msg["role"]):st.markdown(msg["content"])# 用户输入ifprompt:=st.chat_input("请输入问题..."):st.session_state.messages.append({"role":"user","content":prompt})withst.chat_message("user"):st.markdown(prompt)# 调用模型withst.chat_message("assistant"):response=client.chat.completions.create(model="minimind-3",messages=st.session_state.messages,max_tokens=512,stream=True)full_response=st.write_stream(response)st.session_state.messages.append({"role":"assistant","content":full_response})

8.4 多推理框架集成

8.4.1 ollama

ollama 是最便捷的本地 LLM 推理工具:

# 安装 ollama(https://ollama.ai)curl-fsSLhttps://ollama.ai/install.sh|sh# 直接运行 MiniMind(自动下载模型)ollama run jingyaogong/minimind-3# 运行 MoE 版本ollama run jingyaogong/minimind-3-moe

ollama 自动提供 OpenAI 兼容 API(端口 11434):

curlhttp://localhost:11434/v1/chat/completions\-d'{ "model": "jingyaogong/minimind-3", "messages": [{"role": "user", "content": "你好"}] }'

8.4.2 vLLM

vLLM 是高性能 LLM 推理引擎,适合高并发生产环境:

# 安装 vLLMpipinstallvllm# 启动推理服务vllm serve ./minimind-3 --served-model-name"minimind"--port8000# 调用(与 ollama 类似,使用 OpenAI 兼容 API)curlhttp://localhost:8000/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "minimind", "messages": [{"role": "user", "content": "你好"}] }'

vLLM 的性能优势:

  • PagedAttention 技术,显存利用率更高
  • 连续批处理(Continuous Batching),高并发更高效
  • 支持多 GPU 推理

8.4.3 llama.cpp

llama.cpp 适合 CPU 推理和边缘设备部署:

# 安装 llama.cpp(https://github.com/ggerganov/llama.cpp)# 需要先将模型转换为 GGUF 格式# 转换为 GGUF(先转 transformers 格式,再用 llama.cpp 转换)cdminimind/scripts python convert_model.py--formattransformers--input_dir../minimind-3# 使用 llama.cpp 的 convert 脚本转换为 GGUFpython convert_hf_to_gguf.py ./minimind-3--outtypef16# 运行推理./llama-cli-mminimind-3.gguf-p"你好,请介绍一下你自己"-n512

8.4.4 SGLang

SGLang 是高性能推理框架,同时支持作为 Agentic RL 的 rollout 引擎:

# 安装 SGLangpipinstallsglang# 启动推理服务python-msglang.launch_server --model-path ./minimind-3--port8998# 作为 Agentic RL 的 rollout 引擎python train_agent.py--rollout_enginesglang--sglang_base_urlhttp://localhost:8998

8.4.5 MNN 端侧部署

MNN(Mobile Neural Network)是阿里开源的端侧推理框架,支持移动设备部署:

# MiniMind 支持 4-bit HQQ 量化# 量化后的模型可以部署到手机、嵌入式设备# 量化后模型大小:# minimind-3: 64M × 4 bytes = 256MB → 4-bit: ~64MB

8.5 模型格式转换

8.5.1 支持的格式

MiniMind 支持以下格式之间的转换:

┌──────────────────────────────────────────────────────┐ │ 格式转换矩阵 │ │ │ │ torch (.pth) ←→ transformers (config.json + safetensors) │ │ │ │ transformers → GGUF (llama.cpp) │ │ │ │ transformers → ONNX / MNN (端侧) │ └──────────────────────────────────────────────────────┘

8.5.2 转换命令

cdminimind/scripts# torch → transformers(导出为标准 HuggingFace 格式)python convert_model.py--formattransformers\--input_dir../minimind-3\--output_dir../minimind-3-hf# transformers → GGUF# 需要使用 llama.cpp 的 convert_hf_to_gguf.py 脚本python convert_hf_to_gguf.py../minimind-3-hf--outtypef16# LoRA 权重合并后导出python convert_model.py--formattransformers\--input_dir../out\--output_dir../merged-hf

8.5.3 transformers 格式的文件结构

minimind-3-hf/ ├── config.json # 模型配置 ├── tokenizer.json # Tokenizer 配置 ├── tokenizer.model # SentencePiece 模型 ├── special_tokens_map.json ├── model.safetensors # 模型权重 └── generation_config.json # 生成参数配置

8.6 接入 RAG 应用

8.6.1 FastGPT 接入

FastGPT 是一个开源的 RAG 平台,可以直接使用 MiniMind 作为 LLM 后端:

FastGPT 设置步骤: 1. 部署 MiniMind OpenAI API 服务 2. 在 FastGPT 后台添加自定义 LLM 渠道 3. API 地址: http://your-server:8998/v1 4. API Key: 任意(MiniMind 不验证) 5. 模型名称: minimind-3

8.6.2 Dify 接入

Dify 是另一个流行的 LLM 应用开发平台:

Dify 设置步骤: 1. 进入 Dify → 设置 → 模型供应商 2. 添加 OpenAI API 兼容供应商 3. API Base URL: http://your-server:8998/v1 4. API Key: dummy 5. 选择模型: minimind-3

8.6.3 OpenAI 兼容性的意义

MiniMind 的 OpenAI API 兼容设计意味着几乎所有主流 LLM 应用平台都可以无缝接入:

平台兼容性用途
FastGPT知识库问答
Dify工作流编排
Open-WebUIChatGPT 风格前端
LangChainAgent 开发框架
LobeChat聊天界面
AnythingLLM文档问答

8.7 性能优化技巧

8.7.1 推理参数调优

参数建议值说明
temperature0.3-0.7低值更确定性,高值更多样性
top_p0.9核采样,过滤低概率 token
top_k50Top-K 采样
max_tokens512-2048最大生成长度
repetition_penalty1.1-1.2防止重复生成

8.7.2 批量推理

# 批量处理多个请求importconcurrent.futuresfromopenaiimportOpenAI client=OpenAI(api_key="dummy",base_url="http://localhost:8998/v1")questions=["问题1","问题2",...,"问题N"]withconcurrent.futures.ThreadPoolExecutor(max_workers=4)asexecutor:futures=[executor.submit(client.chat.completions.create,model="minimind-3",messages=[{"role":"user","content":q}],max_tokens=256)forqinquestions]forfutureinconcurrent.futures.as_completed(futures):response=future.result()print(response.choices[0].message.content)

实践任务

任务 8.1:部署 OpenAI API 服务(必做)

  1. 启动 MiniMind API 服务
  2. 使用 curl 测试基本对话
  3. 使用 Python SDK 调用 API
  4. 测试流式输出
  5. 测试思考模式
# 启动服务cdscripts&&python serve_openai_api.py# 在另一个终端测试curlhttp://localhost:8998/v1/chat/completions\-H"Content-Type: application/json"\-d'{"model":"minimind-3","messages":[{"role":"user","content":"你好"}]}'

任务 8.2:多框架推理体验(必做)

选择至少 2 种推理框架进行体验:

框架是否成功推理速度使用体验
ollama
vLLM
llama.cpp

任务 8.3:模型格式转换(必做)

# 将 MiniMind 模型转换为 transformers 格式cdscripts python convert_model.py--formattransformers--input_dir../minimind-3# 检查输出目录结构ls-la../minimind-3-hf/

任务 8.4:自定义 Web Demo(选做)

基于 Streamlit 实现一个增强版的 Web Demo:

  • 支持多轮对话
  • 支持参数调节(temperature、top_p)
  • 支持思考模式切换
  • 对话历史保存/清除
  • 回答质量评分

任务 8.5:接入 RAG 平台(选做)

  1. 部署 FastGPT 或 Dify
  2. 将 MiniMind API 作为 LLM 后端接入
  3. 创建一个简单的知识库问答应用
  4. 测试端到端的问答效果

挑战任务(选做)

  • 将 MiniMind 部署到 Docker 容器中
  • 实现一个简单的负载均衡多实例部署
  • 使用 MNN 将 MiniMind 部署到移动端

综合项目选题建议

以下为本课程的综合项目选题,学生可根据兴趣选择:

编号选题涉及阶段难度
P1从零训练一个领域专用 MiniMind(如网络工程)4-6★★★
P2对比不同 RL 算法在特定任务上的表现5-7★★★★
P3构建基于 MiniMind 的 RAG 问答系统5, 8★★★
P4MiniMind 模型的量化与端侧部署6, 8★★★★
P5改进 MiniMind 架构(如增加层数、调整注意力头数)3-4★★★★
P6多模态 MiniMind(接入视觉模型)3, 8★★★★★

课程总结

通过本课程的 8 个阶段,你已经:

  1. ✅ 搭建了完整的 LLM 训练环境
  2. ✅ 理解了 Tokenizer(BPE)的工作原理
  3. ✅ 深入理解了 Transformer 架构的每个组件
  4. ✅ 完成了预训练,让模型学会语言规律
  5. ✅ 完成了 SFT,让模型学会对话
  6. ✅ 掌握了 LoRA 参数高效微调
  7. ✅ 了解了 RLHF/RLAIF 对齐技术
  8. ✅ 学会了模型部署和 API 服务搭建

MiniMind 虽然是一个小型模型,但它覆盖了大语言模型训练的完整技术栈。理解了 MiniMind 的每个组件,你就具备了阅读和理解主流大模型(如 LLaMA、Qwen、DeepSeek)代码的基础能力。

继续探索的方向:

  • 阅读 LLaMA 3 / Qwen 3 的源码,对比架构差异
  • 尝试在更大规模的数据集上训练
  • 探索最新的对齐技术(如 Online RLHF、Constitutional AI)
  • 构建 Agent 应用(工具调用、多步推理)
http://www.cnnetsun.cn/news/3457549.html

相关文章:

  • Qt 通过 NMC-G2 读取 UPS 状态
  • 3分钟掌握Forza Mods AIO:极限竞速地平线游戏修改的终极指南
  • cann/asc-devkit TQue分配Tensor函数
  • AudioShare音频共享解决方案:打破设备壁垒,实现跨平台音频同步传输
  • Akamai Cloud Manager完全指南:从入门到精通Linode服务管理
  • 终极指南:如何用Linkinator快速检测和修复网站死链
  • CANN/Ascend C SIMT-API FP8转换函数
  • 贾子的相变:当历史的筛选机制遇见认知的临界点
  • BetterDB Monitor Webhook配置:实时通知与自动化工作流集成
  • Material Combiner:Blender材质合并与UV修复的技术解决方案
  • Marge-bot 高级功能探索:Commit Trailers、审核者模拟和合并限制
  • 用 AI 藏 AI 痕迹:Academic Humanizer 掀学界论战,AI 智能落地有了新解法
  • 暂存区是不是叫stage? 工作区叫啥?
  • Go-Queryset错误处理与调试:常见问题排查与解决方案
  • Nintendo Switch帧率解锁终极指南:FPSLocker完全掌握手册
  • Smart 265视频编码技术解析与安防监控应用
  • 高效音频转字幕终极指南:AsrTools智能语音识别方案
  • JODConverter终极指南:5个技巧实现Java文档格式互转高效集成
  • 如何用node-persist实现服务器端localStorage:5分钟快速上手教程
  • Servest JSX服务端渲染:如何在Deno中实现现代化Web应用
  • Scala Scraper DSL高级特性:Option、Either与Functor的优雅运用
  • AI 生成组件的自动化回归测试:快照对比与交互回放的工程方案
  • TBAnnotationClustering社区与支持:如何贡献与获取帮助的终极指南
  • 17个Obsidian核心插件模板:快速搭建个人知识管理系统
  • WaveTools鸣潮性能调校完整解决方案:从诊断到优化的全流程指南
  • 收藏!2026年普通人也能抓住的AI就业5条赛道,速看!
  • 如何快速解决音频标签问题:Tag Editor完整使用指南与实用技巧
  • CANN/asc-devkit TQueBind分配Tensor
  • Cursor+FastAPI+Docker后端搭建全栈方案(企业级CI/CD预配置模板首次公开)
  • B站广告跳过插件终极指南:小电视空降助手完全解析