【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…