
如何使用 SGLang 离线 Engine API 完成不带 HTTP 服务的批量推理【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang如果你需要在一批 prompt 上跑离线推理但不想为此先启动一个 HTTP 服务、再通过客户端逐条或批量发请求SGLang 提供了离线 Engine API用sgl.Engine在进程内直接加载模型并调用generate接口一次传入多条 prompt 即可完成批量生成。该方式适用于离线批处理以及基于引擎搭建自有服务接口这两类场景本文只覆盖离线批处理。适用前提以文档说明为准Python 3.10 或更高版本主要面向 NVIDIA GPU 平台SGLang 要求 CUDA 13CUDA 12 的cu129wheel 和镜像已停发SGLang 0.5.19是最后一个带 CUDA 12 通道的版本。准备安装 SGLang按 安装文档 的方式推荐用 uv 安装pip install --upgrade pip pip install uv uv pip install --prereleaseallow sglang这里的--prereleaseallow不能省SGLang 的部分依赖在 PyPI 上只发布了 pre-release 版本不加该参数时旧版 uv 会静默装到 SGLang 0.5.9而 uv 0.12.0 起该参数是无副作用的 no-op。如果安装时遇到OSError: CUDA_HOME environment variable is not set文档给出的两个解决办法是用export CUDA_HOME/usr/local/cuda-your-cuda-version把CUDA_HOME指向你的 CUDA 安装根目录或先按 FlashInfer 安装文档装好 FlashInfer 再装 SGLang。主路径同步非流式批量推理最小可用的主路径在 离线 Engine API 文档 中分两步启动引擎然后一次性把 prompt 列表交给generate。import sglang as sgl llm sgl.Engine(model_pathqwen/qwen2.5-0.5b-instruct)model_path换成你要跑的模型。启动后传入 prompt 列表和采样参数prompts [ Hello, my name is, The president of the United States is, The capital of France is, The future of AI is, ] sampling_params {temperature: 0.8, top_p: 0.95} outputs llm.generate(prompts, sampling_params) for prompt, output in zip(prompts, outputs): print() print(fPrompt: {prompt}\nGenerated text: {output[text]})generate的返回是一个与输入 prompt 一一对应的列表每个元素是字典生成的文本在text字段里。批量调度由引擎负责如果一次传入很大的 batch引擎会智能调度请求避免 OOMOut of Memory——这一点在 引擎示例说明 中有明确描述所以不必自己把大 batch 拆小。同样的逻辑也封装成了可直接运行的脚本 offline_batch_inference.py它通过ServerArgs.add_cli_args把全部服务参数暴露成命令行选项运行时只需指定模型python3 offline_batch_inference.py --model meta-llama/Llama-3.1-8B-Instruct注意这个脚本以及仓库里所有sgl.Engine入口脚本都带了if __name__ __main__:保护这不是形式问题引擎用 spawn 方式创建子进程spawn 每次启动一个全新进程如果没有__main__保护会陷入无限循环地继续 spawn 子进程。自己写脚本时保留这个结构。验证结果文档给出的验证方式就是脚本自身的打印程序对每条 prompt 输出一段以分隔线开头、包含Prompt: ...和Generated text: ...的结果。跑完 4 条 prompt 就应该看到 4 段这样的输出输出条数与输入 prompt 数一致即为正常完成。文档没有给出固定的生成文本样例Generated text的具体内容取决于模型和采样参数不应把任何示例输出当成必须命中的固定值。可选分支流式与异步模式主路径之外同一文档演示了另外三种调用方式都复用上面启动的llm同步流式。用stream_and_merge定义在 sglang/utils.py逐条 prompt 流式合并输出from sglang.utils import stream_and_merge for prompt in prompts: merged_output stream_and_merge(llm, prompt, sampling_params) print(Generated text:, merged_output)异步非流式。在async函数里await llm.async_generate(prompts, sampling_params)同样接收 prompt 列表、返回output[text]入口用asyncio.run(main())驱动。异步流式。用async for cleaned_chunk in async_stream_and_merge(llm, prompt, sampling_params)逐块打印async_stream_and_merge同样来自 sglang/utils.py。仓库中的 offline_batch_inference_async.py 展示了异步模式的批量用法把 400 条 prompt4 条样本 × 100 副本各自asyncio.create_task并发提交再逐个await取结果。该脚本同样支持--model-path等完整命令行参数例如python offline_batch_inference_async.py --model-path Qwen/Qwen2-VL-7B-Instruct如果你的目标是大 batch 离线跑满吞吐异步提交 引擎端调度是文档推荐的组合如果只需要脚本式的一条命令批处理同步generate已经够用。使用限制ipython 或其他嵌套事件循环环境直接asyncio.run会失败文档要求先执行nest_asyncio.apply()再使用离线引擎。模型来源示例中使用的是 Hugging Face 模型名如meta-llama/Meta-Llama-3.1-8B-Instruct、qwen/qwen2.5-0.5b-instruct需要能访问对应模型源换用本地路径时替换model_path即可。进程收尾批处理结束后调用llm.shutdown()释放引擎资源见 launch_engine.py 的完整最小示例。进一步同一引擎 API 还支持 VLM 离线批量推理offline_batch_inference_vlm.py和提取 hidden statesexamples/runtime/hidden_states如果想在这个引擎之上自建带/generate、/generate_stream接口的服务可参考 custom_server.py 的 Sanic 示例但这已经偏离不启动 HTTP 服务的目标仅在需要时再看。【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考