08-应用部署

📅 2026/7/17 14:53:05
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.pyOpenAI API集成到应用中中serve_openai_api.pyvLLM高并发生产环境高中vLLMollama本地方便使用中-高低ollamallama.cppCPU/边缘设备推理中中llama.cppMNN移动端/嵌入式中高MNN8.1.2 推理性能参考模型参数量显存占用推理速度tokens/sminimind-3 Dense64M~0.5GB50-100PyTorch GPUminimind-3 MoE198M-A64M~1.0GB30-60PyTorch GPUminimind-3 4bit64M→16M~0.2GB80-150量化推理8.2 OpenAI 兼容 API 服务8.2.1 启动服务MiniMind 提供了 OpenAI 兼容的 API 服务可以直接替换 OpenAI API 使用cdminimind/scripts# 启动 API 服务默认端口 8998python serve_openai_api.py# 指定模型权重和端口python serve_openai_api.py--model_path../out/full_sft_768.pth--port80008.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_contentstreambool是否流式输出响应格式含思考{id:chatcmpl-xxx,choices:[{message:{role:assistant,content:正式回答内容,reasoning_content:思考过程内容}}]}8.2.3 API 调用示例# 基本对话curlhttp://localhost:8998/v1/chat/completions\-HContent-Type: application/json\-d{ model: minimind-3, messages: [{role: user, content: 你好}], max_tokens: 512 }# 流式输出curlhttp://localhost:8998/v1/chat/completions\-HContent-Type: application/json\-d{ model: minimind-3, messages: [{role: user, content: 写一首诗}], stream: true }# 开启思考模式curlhttp://localhost:8998/v1/chat/completions\-HContent-Type: application/json\-d{ model: minimind-3, messages: [{role: user, content: 123*456等于多少}], open_thinking: true }8.2.4 Python SDK 调用fromopenaiimportOpenAI# 创建客户端指向 MiniMind APIclientOpenAI(api_keydummy,# MiniMind 不需要真实 keybase_urlhttp://localhost:8998/v1)# 基本对话responseclient.chat.completions.create(modelminimind-3,messages[{role:user,content:请用 Python 写一个快速排序}],max_tokens512)print(response.choices[0].message.content)# 流式对话streamclient.chat.completions.create(modelminimind-3,messages[{role:user,content:介绍 Transformer}],streamTrue)forchunkinstream:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end)8.3 Web Demo 部署8.3.1 Streamlit Web Democdminimind/scripts streamlit run web_demo.pyWeb Demo 支持的功能多轮对话思考过程展示可开关工具调用测试参数调节temperature、top_p、max_tokens8.3.2 自定义 Web DemoimportstreamlitasstfromopenaiimportOpenAI st.title(MiniMind 对话助手)# 初始化客户端clientOpenAI(api_keydummy,base_urlhttp://localhost:8998/v1)# 会话历史ifmessagesnotinst.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):responseclient.chat.completions.create(modelminimind-3,messagesst.session_state.messages,max_tokens512,streamTrue)full_responsest.write_stream(response)st.session_state.messages.append({role:assistant,content:full_response})8.4 多推理框架集成8.4.1 ollamaollama 是最便捷的本地 LLM 推理工具# 安装 ollamahttps://ollama.aicurl-fsSLhttps://ollama.ai/install.sh|sh# 直接运行 MiniMind自动下载模型ollama run jingyaogong/minimind-3# 运行 MoE 版本ollama run jingyaogong/minimind-3-moeollama 自动提供 OpenAI 兼容 API端口 11434curlhttp://localhost:11434/v1/chat/completions\-d{ model: jingyaogong/minimind-3, messages: [{role: user, content: 你好}] }8.4.2 vLLMvLLM 是高性能 LLM 推理引擎适合高并发生产环境# 安装 vLLMpipinstallvllm# 启动推理服务vllm serve ./minimind-3 --served-model-nameminimind--port8000# 调用与 ollama 类似使用 OpenAI 兼容 APIcurlhttp://localhost:8000/v1/chat/completions\-HContent-Type: application/json\-d{ model: minimind, messages: [{role: user, content: 你好}] }vLLM 的性能优势PagedAttention 技术显存利用率更高连续批处理Continuous Batching高并发更高效支持多 GPU 推理8.4.3 llama.cppllama.cpp 适合 CPU 推理和边缘设备部署# 安装 llama.cpphttps://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你好请介绍一下你自己-n5128.4.4 SGLangSGLang 是高性能推理框架同时支持作为 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:89988.4.5 MNN 端侧部署MNNMobile Neural Network是阿里开源的端侧推理框架支持移动设备部署# MiniMind 支持 4-bit HQQ 量化# 量化后的模型可以部署到手机、嵌入式设备# 量化后模型大小# minimind-3: 64M × 4 bytes 256MB → 4-bit: ~64MB8.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-hf8.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-38.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-38.6.3 OpenAI 兼容性的意义MiniMind 的 OpenAI API 兼容设计意味着几乎所有主流 LLM 应用平台都可以无缝接入平台兼容性用途FastGPT✅知识库问答Dify✅工作流编排Open-WebUI✅ChatGPT 风格前端LangChain✅Agent 开发框架LobeChat✅聊天界面AnythingLLM✅文档问答8.7 性能优化技巧8.7.1 推理参数调优参数建议值说明temperature0.3-0.7低值更确定性高值更多样性top_p0.9核采样过滤低概率 tokentop_k50Top-K 采样max_tokens512-2048最大生成长度repetition_penalty1.1-1.2防止重复生成8.7.2 批量推理# 批量处理多个请求importconcurrent.futuresfromopenaiimportOpenAI clientOpenAI(api_keydummy,base_urlhttp://localhost:8998/v1)questions[问题1,问题2,...,问题N]withconcurrent.futures.ThreadPoolExecutor(max_workers4)asexecutor:futures[executor.submit(client.chat.completions.create,modelminimind-3,messages[{role:user,content:q}],max_tokens256)forqinquestions]forfutureinconcurrent.futures.as_completed(futures):responsefuture.result()print(response.choices[0].message.content)实践任务任务 8.1部署 OpenAI API 服务必做启动 MiniMind API 服务使用 curl 测试基本对话使用 Python SDK 调用 API测试流式输出测试思考模式# 启动服务cdscriptspython serve_openai_api.py# 在另一个终端测试curlhttp://localhost:8998/v1/chat/completions\-HContent-Type: application/json\-d{model:minimind-3,messages:[{role:user,content:你好}]}任务 8.2多框架推理体验必做选择至少 2 种推理框架进行体验框架是否成功推理速度使用体验ollamavLLMllama.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 平台选做部署 FastGPT 或 Dify将 MiniMind API 作为 LLM 后端接入创建一个简单的知识库问答应用测试端到端的问答效果挑战任务选做将 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 个阶段你已经✅ 搭建了完整的 LLM 训练环境✅ 理解了 TokenizerBPE的工作原理✅ 深入理解了 Transformer 架构的每个组件✅ 完成了预训练让模型学会语言规律✅ 完成了 SFT让模型学会对话✅ 掌握了 LoRA 参数高效微调✅ 了解了 RLHF/RLAIF 对齐技术✅ 学会了模型部署和 API 服务搭建MiniMind 虽然是一个小型模型但它覆盖了大语言模型训练的完整技术栈。理解了 MiniMind 的每个组件你就具备了阅读和理解主流大模型如 LLaMA、Qwen、DeepSeek代码的基础能力。继续探索的方向阅读 LLaMA 3 / Qwen 3 的源码对比架构差异尝试在更大规模的数据集上训练探索最新的对齐技术如 Online RLHF、Constitutional AI构建 Agent 应用工具调用、多步推理