【agent开发】部署LLM(一)

article/2025/7/5 1:01:21

本周基本就是在踩坑,没什么实质性的进展

下载模型文件

推荐一个网站,可以简单计算下模型推理需要多大显存: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.hkcw.cn/article/kyqjhFLfyW.shtml

相关文章

【Linux】pthread多线程基础

参考博客&#xff1a;https://blog.csdn.net/Alkaid2000/article/details/128121066 线程概述 与进程类似&#xff0c;线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序&#xff0c;且共享同一份…

瑞萨CS+ for CC V8.13.00环境安装教程

前言&#xff1a;最近接触到瑞萨的芯片&#xff0c;需要安装对应的集成开发环境&#xff0c;发现这与ARM内核的单片机存在很大的不同&#xff0c;这里先简单介绍一下其IDE的安装配置方式。 1&#xff0c;官网下载 瑞萨半导体开发环境安装网址 CS | Renesas 当然在下载安装包之…

【知识点】第3章:基本数据类型

文章目录 知识点整理数字类型字符类型 练习题判断题程序题 知识点整理 数字类型 Python语言提供整数、浮点数、复数3种数字类型。 不同进制的引导符号&#xff1a; 不考查进制间的转换。 浮点数类型与数学中实数的概念一致&#xff0c;表示带有小数的数值。Python语言要求所…

【算法】回溯法

一、回溯法的基本思想 回溯法有“通用解题方法”的美称&#xff0c;解题过程是一个搜索过程。在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff08;也就是递归返回&#xff09;&#xff0c;尝试别的路径。因此&#xff0…

AIGC 基础篇 高等数学篇 01函数与极限

声明&#xff1a;本文章仅用于博主本人复习&#xff0c;请不要将本文章当成预习篇或者讲解篇 此外&#xff0c;此文章不会包含全部的高等数学知识&#xff0c;仅仅是为了学习AI而进行的前期学习&#xff0c;因此知识含量不会很多&#xff0c;由于博主是第一次尝试做&#xff0…

如何在 Windows 11 Home 版上下载和安装 Hyper-V

Windows 11 Home 版与之前的微软操作系统版本一样,没有自带 Hyper-V 管理器。因此,如果您想在 Windows 11 Home 上下载和安装 Hyper-V,以下是详细的步骤教程。 Hyper-V 是微软提供的一种虚拟化解决方案,允许用户为各种操作系统创建虚拟机。与 VMware 或 VirtualBox 不同,…

C++ --- string类的简单实现

string类的简单实现 前言1、基本成员2、构造方法和析构方法2.1无参构造2.2有参构造2.3析构函数2.4拷贝构造函数 3、遍历方式3.1operator [ ]3.2iterator3.2.1正向迭代器3.2.2const正向迭代器 3.3范围for 4、常用方法&#xff0c;运算符重载c_str()size()reverse()push_back()po…

ESP32之Linux编译环境搭建流程

背景&#xff1a;为了解决 “windows环境中编译ESP32代码速度慢” 的问题&#xff0c;现搭建一个Linux环境&#xff0c;让windows下的VScode连接到Linux环境&#xff0c;VSCode负责编辑代码&#xff0c;虚拟机用于编译代码。 目录 一、安装VMware 1.1 获取VMware安装包 1.2…

Python-matplotlib中的Pyplot API和面向对象 API

matplotlib中的Pyplot API和面向对象 API Pyplot API&#xff08;状态机模式&#xff09;面向对象 API 详解二者差别核心区别方法命名差异注意事项差别举例 &#x1f345; Pyplot API&#xff08;状态机模式&#xff09;和面向对象 API 是两种不同的编程接口.&#x1f345; 它们…

BUUCTF之[ACTF2020 新生赛]BackupFile

打开环境就一句话 找出源文件! 结合题目名字&#xff1a;BackupFile 先用dirsearct扫描网站文件 发现一个index.php.bak ,拼接url下载 打开发现php代码 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…

Spring Boot 3.X 下Redis缓存的尝试(一):初步尝试

背景 想像一下有这么一个场景&#xff0c;一个系统有超多角色、角色下有多个菜单、菜单下有多个按钮权限&#xff0c;这种子父级关系查询每次向数据库查询相当耗时&#xff0c;那么我们是否可以将这种更新频次不高&#xff0c;而查询耗时的数据且不直接影响业务的数据放进缓存中…

基于springboot的民间文化艺术品销售系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

9 动态规划

9.3 爬楼梯 从1开始举例子发现规律 dp[i]dp[i-1]dp[i-2]; class Solution { public:int climbStairs(int n) {if(n<1){return 1;}vector<int>dp(n1);dp[2]2;dp[1]1;for(int i3;i<n;i){dp[i]dp[i-1]dp[i-2];}return dp[n];} }; 9.29 打家劫舍 1 确定dp数组下标与…

Playwright 测试框架 - Node.js

🚀超全实战:基于 Playwright + Node.js 的自动化测试项目教程【附源码】 📌 本文适合自动化测试入门者 & 前端测试实战者。从零开始手把手教你搭建一个 Playwright + Node.js 项目,涵盖配置、测试用例编写、运行与调试、报告生成以及实用进阶技巧。建议收藏!👍 �…

4.RV1126-OPENCV 图像轮廓识别

一.图像识别API 1.图像识别作用 它常用于视觉任务、目标检测、图像分割等等。在 OPENCV 中通常使用 Canny 函数、findContours 函数、drawContours 函数结合在一起去做轮廓的形检测。 2.常用的API findContours 函数&#xff1a;用于寻找图片的轮廓&#xff0c;并把所有的数…

Cursor从入门到精通实战指南(五):一键生成流程图/架构图,开发者必备收藏!

解锁Cursor&#xff1a;开启高效开发新境界 结合了GPT-4、Claude 3.5等强大的大语言模型&#xff0c;能够通过自然语言交互实现代码生成、原型设计、流程优化等功能。无论是编程新手还是经验丰富的开发者&#xff0c;都能借助Cursor的智能特性&#xff0c;快速完成复杂的编码任…

postman工具使用

基本功能操作 常用断言 定义&#xff1a;postman 断言借助 JavaScript - js 语言编写代码&#xff0c;自动判断预期结果与实际结果是否一致。&#xff08; 注意断言 代码写在 Tests 的标签中&#xff09; 断言响应状态码 断言响应体是否包含某个字符串&#xff08;Response bo…

【Elasticsearch】Elasticsearch 核心技术(一):索引

Elasticsearch 核心技术&#xff08;一&#xff09;&#xff1a;索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档&#xff08;指定ID&#xff09;3.3.2 添加文档&#xff08;自动生成ID&am…

玩客云 OEC/OECT 笔记(2) 运行RKNN程序

目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件玩客云 OEC/OECT 笔记(2) 运行RKNN程序 RKNN OEC/OEC-Turbo 使用的芯片是 RK3566/RK3568, 这个系列是内建神经网络处理器 NPU 的, 利用 RKNN 可以部署运行 AI 模型利用 NPU 硬件加速模型推理. 要使用 NPU, 首先需要在电脑使…

【音视频】FFmpeg 硬件(NVDIA)编码H264

FFmpeg 与x264的关系 ffmpeg软编码是使⽤x264开源项⽬&#xff0c;也就是说ffmpeg软编码H264最终是调⽤了x264开源项⽬&#xff0c;所以我们要先理解ffmpeg和x264的调⽤关系&#xff0c;这⾥我们主要关注x264_init。对于x264的参数都在 ffmpeg\libavcodec \libx264.c x264\co…