前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SGLang:地表最强LLM推理引擎安装经验分享,以及为何频繁掉卡?

SGLang:地表最强LLM推理引擎安装经验分享,以及为何频繁掉卡?

作者头像
AgenticAI
发布2025-03-18 15:19:16
发布2025-03-18 15:19:16
31800
代码可运行
举报
文章被收录于专栏:AgenticAIAgenticAI
运行总次数:0
代码可运行

近期在 Ubuntu 上安装地表最强 LLM 推理框架 SGLang,本次安装的大模型是 Qwen2:72B GPTQ INT8 量化,显卡 4xA100 40G,实现推理速度 40 Tokens/s。

安装过程中发现 CUDA 工具包没有,只有 nvidia-smi,没有 nvcc,因此我们还得先安装 CUDA 工具包。

1. 安装 CUAD 工具包

使用 nvidia-smi,显示驱动支持的最高 CUDA 版本为 12.4。但现有的一些推理框架,大部分都是基于 CUDA 12.1。因此我们到 NVIDIA 官方找到 CUDA 12.1 下载。

https://developer.nvidia.com/cuda-12-1-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=runfile_local

按照系统、架构、系统版本以及安装类型选择。这里选择 runfile(local),有些时候网络不好,我们直接在网络的机器下载好文件 cuda_12.1.0_530.30.02_linux.run,然后拷贝到目标机器。接下来如下执行

代码语言:javascript
代码运行次数:0
运行
复制
sudo sh cuda_12.1.0_530.30.02_linux.run

在安装过程中,可能会问你是否要安装驱动,选择不要安装。ubuntu 上驱动安装有时候会出乱子,开不了机或者进不了桌面,最好不要选择安装。安装完成后,我们将其添加到系统环境变量中。

代码语言:javascript
代码运行次数:0
运行
复制
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

激活该环境变量,

代码语言:javascript
代码运行次数:0
运行
复制
source ~/.bashrc

输入以下命令检查 CUDA 是否安装完成。

代码语言:javascript
代码运行次数:0
运行
复制
nvcc -V

2. 安装 sglang

首先我们使用 conda 建立虚拟环境并激活。

代码语言:javascript
代码运行次数:0
运行
复制
conda create -n llm python=3.10
conda activate llm

2.1 安装 sglang

SGLang 是一个用于大型语言模型和视觉语言模型的快速服务框架。通过协同设计后端运行时和前端语言,它使得与模型的交互更加快速和可控。

核心功能包括:

快速后端运行时:通过 RadixAttention 实现高效服务,支持前缀缓存、跳跃式约束解码、连续批处理、Token Attention(分页注意力)、张量并行、FlashInfer 内核,以及量化(AWQ/FP8/GPTQ/Marlin)。

灵活的前端语言:支持通过链式生成调用、先进的提示控制、控制流、多模态、并行性和外部交互,轻松编程 LLM 应用。

代码语言:javascript
代码运行次数:0
运行
复制
pip install --upgrade pip
pip install "sglang[all]" -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 安装 flashinfer

FlashInfer 是一个针对大型语言模型(LLM)的库,提供了高性能的 LLM GPU 内核实现,如 FlashAttention、SparseAttention、PageAttention、Sampling 等。FlashInfer 专注于 LLM 的服务和推理,并在各种场景中提供了最先进的性能。

  • 全面的注意力内核:提供覆盖所有 LLM 服务常见用例的注意力内核,包括 Prefill、Decode 和 Append 内核的单请求和批处理版本,支持不同格式的 KV-Cache(填充张量、不规则张量和页表)。
  • 优化的共享前缀批量解码:FlashInfer 通过级联处理提升了共享前缀批量解码的性能,相比基准 vLLM PageAttention 实现(在 32768 个 Token 的长提示和 256 大批量下),速度提升高达 31 倍。
  • 加速压缩/量化 KV-Cache 的注意力:现代 LLM 通常通过量化/压缩的 KV-Cache 部署以减少内存流量。FlashInfer 通过对分组查询注意力、融合 RoPE 注意力和量化注意力的性能优化,加速了这些场景的处理。

注意:flashinfer 只支持 SM 7.5 以上的设备,诸如 T4, A10, A100, L4, L40S, H100。

官方安装时候指定源,但是国内下载不了,因此一般我还是建议从其他机器下载好直接文件安装(如果目标机器有网络问题的话)。访问地址https://flashinfer.ai/whl/cu121/torch2.4/flashinfer/,根据自己的驱动和python版本选择。这里我们选择cuda12.1,torch 2.4 和 Python3.10 版本,如下图所示。

网络条件好的,直接执行以下命令。

代码语言:javascript
代码运行次数:0
运行
复制
# Install FlashInfer CUDA kernels
pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/

网络条件不太好的,则选择上述先下载目标文件的方式。然后执行

代码语言:javascript
代码运行次数:0
运行
复制
pip install ./flashinfer-0.1.6+cu121torch2.4-cp310-cp310-linux_x86_64.whl

安装完成后,基本工作就绪,准备运行模型。这里我们还是要设定模型远程地址为国内 modelscope,不然下载太慢了。

首先安装 modelscope pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

然后设置环境变量 SGLANG_USE_MODELSCOPE。

代码语言:javascript
代码运行次数:0
运行
复制
export SGLANG_USE_MODELSCOPE=true

这里我们在 modelscope 上找到目标模型拷贝路径,然后启动如下命令开始下载,下载完成后会自动运行。

代码语言:javascript
代码运行次数:0
运行
复制
python -m sglang.launch_server --model-path qwen/Qwen2-72B-Instruct-GPTQ-Int8 --port 30000 --tp 4 --mem-fraction-static 0.7 --chunked-prefill-size 2048

可以看到下载 35M 每秒还是挺快的。

3 运行 SGLang

代码语言:javascript
代码运行次数:0
运行
复制
python -m sglang.launch_server --model-path qwen/Qwen2-72B-Instruct-GPTQ-Int8 --port 30000 --tp 4 --mem-fraction-static 0.7 --chunked-prefill-size 2048

可以看到每秒 40 左右的吐字速度,还是非常可观的。

接下来,我们看看 sglang 的一些参数设置。

  • --tp 表示张量并行,目前是 4 卡我们设置为 4.
  • --dp 表示数据并行,官方说设置这个可以提高吞吐量,然而我设置为 4 会报显卡 ID 错误,查了一下说显卡使用 PCI-E 连接的问题,无果。
  • --mem-fraction-static,设置 GPU 显存利用率,这里 72B INT8,显存大约为 72G,因此我们 160G 卡绰绰有余,设置为 0.7 足够了。
  • --chunked-prefill-size,设置分块预填充大小,这里设置的是 2048,我其实不太理解这个是什么意思,作用是什么,官方文档说明较少,只说这后两者在 OOM 时候,尝试减少。

sglang 也提供了 benchmark 测试吞吐量,但由于这台机器出现频繁掉卡,尚未能进行 benchmark 测试。测试指令如下:

代码语言:javascript
代码运行次数:0
运行
复制
python3 -m sglang.bench_serving --backend sglang --port 8413 --dataset-name random --num-prompts 3000 --random-input 256 --random-output 512

============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Successful requests:                     3000
Benchmark duration (s):                  66.11
Total input tokens:                      378633
Total generated tokens:                  775651
Total generated tokens (retokenized):    775118
Request throughput (req/s):              45.38
Input token throughput (tok/s):          5727.04
Output token throughput (tok/s):         11732.16
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   40881.94
Median E2E Latency (ms):                 43967.10
---------------Time to First Token----------------
Mean TTFT (ms):                          19884.75
Median TTFT (ms):                        14226.56
P99 TTFT (ms):                           47738.97
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          91.96
Median TPOT (ms):                        90.11
P99 TPOT (ms):                           308.54
---------------Inter-token Latency----------------
Mean ITL (ms):                           174.54
Median ITL (ms):                         58.56
P99 ITL (ms):                            440.18
==================================================

5. 频繁掉卡

SGlang 跑起来后,这台设备的 Token 速度直线下降,直接降到 9,然后降到 1,最后崩溃了,再一查显卡掉了

重启之后,跑跑就掉卡了。原来是因为散热问题,显卡没有配备好的散热系统,导致刚启动显卡温度就直达 90 度,没一会儿就挂了。有遇到这种问题的同学,不妨找硬件工程师加散热。我这也有同学能处理,有需要的可以后台联系我。

6. 总结

本次通过讲解安装 sglang,穿插了一些依赖安装,诸如 CUDA 工具包、FlashInfer,并且讲解了遇到频繁掉卡和解决方案。希望对诸君有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AgenticAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装 CUAD 工具包
  • 2. 安装 sglang
    • 2.1 安装 sglang
    • 2.2 安装 flashinfer
    • 3 运行 SGLang
  • 5. 频繁掉卡
  • 6. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档