系统要求
- 系统镜像:
docker pull nvidia/cuda:12.4.1-cudnn-devel-rockylinux8
- GPU:
A100-SXM4-40GB
安装 SGLang
conda create -n sglang python=3.10
conda activate sglang
pip install uv
uv -v pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 flashinfer-python --index-url https://download.pytorch.org/whl/cu124 --extra-index-url https://flashinfer.ai/whl/cu124/torch2.6
uv -v pip install "sglang[all]==0.4.6.post2"
下载模型权重
注意,A100 显卡架构不支持 FP8
版本的模型权重,请下载 BF16
版本的模型权重。
Qwen3-32B
git clone https://huggingface.co/Qwen/Qwen3-32B
Qwen3-235B-A22B
git clone https://huggingface.co/Qwen/Qwen3-235B-A22B
启动 SGLang
Qwen3-32B
使用单机 4 卡 A100 加载 32B,
python -m sglang.launch_server --model-path Qwen3-32B --reasoning-parser qwen3 --tp 4 --trust-remote-code --host 0.0.0.0 --port 8081
Qwen3-235B-A22B
使用双机 8 卡 A100 加载 235B-A22B(A100 80G 显存版本理论上只需要单机 8 卡,但无测试条件),
# MASTER_IP 配置为 node 1 ip,请根据实际情况替换
export MASTER_IP=10.0.0.1
# node 1
python -m sglang.launch_server --model-path Qwen3-235B-A22B --reasoning-parser qwen3 --tp 16 --dist-init-addr $MASTER_IP:5000 --nnodes 2 --node-rank 0 --trust-remote-code --host 0.0.0.0 --port 8081
# node 2
python -m sglang.launch_server --model-path Qwen3-235B-A22B --reasoning-parser qwen3 --tp 16 --dist-init-addr $MASTER_IP:5000 --nnodes 2 --node-rank 1 --trust-remote-code
如果启动卡在 sglang is using nccl==2.xx.xx
日志,可以参考该解决方案,尝试重新配置 IB 环境变量;或直接禁止使用 IB 通信,
# export NCCL_DEBUG=TRACE
export NCCL_IB_DISABLE=1
如果需要在单机 8 卡 A100 运行全参数 Qwen3-235B-A22B,可以参考该教程部署量化版本。
测试
Qwen3-32B
请求:
curl http://127.0.0.1:8081/v1/chat/completions \
-X POST \
-d '{"model":"Qwen3-32B","messages":[{"role":"user","content":"你是谁?"}]}'
响应:
{
"id": "2e4d5d1a291e4c08a884ebfdd2e67e6f",
"object": "chat.completion",
"created": 1746258521,
"model": "Qwen3-32B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是Qwen3,是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我能够回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等。如果你有任何问题或需要帮助,欢迎随时告诉我!",
"reasoning_content": "好的,用户问“你是谁?”,我需要给出一个简洁明了的自我介绍。首先,我应该说明自己的名字,Qwen3,然后提到我是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。接下来,我需要列出我的主要功能和特点,比如多语言支持、对话理解、代码写作能力,以及我能够提供的各种帮助,比如回答问题、创作文字、逻辑推理等。同时,我要注意保持口语化,避免使用复杂的技术术语,让用户容易理解。另外,用户可能想知道我的优势,所以需要强调我的训练数据量和性能提升。最后,我要以友好的语气回邀用户提问或给出任务,鼓励他们与我互动。需要确保回答结构清晰,信息全面,同时保持自然流畅。现在检查一下有没有遗漏的关键点,比如版本号、研发背景、功能列表等,确认都涵盖到了。然后组织语言,确保每个部分衔接自然,没有重复。最后通读一遍,确保没有错误,并且符合用户的需求。\n",
"tool_calls": null
},
"logprobs": null,
"finish_reason": "stop",
"matched_stop": 151645
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 317,
"completion_tokens": 306,
"prompt_tokens_details": null
}
}
Qwen3-235B-A22B
请求:
curl http://127.0.0.1:8081/v1/chat/completions \
-X POST \
-d '{"model":"Qwen3-235B-A22B","messages":[{"role":"user","content":"你是谁?"}]}'
响应:
{
"id": "21b4b314f0374e5da4f82785ba1e7947",
"object": "chat.completion",
"created": 1746268238,
"model": "Qwen3-235B-A22B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是通义千问,英文名Qwen,是由通义实验室研发的超大规模语言模型。我可以帮助你回答问题、创作文字、编程、表达观点等,支持多种语言,包括中文、英文、德语、法语、西班牙语等。如果你有任何问题或需要帮助,随时告诉我哦!",
"reasoning_content": "嗯,用户问“你是谁?”,我需要先确定他们想知道什么。可能他们第一次接触我,或者想确认我的身份。首先,我应该介绍自己的名字,通义千问,然后说明我是通义实验室研发的超大规模语言模型。接着,可能需要解释我的功能,比如回答问题、创作文字、编程等,这样用户能了解我的用途。还要提到我能支持多种语言,这样国际用户也会知道他们可以用不同语言交流。最后,保持友好,邀请他们提问,这样他们会觉得亲切,更愿意继续互动。不过要注意别太技术化,用简单易懂的语言。可能用户还想知道我的优势,比如训练数据量大,或者有没有其他功能,比如图像处理,但根据问题,可能暂时不需要展开。保持回答简洁,覆盖基本信息即可。需要检查有没有遗漏的重要点,比如是否提到我是AI助手,或者我的中文名和英文名。确保信息准确,比如Qwen是通义千问的英文名,通义实验室是正确的研发机构。避免使用复杂术语,让所有用户都能理解。最后确认语气友好且专业,符合助手的角色。\n",
"tool_calls": null
},
"logprobs": null,
"finish_reason": "stop",
"matched_stop": 151645
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 322,
"completion_tokens": 311,
"prompt_tokens_details": null
}
}