看到很多同行朋友弄了很多学习的仓库,本人也是技术知识分享的爱好者,手也痒痒,喜欢写一些技术文章,于是我也创建了一个Github学习仓库vLLM_SGLang_cuteDSL_tutorial,从名字可以看出,聚焦于vLLM_SGLang_cuteDSL,先这些,如果后期呼声高,我再增加。
Github学习仓库 vLLM_SGLang_cuteDSL_tutorial
仓库链接:https://github.com/RussWong/vLLM_SGLang_cuteDSL_tutorial,喜欢就点个⭐吧!
本仓库主要介绍vLLM, SGLang, cuteDSL等(更多待补充)领域相关知识,你可以明显看出,主要针对大模型推理引擎和Kernel Python DSL。
现今,最流行的开源大模型推理引擎依然是vLLM和SGLang,希望本仓库的jupyter notebook和一些python+cpp代码能帮助大家更好地使用和学习vLLM和SGLang。
另外,Kernel Python DSL是当今流行的kernel开发模式(agent除外),降低了传统高性能Kernel开发的门槛,其中,以cuteDSL为代表,cute cutlass一直是大家头疼的算子库项目,cuteDSL使得更多人都可以参与进来,探索cute layout algebra的乐趣,Enjoy!
vLLM notebook
注意:notebook链接请进入github参看,公众号无法解析成功这类外部链接
相关练习代码采用python语言,以notebook形式呈现,帮助读者快速了解或掌握相关内容。
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
SGLang notebook
注意:notebook链接请进入github参看,公众号无法解析成功这类外部链接
相关练习代码采用python语言,以notebook形式呈现,帮助读者快速了解或掌握相关内容。
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
cuteDSL
| 📓 Notebook 链接 | 🧠 Notebook 主要内容 | 🧩 难度等级 | ⭐ 难度 |
|---|---|---|---|
| cutedsl_layout_tensor_minimal_demo.ipynb | cutedsl tensor入门,演示 cute.jit 与 cutlass.cute.runtime.from_dlpack 的最小并发调用流程。 |
入门 | ⭐⭐ |
Notebook知识介绍
以下是个简单介绍,建议配合具体note
共同环境假设:Linux 优先(Windows 建议 WSL2)、Python 3.8+、NVIDIA GPU,首次运行会从 Hugging Face 拉模型,需网络或本地缓存。
1.sglang_async_generate_minimal_demo.ipynb
功能:从「同步一条条 generate」过渡到 Engine.async_generate + 事件循环并发。对齐官方异步离线推理思路(offline_batch_inference_async.py )。
安装与运行:
-
建虚拟环境并安装与 CUDA 匹配的 PyTorch(文档中给的是示例索引,需按本机 CUDA 改)。 pip install -U sglang openai,再 pip install jupyter。-
在 notebook 目录执行: jupyter-lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root。
默认模型:Qwen/Qwen2.5-1.5B-Instruct;建议你的GPU显存 8GB+。
技术要点:
-
使用 sgl.Engine(...),参数偏保守:mem_fraction_static=0.70、max_running_requests=8、max_total_tokens=8192 等。
-
对多条短 prompt 使用 asyncio.create_task + asyncio.gather 并发调用 await engine.async_generate(...),并打印总耗时与输出摘要。
-
Notebook 中直接用 await run_async_batch(),避免再套一层 asyncio.run(...) 触发事件循环冲突。
-
OOM 时可降低 max_running_requests / max_total_tokens 或换更小模型。
2.sglang_attention_backend_knobs_minimal_demo.ipynb
功能:聚焦 sgl.Engine 的attention backend旋钮:统一后端 vs prefill / decode 分离后端,并带候选列表自动回退作为backup,全部attention backend列表为"triton", "flashinfer", "fa3", "torch_native"
安装与运行:
-
与前面相同:sglang + openai + jupyter。
-
执行顺序:环境自检,Demo1统一后端 ,Demo2 分离后端(可选),关闭 split_engine 与 engine。
默认模型同样为 Qwen/Qwen2.5-1.5B-Instruct,显存紧张时建议降低 max_total_tokens。
技术要点:
-
四个观察参数:attention_backend、prefill_attention_backend、decode_attention_backend、disable_flashinfer_autotune(示例里设为 True 便于观察、减少 autotune 干扰)。
-
Demo1:在 CUDA 上按顺序尝试 triton → flashinfer → fa3 → torch_native 建 Engine,成功则用 engine.generate 跑两条 prompt。
-
Demo2:尝试分离组合,如 (fa3, triton),失败则回退 (triton, triton)、(torch_native, torch_native);用独立 split_engine 再 generate。
3.vllm_local_single_gpu_quickstart.ipynb
功能:单卡部署的最短路径,vllm serve 拉起 OpenAI 兼容 HTTP API,再用官方 openai Python SDK 调 chat.completions,不涉及多卡、KV 调优或改框架源码。
安装与运行:
-
虚拟环境。 -
安装带 CUDA 的 PyTorch(示例为 cu124,可按需改为其它cuda版本)。 -
pip install "vllm>=0.6.0" "openai>=1.0.0" "httpx>=0.24.0",pip install jupyter。 -
PS:如以上三步配置环境麻烦,则可选 Docker 一键环境:vllm/vllm-openai 镜像 + --gpus all 等(适合想跳过本机编译/依赖的用户)。 -
使用方式二选一:方式 A 终端先 vllm serve ...,Notebook 只跑客户端;方式 B 在 Notebook 里 subprocess.Popen 后台启动并轮询 /v1/models 直到就绪。
-
环境自检:Python、torch、torch.cuda.is_available()、GPU 名称与显存。同样 Docker 一键快速安装环境也可。 -
启动逻辑:shutil.which("vllm") 找到则用 CLI,否则回退 python -m vllm.entrypoints.openai.api_server;
-
客户端:OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="EMPTY"),chat.completions.create,打印回复与 usage。
-
结束:对 Notebook 启动的子进程发 SIGTERM 释放显存;若服务在终端起,需终端 Ctrl+C。
建立完整链路:PyTorch + vLLM → OpenAI 兼容端点 → 与云端 OpenAI 相同的客户端写法,适合作为后续所有 vLLM 学习的baseline
4.vllm_multi_turn_memory_minimal_demo.ipynb
功能:在上一套部署能力之上,演示多轮对话记忆,用 messages 列表累积 user / assistant,并在每次请求前 trim_history,避免上下文无限变长。默认模型 Qwen/Qwen2.5-0.5B-Instruct,启动参数示例含 --max-model-len 2048、--gpu-memory-utilization 0.9 等。
安装与运行:
-
环境与上一套类似:PyTorch(示例 cu124)+ vllm + openai + httpx + jupyter;同样 Docker 一键快速安装环境也可。
-
方式 A / B:终端先起服务,或 Notebook 内 Popen 启动并把日志写入文件,轮询 /v1/models 就绪。
-
顺序大致为:环境自检 → 启动 vLLM → 客户端初始化与 trim_history / chat_once → 多轮示例对话 → 停止进程。
-
conversation_history 含一条 system 角色设定。
-
trim_history(history, max_turns=6):保留 system,再只保留最近 6 轮(每轮约 2 条消息,即 max_turns * 2 条对话消息)。
-
chat_once:追加 user → 裁剪 → client.chat.completions.create → 追加 assistant → 再裁剪并 clear/extend 回写列表,防止列表无限膨胀。
-
示例对话覆盖先记住偏好 → 再追问要结合历史的闭环。
关注我
https://github.com/RussWong/vLLM_SGLang_cuteDSL_tutorial,仓库链接, 喜欢就点个⭐吧!
知乎
不归牛顿管的熊猫
公众号
AI不止算法

