【agent開發】部署LLM(一)

本周基本就是在踩坑,沒什么實質性的進展

下載模型文件

推薦一個網站,可以簡單計算下模型推理需要多大顯存:https://apxml.com/tools/vram-calculator
4070
我的顯卡是RTX 4070,有12GB的顯存,部署一個1.7B的Qwen3應該問題不大。有之前使用LLM Studio的經驗,這次我打算直接使用VLLM運行模型,用Openapi的接口調用。

從huggingface下載的全部文件如下:


----                 -------------         ------ ----
-a---           2025/5/31    10:58            726 config.json
-a---           2025/5/31    10:59            239 generation_config.json
-a---           2025/5/31    10:58           1570 gitattributes
-a---           2025/5/31    10:59        1671853 merges.txt
-a---           2025/5/31    15:00     3441185608 model-00001-of-00002.safetensors
-a---           2025/5/31    17:32      622329984 model-00002-of-00002.safetensors
-a---           2025/5/31    10:59          25605 model.safetensors.index.json
-a---           2025/5/31    10:58          13963 README.md
-a---           2025/5/31    11:00           9732 tokenizer_config.json
-a---           2025/5/31    11:00       11422654 tokenizer.json
-a---           2025/5/31    11:01        2776833 vocab.json

WSL

官方的教程只提到了Linux,那我首選當然是在WSL下部署。不過我的WSL并沒有安裝CUDA,Windows也沒有。我決定先不裝,看看直接安裝VLLm會怎么樣。

安裝一行就夠了:

pip install vllm -i https://mirrors.aliyun.com/pypi/simple

我用的阿里云鏡像(因為之前下載了太多的apt庫被清華源封禁了orz)

然后使用如下命令部署openai接口的llm server(vllm版本為0.9.0.1):

python3 -m vllm.entrypoints.openai.api_server --model Qwen3-1.7B --host 0.0.0.0 --port 8000 --served-model-name qwen3
  • --model 后面需要接本地的模型位置,如果是在線模型會自動下載。
  • --served-model-name 可以為你部署的模型起一個別名,這樣方便在post請求中訪問

我也編寫了測試的代碼用于驗證模型是否返回成功


import requests
import json
import time# 服務地址
api_base = "http://127.0.0.1:8000/v1"
api_key = "none"  # vLLM不需要API密鑰,填任意值# 請求頭
headers = {"Content-Type": "application/json","Authorization": f"Bearer {api_key}"
}# 請求參數
payload = {"model": "qwen-3.5b-chat","messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "請問Python有哪些常用的深度學習框架?"}],"temperature": 0.7,"max_tokens": 1024
}# 發送請求
start_time = time.time()
response = requests.post(f"{api_base}/chat/completions",headers=headers,data=json.dumps(payload)
)
end_time = time.time()# 處理響應
if response.status_code == 200:result = response.json()print(f"生成時間: {end_time - start_time:.2f}秒")print(f"模型: {result['model']}")print(f"回復: {result['choices'][0]['message']['content'].strip()}")
else:print(f"請求失敗: {response.status_code}")print(response.text)

然而事實上是,VLLM運行成功了,而且我能明顯看到顯存占用:
在這里插入圖片描述
顯存占用如下:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.02              Driver Version: 560.94         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | 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 4070        On  |   00000000:01:00.0  On |                  N/A |
| 30%   36C    P8             10W /  215W |   11772MiB /  12282MiB |     15%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A      1216      C   /python3.10                                 N/A      |
+-----------------------------------------------------------------------------------------+

因為我沒有限定token,也沒有指定初始化參數,這個占用幾乎就是貼著顯存上限跑的。不過具體進程的顯存占用就看不到了,因為如下原因:

ProcessesGPU instance ID                   : N/ACompute instance ID               : N/AProcess ID                        : 1216Type                          : CName                          : /python3.10Used GPU Memory               : Not available in WDDM driver model

我的顯卡當前處于 WDDM 模式,WDDM模式下,nvidia-smi無法獲得每個進程的顯存占用,因為所有進程都是在WDDM這個抽象框架下運行的,nvidia驅動只能獲得使用的進程名,無法準確獲得每個進程所占用的顯存.我可以選擇拔掉顯示器切換到TCC模式,這樣就能看見顯存占用了,但是顯卡也顯示不了圖像了。。。

當然這不是最大的問題,最大的問題是就算在WSL本地,我也無法訪問LLM的地址:

bluebonnet27@bluebonnet27:~$ curl 127.0.0.1:8000
curl: (7) Failed to connect to 127.0.0.1 port 8000 after 0 ms: Connection refused

由于VLLM的server是uvicorn驅動的,因此我懷疑是不是uvicorn的問題,一方面,我先使用python自帶的http-server起一個服務器:

python3 -m http.server 8000

結果curl直接超時。。。

bluebonnet27@bluebonnet27:~$ curl localhost:8000curl: (28) Failed to connect to localhost port 8000 after 133901 ms: Connection timed out

這個網絡問題到現在我也沒解決,如果下周還沒解決,我只能先在代碼里用本地調用的方式起大模型了。

Windows

Windows倒也能裝VLLM,和WSL一個命令。安裝過程會報一個詭異的錯誤:

error: could not create 'build\bdist.win-amd64\wheel\.\vllm\model_executor\layers\fused_moe\configs\E=128,N=384,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8,block_shape=[128,128].json': No such file ordirectory

這個報錯的原因是Windows默認不支持超過260個字符的文件路徑。去注冊表解除限制即可:

  1. 按 Win + R 打開運行窗口,輸入 regedit 并回車。
  2. 導航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  3. 找到 LongPathsEnabled 項,將其值設置為 1

然后我安裝的VLLM在起模型的時候就報錯了:

PS D:\Codes\models> python -m vllm.entrypoints.openai.api_server --model Qwen3-1.7B --host 0.0.0.0 --port 8000 --served-name qwen3
INFO 06-02 17:18:26 [importing.py:16] Triton not installed or not compatible; certain GPU-related functions will not be available.
WARNING 06-02 17:18:26 [importing.py:28] Triton is not installed. Using dummy decorators. Install it via `pip install triton` to enable kernel compilation.
INFO 06-02 17:18:26 [__init__.py:243] Automatically detected platform cuda.
Traceback (most recent call last):File "<frozen runpy>", line 189, in _run_module_as_mainFile "<frozen runpy>", line 112, in _get_module_detailsFile "C:\privatePrograms\Lib\site-packages\vllm\__init__.py", line 12, in <module>from vllm.engine.arg_utils import AsyncEngineArgs, EngineArgsFile "C:\privatePrograms\Lib\site-packages\vllm\engine\arg_utils.py", line 20, in <module>from vllm.config import (BlockSize, CacheConfig, CacheDType, CompilationConfig,File "C:\privatePrograms\Lib\site-packages\vllm\config.py", line 32, in <module>from vllm.model_executor.layers.quantization import (QUANTIZATION_METHODS,File "C:\privatePrograms\Lib\site-packages\vllm\model_executor\__init__.py", line 3, in <module>from vllm.model_executor.parameter import (BasevLLMParameter,File "C:\privatePrograms\Lib\site-packages\vllm\model_executor\parameter.py", line 9, in <module>from vllm.distributed import get_tensor_model_parallel_rankFile "C:\privatePrograms\Lib\site-packages\vllm\distributed\__init__.py", line 3, in <module>from .communication_op import *File "C:\privatePrograms\Lib\site-packages\vllm\distributed\communication_op.py", line 8, in <module>from .parallel_state import get_tp_groupFile "C:\privatePrograms\Lib\site-packages\vllm\distributed\parallel_state.py", line 149, in <module>from vllm.platforms import current_platformFile "C:\privatePrograms\Lib\site-packages\vllm\platforms\__init__.py", line 275, in __getattr___current_platform = resolve_obj_by_qualname(^^^^^^^^^^^^^^^^^^^^^^^^File "C:\privatePrograms\Lib\site-packages\vllm\utils.py", line 2191, in resolve_obj_by_qualnamemodule = importlib.import_module(module_name)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\privatePrograms\Lib\importlib\__init__.py", line 90, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\privatePrograms\Lib\site-packages\vllm\platforms\cuda.py", line 14, in <module>import vllm._C  # noqa^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'vllm._C'

核心在于最后一行,可能是因為我電腦上沒有安裝CUDA Toolkit,所以安裝的VLLM版本不對,應該是CPU版本的

PS D:\Codes\models> pip show vllm
Name: vllm
Version: 0.9.0.1
Summary: A high-throughput and memory-efficient inference and serving engine for LLMs
Home-page:
Author: vLLM Team
Author-email:
License:
Location: C:\privatePrograms\Lib\site-packages
Requires: aiohttp, blake3, cachetools, cloudpickle, compressed-tensors, depyf, einops, fastapi, filelock, gguf, huggingface-hub, lark, lm-format-enforcer, mistral_common, msgspec, ninja, numpy, openai, opencv-python-headless, opentelemetry-api, opentelemetry-exporter-otlp, opentelemetry-sdk, opentelemetry-semantic-conventions-ai, outlines, partial-json-parser, pillow, prometheus-fastapi-instrumentator, prometheus_client, protobuf, psutil, py-cpuinfo, pydantic, python-json-logger, pyyaml, pyzmq, regex, requests, scipy, sentencepiece, setuptools, six, tiktoken, tokenizers, tqdm, transformers, typing_extensions, watchfiles
Required-by:

能看出來少了很多GPU相關的庫,比如torch。鑒于官方沒有對Windows的支持,只能暫時繼續回去折騰WSL。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82273.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據-274 Spark MLib - 基礎介紹 機器學習算法 剪枝 后剪枝 ID3 C4.5 CART

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; 大模型篇章已經開始&#xff01; 目前已經更新到了第 22 篇&#xff1a;大語言模型 22 - MCP 自動操作 FigmaCursor 自動設計原型 Java篇開…

flutter常用動畫

Flutter 動畫基礎概念 術語解釋Animation表示動畫的值&#xff0c;通常是一個 double (0.0 ~ 1.0) 或其他數值。AnimationController管理動畫的時間進度和狀態。需要 Ticker (vsync) 來驅動。Tween定義動畫的取值范圍&#xff0c;如從 0.0 到 1.0&#xff0c;從紅色到藍色。Cu…

Python打卡DAY43

復習日 作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 進階&#xff1a;并拆分成多個文件 我選擇ouIntel Image Classification | Kagglezz&#xff0c;該數據集分為六類&#xff0c;包含建筑、森林、冰川、山脈、海洋和街道…

從多巴胺的誘惑到內啡肽的力量 | 個體成長代際教育的成癮困局與破局之道

注&#xff1a;本文為“多巴胺&#xff0c;內啡肽”相關文章合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 年少偏愛多巴胺&#xff0c;中年才懂內啡肽 摘要 &#xff1a;本文通過生活實例與科學研究相結合的方式…

【音視頻】H265 NALU分析

1 H265 概述 H264 與 H265 的區別 傳輸碼率&#xff1a;H264 由于算法優化&#xff0c;可以低于 2Mbps 的速度實現標清數字圖像傳送&#xff1b;H.265 High Profile 可實現低于 1.5Mbps 的傳輸帶寬下&#xff0c;實現 1080p 全高清視頻傳輸。 編碼架構&#xff1a;H.265/HEVC…

Python訓練營打卡 Day26

知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時 ——————————————————————…

PH熱榜 | 2025-05-29

1. Tapflow 2.0 標語&#xff1a;將你的文檔轉化為可銷售的指導手冊、操作手冊和工作流程。 介紹&#xff1a;Tapflow 2.0將各類知識&#xff08;包括人工智能、設計、開發、營銷等&#xff09;轉化為有條理且可銷售的產品。現在你可以導入文件&#xff0c;讓人工智能快速為你…

GitHub 趨勢日報 (2025年05月30日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 833 agenticSeek 789 prompt-eng-interactive-tutorial 466 ai-agents-for-beginn…

Cesium 8 ,在 Cesium 上實現雷達動畫和車輛動畫效果,并控制顯示和隱藏

目錄 ?前言 一、功能背景 1.1 核心功能概覽 1.2 技術棧與工具 二、車輛動畫 2.1 模型坐標 2.2 組合渲染 2.3 顯隱狀態 2.4 模型文件 三、雷達動畫 3.1 創建元素 3.2 動畫解析 3.3 坐標聯動 3.4 交互事件 四、完整代碼 4.1 屬性參數 4.2 邏輯代碼 加載車輛動畫…

相機--相機標定

教程 相機標定分類 相機標定分為內參標定和外參標定。 內參標定 目的 作用 原理 外參標定

JS手寫代碼篇---手寫類型判斷函數

9、手寫類型判斷函數 手寫完成這個函數&#xff1a;輸入一個對象(value)&#xff0c;返回它的類型 js中的數據類型&#xff1a; 值類型&#xff1a;String、Number、Boolean、Null、Undefied、Symbol引用類型&#xff1a;Object、Array、Function、RegExp、Date 使用typeOf…

量子物理:初步認識量子物理

核心特點——微觀世界與宏觀世界的差異 量子物理(又稱量子力學)是物理學中描述微觀世界(原子、電子、光子等尺度)基本規律的理論框架。它與我們熟悉的經典物理(牛頓力學、電磁學等)有根本性的不同,因為微觀粒子的行為展現出許多奇特且反直覺的現象。 簡單來說,量子物…

springboot配置cors攔截器與cors解釋

文章目錄 cors?代碼 cors? CORS&#xff08;跨域資源共享&#xff09;的核心機制是 由后端服務器&#xff08;bbb.com&#xff09;決定是否允許前端&#xff08;aaa.com&#xff09;的跨域請求 當瀏覽器訪問 aaa.com 的頁面&#xff0c;并向 bbb.com/list 發起請求時&#…

國芯思辰| 同步降壓轉換器CN2020應用于智能電視,替換LMR33620

在智能電視不斷向高畫質、多功能、智能化發展的當下&#xff0c;其內部電源管理系統的性能至關重要。同步降壓轉換器可以為智能電視提供穩定、高效的運行。 國芯思辰CN2020是一款脈寬調制式同步降壓轉換器。內部集成兩個功率MOS管&#xff0c;在4.5~18V寬輸入電壓范圍內可以持…

API 版本控制:使用 ABP vNext 實現版本化 API 系統

&#x1f680;API 版本控制&#xff1a;使用 ABP vNext 實現版本化 API 系統 &#x1f4da; 目錄 &#x1f680;API 版本控制&#xff1a;使用 ABP vNext 實現版本化 API 系統一、背景切入 &#x1f9ed;二、核心配置規則 &#x1f4cb;2.1 前置準備&#xff1a;NuGet 包與 usi…

Android高級開發第四篇 - JNI性能優化技巧和高級調試方法

文章目錄 Android高級開發第四篇 - JNI性能優化技巧和高級調試方法引言為什么JNI性能優化如此重要&#xff1f;第一部分&#xff1a;JNI性能基礎知識JNI調用的性能開銷何時使用JNI才有意義&#xff1f; 第二部分&#xff1a;核心性能優化技巧1. 減少JNI調用頻率2. 高效的數組操…

小白的進階之路系列之十----人工智能從初步到精通pytorch綜合運用的講解第三部分

本文將介紹Autograd基礎。 PyTorch的Autograd特性是PyTorch靈活和快速構建機器學習項目的一部分。它允許在一個復雜的計算中快速而簡單地計算多個偏導數(也稱為梯度)。這個操作是基于反向傳播的神經網絡學習的核心。 autograd的強大之處在于它在運行時動態地跟蹤你的計算,…

43. 遠程分布式測試實現

43. 遠程分布式測試實現詳解 一、遠程測試環境配置 1.1 遠程WebDriver服務定義 # Chrome瀏覽器遠程服務地址 chrome_url rhttp://localhost:5143# Edge瀏覽器遠程服務地址 edge_url rhttp://localhost:9438關鍵概念&#xff1a;每個URL對應一個獨立的WebDriver服務典型配置…

Python爬蟲(40)基于Selenium與ScrapyRT構建高并發動態網頁爬蟲架構:原理、實現與性能優化

目錄 一、引言二、技術背景1. 動態頁面處理痛點2. 架構設計目標 三、核心組件詳解1. Selenium Grid集群部署2. ScrapyRT服務化改造3. 智能等待策略 四、系統架構圖五、性能優化實踐1. 資源隔離策略2. 并發控制算法3. 監控體系 六、總結與展望&#x1f308;Python爬蟲相關文章&a…

【存儲基礎】SAN存儲基礎知識

文章目錄 1. 什么是SAN存儲&#xff1f;2. SAN存儲組網架構3. SAN存儲的主要協議SCSI光纖通道&#xff08;FC&#xff09;協議iSCSIFCoENVMe-oFIB 4. SAN存儲的關鍵技術Thin Provision&#xff1a;LUN空間按需分配Tier&#xff1a;分級存儲Cache&#xff1a;緩存機制QoS&#x…