
self-llm 实战教程SGLang 部署 MiniMax-M2 多卡推理服务与 OpenAI 兼容调用【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm本篇以《开源大模型食用指南》(self-llm) 仓库中的 MiniMax-M2 SGLang 部署文档 为主线完整演示如何基于 SGLang 在 4 卡/8 卡 GPU 环境上部署 MiniMax-M2 这一 230B 总参数、10B 激活参数的 MoE 大模型从环境准备、显存评估、模型下载到服务启动、OpenAI 兼容接口调用文本补全、聊天、流式输出、工具调用与参数调优建议。读完本文你可以按步骤复现一个可用的 M2 推理服务并理解张量并行、专家并行等关键参数在 MoE 模型上的作用。一、为什么用 SGLang 部署 MiniMax-M2SGLang 是一个面向大语言模型的高性能推理框架提供开箱即用的推理加速与 OpenAI 兼容接口。它支持长上下文推理、流式输出、多卡并行如张量并行与专家并行、工具调用与思考内容reasoning解析等能力便于将最新模型快速落地到生产环境。在工程实践上SGLang 以简洁的启动方式和稳定的服务能力为特点后端通过sglang.launch_server一条命令即可启动前端可以直接沿用现有的 OpenAI SDK 或 HTTP 调用链路无需额外适配成本。对于需要高吞吐、低时延与可观测性的场景SGLang 也提供了灵活的内存管理与并行参数如--mem-fraction-static、--tp-size便于在不同规模的 GPU 集群上达到性价比最优。选择 SGLang 部署 MiniMax-M2 还有一个架构层面的原因M2 是混合专家MoE模型。从仓库的 MiniMax-M2 架构解析 Blog 可以看到M2 在 2025 年 10 月 27 日发布总参数 230B、激活参数仅 10B其稀疏专家模块MiniMaxM2SparseMoeBlock通过门控层对 token 做专家路由再按top_k选中的专家加权求和输出。专家路由权重采用先 Sigmoid 再除总和的方式训练时在门控前增加抖动噪声并使用e_score_correction_bias做专家权重得分修正。MoE 结构意味着参数分布天然适合按专家维度切分这正是后文 8 卡部署中同时设置--tp-size 8 --ep-size 8张量并行 专家并行的原因。二、环境准备与显存评估基础环境参考值---------------- ubuntu 22.04 python 3.12 cuda 13.0 pytorch 2.8.0 GPU Compute Capability ≥ 7.0 ----------------可以用以下两条命令自检 CUDA / PyTorch 环境nvidia-smi python -c import torch;print(torch.version.cuda, torch.cuda.is_available())显存与推荐配置按官方文档给出的参考值权重需求约 220 GB 显存与 230B 总参数在 BF16 下的体量一致每 1M 上下文 token 约需 240 GB 显存KV Cache 部分96G × 4 GPU支持约 40 万 token 总上下文144G × 8 GPU支持约 300 万 token 总上下文。本文的实验环境为 8 × RTX PRO 6000每卡 96G 显存。评估自己的资源时可以用权重 220 GB 每 1M 上下文约 240 GB这条口径结合自身业务的并发量与上下文长度需求估算所需卡数与单卡显存。安装依赖建议使用虚拟环境venv / conda / uv避免依赖冲突pip install --upgrade pip pip install sglang0.5.5 pip install modelscope1.31.0其中sglang0.5.5是本文实测使用的版本modelscope用于后续下载模型权重。三、模型下载使用 ModelScope 的snapshot_download下载模型。将cache_dir修改为你的本地存储路径模型名使用MiniMaxAI/MiniMax-M2。# model_download.py from modelscope import snapshot_download model_dir snapshot_download(MiniMaxAI/MiniMax-M2, cache_dir/root/autodl-tmp, revisionmaster) print(f模型下载成功保存到: {model_dir})python model_download.py注意模型权重很大约 220 GB若网络带宽受限建议使用镜像源或先在带宽较高的环境中下载后拷贝到目标机器。四、启动 SGLang 服务SGLang 可通过脚本或命令行启动。下方示例使用脚本方式便于固定参数与日志。4.1 Python 启动脚本新建start_server.pyimport torch from sglang.utils import launch_server_cmd, wait_for_server gpu_count torch.cuda.device_count() if torch.cuda.is_available() else 0 if gpu_count 4: cmd ( python -m sglang.launch_server --model-path MiniMaxAI/MiniMax-M2 --host 0.0.0.0 --port 8000 --tp-size 4 --tool-call-parser minimax-m2 --reasoning-parser minimax-append-think --trust-remote-code --mem-fraction-static 0.85 ) elif gpu_count 8: cmd ( python -m sglang.launch_server --model-path MiniMaxAI/MiniMax-M2 --host 0.0.0.0 --port 8000 --tp-size 8 --ep-size 8 --tool-call-parser minimax-m2 --reasoning-parser minimax-append-think --trust-remote-code --mem-fraction-static 0.85 ) else: raise RuntimeError(f建议使用 4 或 8 张 GPU当前检测到: {gpu_count}) server_process, port launch_server_cmd(cmd, port8000) wait_for_server(fhttp://127.0.0.1:{port}) print(fSGLang Server started: http://127.0.0.1:{port})启动方式python start_server.py脚本的设计要点可以从源码结构上这样理解torch.cuda.device_count()先探测可用 GPU 数量再在 4 卡/8 卡两条分支中拼装启动命令其他卡数直接抛出RuntimeError提示避免参数配错launch_server_cmd(cmd, port8000)将命令行以子进程方式拉起 SGLang 服务并返回进程句柄wait_for_server(...)轮询服务健康状态直到服务就绪后再继续这样脚本可以安全地嵌入到自动化流水线中。服务启动成功后将监听http://127.0.0.1:8000/v1即可作为 OpenAI 兼容的base_url使用见上文启动成功截图。提示多卡环境可将--tp-size设置为 GPU 数量显存紧张时可调低--mem-fraction-static或考虑更低的--max-model-len详见第六节参数说明与建议。4.2 命令行直接启动4 卡部署python -m sglang.launch_server \ --model-path MiniMaxAI/MiniMax-M2 \ --tp-size 4 \ --tool-call-parser minimax-m2 \ --reasoning-parser minimax-append-think \ --host 0.0.0.0 \ --trust-remote-code \ --port 8000 \ --mem-fraction-static 0.858 卡部署python -m sglang.launch_server \ --model-path MiniMaxAI/MiniMax-M2 \ --tp-size 8 \ --ep-size 8 \ --tool-call-parser minimax-m2 \ --trust-remote-code \ --host 0.0.0.0 \ --reasoning-parser minimax-append-think \ --port 8000 \ --mem-fraction-static 0.85两个关键差异点4 卡命令只设置--tp-size 48 卡命令额外设置--ep-size 8即开启专家并行。结合 M2 的 MoE 结构每个 Transformer 层由多个局部专家组成专家并行把专家权重分布到多张卡上与张量并行叠加使用是 8 卡参考配置的核心。两个配置都带--tool-call-parser minimax-m2与--reasoning-parser minimax-append-think分别启用 M2 特有的工具调用格式解析与思考内容解析这是后面工具调用示例能拿到结构化tool_calls的前提。由于模型较大首次加载的时间较长可能在半个小时以上。加载完成后的参考显存占用情况见前文 nvidia-smi 截图。五、调用示例以下示例均使用 OpenAI 官方 Python SDK 调用 SGLang 的 OpenAI 兼容接口。5.1 文本补全Completions# test_completion.py from openai import OpenAI client OpenAI( api_keyEMPTY, base_urlhttp://127.0.0.1:8000/v1, ) response client.completions.create( modelMiniMaxAI/MiniMax-M2, prompt简要介绍一下 MiniMax M2 模型的特点。, max_tokens8192, top_p0.95, temperature1.0, ) print(response)运行python test_completion.py服务端日志与输出节选关键部分INFO: 127.0.0.1:54362 - POST /v1/completions HTTP/1.1 200 OK Completion(id26bdb952ffb846b09cd2611b6a8b1d8d, choices[CompletionChoice(finish_reasonstop, index0, text...M2 模型特点与突破的详细介绍输出中包含 思考内容..., matched_stop200020)], modelMiniMaxAI/MiniMax-M2, objecttext_completion, usageCompletionUsage(completion_tokens1386, prompt_tokens9, total_tokens1395, reasoning_tokens0), metadata{weight_version: default})可以看到finish_reasonstop、matched_stop200020usage中返回了 token 用量reasoning_tokens0表示思考内容未单独计费为 reasoning tokens在 Completions 接口下。5.2 聊天对话Chat Completions# test_chat.py from openai import OpenAI client OpenAI( api_keyEMPTY, base_urlhttp://127.0.0.1:8000/v1, ) response client.chat.completions.create( modelMiniMaxAI/MiniMax-M2, messages[ {role: user, content: MiniMAX公司的愿景是什么你觉得他们会成功吗请作出详细分析。} ], max_tokens8192, top_p0.95, temperature1.0, ) msg response.choices[0].message print(MiniMax-M2:, msg.content)运行python test_chat.py输出节选关键结构INFO: 127.0.0.1:43672 - POST /v1/chat/completions HTTP/1.1 200 OK MiniMax-M2: Im thinking about the Chinese context where the public expects AI for content. Ill highlight that its still early, and the key factors to watch include their product-market fit, competition, monetization, and compliance. ... 思考内容结束 # MiniMax的愿景与成功可能性基于公开信息的结构化分析 ## 一、愿景梳理基于公开报道和行业理解 ...结构化分析正文含行业机会与挑战、商业化路径、风险与判断标准等章节由于服务启动时带了--reasoning-parser minimax-append-think模型先以 包裹输出思考过程随后再输出正式回答思考内容会追加在message.content中。5.3 流式输出Streaming# test_streaming.py from openai import OpenAI client OpenAI( api_keyEMPTY, base_urlhttp://127.0.0.1:8000/v1, ) stream client.chat.completions.create( modelMiniMaxAI/MiniMax-M2, messages[{role: user, content: 请写一篇题为Agent时代大模型应用落地要点的调研报告。}], streamTrue, max_tokens32768, top_p0.95, temperature1.0, ) for chunk in stream: delta chunk.choices[0].delta if delta and delta.content: print(delta.content, end, flushTrue)运行python test_streaming.py运行后终端会逐 token 打印增量内容先打印 内的思考内容再打印报告正文。示例中max_tokens32768用于支撑长篇调研报告实际业务中请结合上下文预算调整过大的max_tokens会增加显存占用与首包外的整体时延。5.4 工具调用Tool CallingMiniMax-M2 是专为 Agent 和代码而生的模型拥有较强的 Agentic 表现——能够出色规划并稳定执行复杂长链条工具调用任务协同调用 Shell、Browser、Python 代码执行器和各种 MCP 工具。在 SGLang 部署时通过--tool-call-parser minimax-m2开启工具调用解析使模型能够识别何时需要调用外部工具并以结构化格式输出工具调用参数。下面脚本实现了一个天气查询工具调用示例# test_tool_calling.py from openai import OpenAI import json client OpenAI(base_urlhttp://localhost:8000/v1, api_keyEMPTY) def get_weather(location: str, unit: str): return fGetting the weather for {location} in {unit}... tool_functions {get_weather: get_weather} tools [{ type: function, function: { name: get_weather, description: Get the current weather in a given location, parameters: { type: object, properties: { location: {type: string, description: City and state, e.g., San Francisco, CA}, unit: {type: string, enum: [celsius, fahrenheit]} }, required: [location, unit] } } }] response client.chat.completions.create( modelclient.models.list().data[0].id, messages[{role: user, content: Whats the weather like in San Francisco? use celsius.}], toolstools, tool_choiceauto ) print(response) tool_call response.choices[0].message.tool_calls[0].function print(fFunction called: {tool_call.name}) print(fArguments: {tool_call.arguments}) print(fResult: {get_weather(**json.loads(tool_call.arguments))})运行python test_tool_calling.py输出节选关键部分ChatCompletion(..., choices[Choice(finish_reasontool_calls, index0, messageChatCompletionMessage( content思考内容用户询问旧金山天气且要求摄氏度需要调用 get_weather 工具, tool_calls[ChatCompletionMessageFunctionToolCall( idcall_7f1ffef8c74f4b55bbe423cb, functionFunction(arguments{location: San Francisco, CA, unit: celsius}, nameget_weather), typefunction)], roleassistant)], usageCompletionUsage(completion_tokens317, prompt_tokens231, total_tokens548, reasoning_tokens0), metadata{weight_version: default}) Function called: get_weather Arguments: {location: San Francisco, CA, unit: celsius} Result: Getting the weather for San Francisco, CA in celsius...这个示例展示了完整的识别意图 → 生成结构化参数 → 本地执行闭环finish_reasontool_calls表明本次响应以工具调用结束tool_calls[0].function.arguments是一个 JSON 字符串json.loads后即可直接用于调用本地函数。在实际 Agent 系统中把工具执行结果再作为roletool消息回填给模型即可完成多轮工具循环。六、参数说明与建议服务端启动参数--model-path模型本地路径或兼容路径OpenAI 请求中的model字段需与之对应。--tp-size张量并行大小。多卡时可等于 GPU 数以提升吞吐/上下文上限。--ep-size专家并行大小按官方 8 卡示例配置。对 MoE 模型专家并行将不同专家权重分布到不同 GPU与张量并行互补。--mem-fraction-static静态显存占比控制 SGLang 预先占用的显存比例主要用于模型权重与 KV Cache 池。显存吃紧可下调例如 0.7/0.6。--tool-call-parser minimax-m2开启 M2 的工具调用解析使输出能被解析为 OpenAI 风格的tool_calls结构。--reasoning-parser minimax-append-think启用思考内容解析将 reasoning 追加处理。--trust-remote-code允许执行模型仓库中的自定义代码M2 等模型部署通常需要。--host/--port监听地址与端口默认示例为0.0.0.0:8000。客户端采样参数max_tokens控制生成长度过大将增加显存和时延。temperature/top_p控制多样性。追求稳定确定性可使用较低的temperature与top_p。官方推荐采样参数temperature1.0, top_p0.95, top_k20可获得较好的性能表现。显存与资源建议M2 权重约 220 GB每 1M 上下文约 240 GB。请结合业务并发与上下文需求评估资源。粗略估算口径所需显存 ≈ 权重(约220GB) 上下文(约240GB / 1M token) × 目标上下文长度(M)例如 4 × 96G合计约 384G下扣除权重后剩余显存可支撑约 40 万 token 级别的总上下文这与仓库文档中96G × 4 GPU 支持约 40 万 token 总上下文的参考值一致。七、相关教程延伸仓库的 MiniMax-M2 系列教程 还包含与本教程互补的内容可按需深入MiniMax-M2 模型架构解析MLP 门控结构、专家路由与抖动噪声的实现细节MiniMax-M2 vLLM 部署调用同一模型在 vLLM 框架下的对应部署方式参数名不同--tensor-parallel-size/--enable_expert_parallel/--tool-call-parser minimax_m2MiniMax-M2 EvalScope 并发测试服务部署完成后的性能压测方法。服务部署完成后建议先跑通第五节的四个调用示例补全、聊天、流式、工具调用再结合 EvalScope 做并发压测最终确认你的资源配置能够支撑目标业务的吞吐与时延要求。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考