在Windows中使用WSL運行vLLM 精華
介紹了在 Windows 系統中通過 WSL2 運行大模型推理框架 vLLM。
vLLM 具備高吞吐、低延遲、節省顯存等優勢,適配多種模型與硬件平臺。講解了推理代碼示例,與 OpenAI API 接口兼容的部署方式。
1. vLLM的核心優勢
2. vLLM對Windows的支持
3. 安裝vLLM前的準備:Nvidia 顯卡驅動和WSL
5. 新建Python虛擬環境
6. 安裝GPU版PyTorch
6.1 確定CUDA Toolkit版本
6.2 選擇與以確認CUDA版本匹配的Pytorch
9. 安裝vLLM
8. 使用vLLM離線批量推理
8.1 下載模型
8.2 代碼示例
8.3 運行效果
9. 啟動與OpenAI API 協議兼容的服務
9.1 調用和openai兼容的補全接口(/v1/completions)
9.2 調用和openai兼容的聊天接口(/v1/chat/completions)
vLLM是伯克利大學組織開源的大語言模型高速推理框架,極大地提升實時場景下的語言模型服務的吞吐與內存使用效率。
vLLM是一個快速且易于使用的庫,用于 LLM 推理和服務,可以和HuggingFace 無縫集成。
1. vLLM的核心優勢
高性能高吞吐
vLLM 引入了PagedAttention 技術,將鍵值緩存(KV cache)分成多個小塊(pages)存儲,避免內存碎片化,減少浪費。研究表明,它在處理大模型與長上下文時,吞吐可提升 2–4 倍,搭配優化后可達最多 24×,遠勝傳統引擎如 HuggingFace Transformers 。
連續批處理
傳統方式需要將請求積滿批次后才執行,容易造成延遲與 GPU 利用率低下。vLLM 則采用動態合批機制,新請求隨時填補空余的 GPU 批次位置,既提升并行處理效率,也縮短響應時間,更適合多租戶、高請求量場景。
硬件優化加速
支持 FlashAttention、FlashInfer、CUDA/HIP Graph 等多種高效計算優化手段,能在 NVIDIA(A100、H100)等 GPU 上最大化發揮性能。同時支持多種量化方案(如 INT4/8、FP8、GPTQ、AWQ 等),在保持接近準確率的前提下顯著降低顯存使用。
適配廣泛模型與平臺
無縫兼容 Hugging Face Transformers 中的眾多模型(如 Llama、Llama 3.x、Mistral、Qwen 系列等),還支持分布式推理、多 LoRA adapter、OpenAI 風格 API 接口、流式輸出、Prefix 緩存、推理并行等功能,可運行在 NVIDIA GPU、AMD GPU/CPU、Intel 平臺、TPU、AWS Neuron 等多種硬件環境中。
可擴展部署便捷
提供 Python 庫調用、命令行 CLI 和兼容 OpenAI API 的服務模式,也易于容器化部署(Docker/Kubernetes),集成例如 LangChain、LlamaIndex、KServe、Triton 等生態,無需深入硬件底層即可快速上線。
2. vLLM對Windows的支持
官方明確指出目前 不支持 Windows 原生運行
vLLM does not support Windows natively.
To run vLLM on Windows, you can use the Windows Subsystem for Linux (WSL) with a compatible Linux distribution, or use some community-maintained forks.
https://docs.vllm.ai/en/stable/getting_started/installation/gpu.html?utm_source=chatgpt.com如果希望在 Windows 上使用,有兩種可行方案:
- 通過 WSL2 在 Windows 上運行
利用 Windows 的 Linux 子系統,可以讓 vLLM 在這類“虛擬”的 Linux 環境中運行。
- 使用 Docker
通過 Docker Desktop + WSL 后端,可在 Windows 上啟動 vLLM 服務
下面開始基于WSL2來進行安裝
3. 安裝vLLM前的準備:Nvidia 顯卡驅動和WSL
為了運行 CUDA 應用程序,系統應具備與 CUDA Toolkit 兼容的 NVIDIA顯示驅動程序。
我們一般在電腦操作系統安裝完成后,就安裝了,因為要玩游戲.
WSL是一個為在Windows 10和Windows Server 2019以上能夠原生運行Linux二進制可執行文件(ELF格式)的兼容層.允許在不需要單獨的虛擬機或雙啟動的情況下使用 Linux 環境。
WSL2基于Hyper-V技術,運行多個帶有GNU/Linux鏡像的虛擬機,擁有完整的Linux內核與對Systemd的支持。
WSL 比完整的虛擬機所需的資源(CPU、內存和存儲)更少。
5. 新建Python虛擬環境
python3.11 -m venv .venv激活虛擬環境
source .venv/bin/activate如果新建虛擬環境失敗,重新安裝下Python
sudo apt install python3.11-full
6. 安裝GPU版PyTorch
PyTorch 是一個開源的深度學習框架,由 Facebook AI 研究院開發和維護。它主要用于構建和訓練神經網絡,特別適合研究人員和開發者用來進行機器學習和人工智能的開發工作。
PyTorch 用的是 Python 語言,語法非常接近 NumPy(Python 里一個常用的科學計算庫),但它在此基礎上還加入了對 GPU 加速的支持,也就是說你可以把計算任務放到顯卡上運行,大大提高訓練速度。
現在很多主流的人工智能研究和工業應用,比如自然語言處理、圖像識別、推薦系統等等,都有大量項目是用 PyTorch 來實現的。像 OpenAI、Meta、Microsoft 等很多團隊的項目中,也廣泛使用 PyTorch。
如果已經安裝了CPU版的torch,如下:
(.venv) pip list
Package Version
--------------------------------- -------------
...
torch 2.7.1
torchaudio 2.7.1
torchvision 0.22.1
...需要先卸載了 ??pip uninstall torch torchaudio torchvision??
GPU版本應該類似:
torch 2.7.1+cu126
torchaudio 2.7.1+cu126
torchvision 0.22.1+cu1266.1 確定CUDA Toolkit版本
打開CMD(非WSL環境)命令行執行:??nvidia-smi??命令
看到的???CUDA Version:12.8??? 就是當前系統支持???CUDA Toolkit???的最高版本號,接下來安裝的CUDA運行時不能高于這個版本
??Driver Version??: 顯卡驅動版本號
PS C:\Users\sixon> nvidia-smi
Sat Jul 26 16:46:37 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 572.83 Driver Version: 572.83 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 2050 WDDM | 00000000:01:00.0 Off | N/A |
| N/A 57C P8 5W / 43W | 2079MiB / 4096MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+6.2 選擇與以確認CUDA版本匹配的Pytorch
PyTorch 通過調用 CUDA 提供的庫(如 cuDNN、cuBLAS),實現了 GPU 加速的深度學習功能。將 CUDA 的底層功能封裝為易于使用的高層 API,讓開發者專注于模型構建和訓練。這使得 PyTorch 用戶無需關心 CUDA 的底層實現細節。
PyTorch 的發行版通常會綁定對應版本的 CUDA,例如 ??torch==2.0.0+cu118?? 表示這個版本的 PyTorch 使用 CUDA 11.8
選擇正確的Pytorch版本:
打開Pytorch官網:
??https://pytorch.org/get-started/locally/??
PyTorch Build: 選標準版本Stable
Your OS: 選自己的系統版本
Package: 選包管理工具,這邊選擇pip
Language: 我這邊選擇Python
Compute Platform:這個CUDA版本選擇小于nvidia-smi的CUDA Version,這個版本就是PyTorch編譯時使用的運行時環境,Torch安裝后會自帶運行時(這時系統中沒有單獨安裝CUDA Toolkit,你也會發現應用程序可以運行在Torch自帶CUDA運行時中)
Run this Command: 最后根據所選項目生成的安裝命令

安裝:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126檢查torch的狀態:
在Python環境中查詢,可以查到??torch.cuda.is_available()=True??
(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$ python
Python 3.11.13 (main, Jun 4 2025, 08:57:30) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.__version__)
2.7.1+cu126
>>> print(torch.cuda.device_count())
1
>>>7. 安裝vLLM
pip install vllm8. 使用vLLM離線批量推理
安裝好 vLLM 之后,你可以開始對一組提示詞進行文本生成,也就是離線批量推理。
8.1 下載模型
modelscope download --model Qwen/Qwen3-0.6B-GPTQ-Int8 --local_dir ./ckpts/qwen3-0.6b-gptq-int88.2 代碼示例
# 運行前先下載模型
# modelscope download --model Qwen/Qwen3-0.6B-GPTQ-Int8 --local_dir ./ckpts/qwen3-0.6b-gptq-int8
from vllm import LLM, SamplingParams
# 提示詞
prompts = [
"從前有座山",
"今年夏天好熱"
]
# 創建采樣參數對象
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
def main():
# 創建LLM實例
llm = LLM(
model="./ckpts/qwen3-0.6b-gptq-int8",
swap_space="1",
gpu_memory_utilizatinotallow=0.7,
max_model_len=6000
)
print("創建LLM實例成功")
# 從提示詞生成文本
# 輸出是一個RequestOutput對象列表
# 包含提示詞、生成的文本和其他信息
outputs = llm.generate(prompts, sampling_params)
# 打印輸出結果
print("\nGenerated Outputs:\n" + "-" * 60)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}")
print(f"Output: {generated_text!r}")
print("-" * 60)
if __name__ == "__main__":
main()在這個示例的開頭,導入了兩個核心類:??LLM??? 和 ??SamplingParams??。
??LLM?? 是用來運行 vLLM 引擎、執行離線推理的主要類;
??SamplingParams?? 用來設置文本生成時的采樣參數。
接下來的部分,定義一組提示詞(prompts)和用于文本生成的采樣參數。
之后,通過 ??LLM?? 類會初始化 vLLM 引擎,并加載我們模型(ckpts/qwen3-0.6b-gptq-int8),用于執行離線推理。
接下來就是使用 ??llm.generate?? 就可以開始生成文本。
這個方法會把你提供的提示詞加入到 vLLM 引擎的等待隊列中,然后啟動引擎以高吞吐量的方式生成輸出結果。
生成的內容會以一組 ??RequestOutput?? 對象的形式返回,每個對象都包含完整的輸出 token。
8.3 運行效果
(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$ python hello-1.py
...
Generated Outputs:
------------------------------------------------------------
Prompt: '從前有座山'
Output: ',山腳是花。當桃花開時,山中才會成景'
------------------------------------------------------------
Prompt: '今年夏天好熱'
Output: ',可能和哪幾方面有關? 作為一位退休教師,我'
------------------------------------------------------------
(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$9. 啟動與OpenAI API 協議兼容的服務
vLLM 可以作為一個兼容 OpenAI API 協議的服務器運行。
這樣一來,原本依賴 OpenAI API 的應用程序幾乎不用改動,就可以直接切換到使用 vLLM。
默認情況下,它會在 ???http://localhost:8000?? 啟動服務。
vllm serve ckpts/qwen3-0.6b-gptq-int8 --swap-space 1 --gpu-memory-utilization 0.7 --max-model-len 60009.1 調用和openai兼容的補全接口(/v1/completions)
# 補全接口
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ckpts/qwen3-0.6b-gptq-int8",
"prompt": "從前有座山",
"max_tokens": 100,
"temperature": 0
}'
{"id":"cmpl-b670ffb18c9a49a4915bb120ece2d63d","object":"text_completion","created":1753526021,"model":"ckpts/qwen3-0.6b-gptq-int8","choices":[{"index":0,"text":",山上有樹,樹上有鳥,鳥有鳥巢。山上的鳥巢是鳥的家。這說明了什么?\n\nA. 人類的家是鳥的家\nB. 人類的家是鳥的家\nC. 人類的家是鳥的家\nD. 人類的家是鳥的家\n答案:A\n答案:A\n答案:A\n答案:A\n\n答案:A\n答案:A\n\n答案:A\n","logprobs":null,"finish_reason":"length","stop_reason":null,"prompt_logprobs":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":4,"total_tokens":104,"completion_tokens":100,"prompt_tokens_details":null},"kv_transfer_params":null}9.2 調用和openai兼容的聊天接口(/v1/chat/completions)
# 聊天接口
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ckpts/qwen3-0.6b-gptq-int8",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "寫一篇不超過300字的中文科幻小說"}
]
}'
{"id":"chatcmpl-e92ffd1f36b94a6ebfb5561746ebcd86","object":"chat.completion","created":1753526114,"model":"ckpts/qwen3-0.6b-gptq-int8",
"choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好的,用戶讓我寫一篇不超過300字的中文科幻小說。首先,我需要確定故事的主題和核心沖突。科幻小說通常涉及未來科技、外星生命或人類與科技的關系。考慮到字數限制,我需要簡潔有力,不能拖沓。\n\n接下來,用戶可能希望故事有懸念或轉折,所以得設計一個引人入勝的情節。比如,可以設定一個未來社會,科技已經高度發達,但人類面臨某種危機。比如,月球上的外星生命體入侵,或者某種未知的科技威脅。\n\n然后,考慮角色。主角可以是一個普通人,比如科學家或普通市民,通過自己的經歷揭示更大的問題。這樣能增加故事的可信度。比如,主角發現月球上的生物,引發一系列事件,最終揭示真相。\n\n還要注意字數,300字以內,所以每個場景都要簡潔。可能需要分幾個段落,每段集中一個關鍵點。比如,開頭介紹主角和發現的線索,中間發展沖突,最后解決或留下懸念。\n\n另外,用戶可能希望故事有情感元素,比如孤獨、希望或犧牲。這樣能讓讀者產生共鳴。比如,主角在發現外星生命后,選擇幫助人類,或者犧牲自己保護他們。\n\n最后檢查是否符合要求,沒有超過字數,主題明確,結構緊湊。確保語言流暢,沒有語法錯誤。這樣就能滿足用戶的需求了。\n</think>\n\n《月光之書》\n\n林深站在月球觀測站,望著直徑300公里的月球背面。那里曾是人類最深的禁區,直到某個深夜,他發現衛星軌道上浮現出一行陌生的符號——\"2077年,月球文明將被喚醒\"。\n\n他用全息投影在月球表面繪制出時間線,卻在第四個星系發現異常。當月球背面的生物群落開始發光時,林深意識到自己可能觸碰到真正的文明。他帶著生物學家和量子探測器潛入月球,卻發現這些生命體不是外星,而是人類的進化產物。\n\n在月球核心,他發現時間循環裝置。當林深將自己的時間線與生物體的基因序列對接時,整個月球表面開始同步閃爍。他顫抖著按下啟動按鈕,月球開始以人類的視角重演自己誕生的那一刻。\n\n(字數:298)","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning_content":null},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":30,"total_tokens":527,"completion_tokens":497,"prompt_tokens_details":null},"prompt_logprobs":null,"kv_transfer_params":null}本文轉載自????AI取經路??,作者:AI取經路

















