03月18日
一、今日完成情况
- 完成服务器大语言模型的部署和简单使用(局域网下其他设备的调用)
- 看《金瓶梅》
- 规划一下当助教的思路和未来需要完成的工作,思考是否可以用AI的方法,帮我监控邮箱。
二、今日感悟
- 核心业务数据:
- 大模型的部署,不断的报错和解决,最后还是打通了,回过头来发现,错误非常可爱。
- 和张芷宸同步实验室工作和未来的计划
- 和许智乔同步未来工作的实习准备,非常深入。挺巧到是,今天遇到的都是辩论赛一起打过的,没什么距离。
- 和粟璨同步了他的近况,可以看出来他挺闲的,比我要闲的多。
- 今日工作总结:
- 工作量其实一般,昨晚睡了6h,中午也没睡着,挺累的,晚上干不动了,看看书得了。
- 三大害无处不在,今天总算让我抓住一个陷阱了,可惜无法做实验。
- 明日工作计划:
- vllm原理学习
- 并发使用大语言模型学习
- vsocde远程登录服务器任务尽快完成
- 助教申请表格填写,让老师签字,辅导员盖章
- 今日学习成长:
- 和老朋友同步一下近况挺好的,而且不同于师兄,他们没有直接的工作关系,其实会更纯洁一些。
- 关于服务器ssh打通虚拟账户的端口还是挺神奇的,看来虚拟空间也不是一无是处嘛。
三、备注
- 预定–完成GLM和KiMi模型 opencode相关CLI的测试,查看其效果/codex openai 产品business尝试,对比效果。 截止日期:无
- 预定–华尔街AI发展推演没有系统化了解,导出为图谱的形式,导出笔记,进行理解。 截止日期:3月20日 预计时间:1h
- 预定–老大的论文阅读还是没有完成,这里需要花点时间梳理其算法逻辑。 截止日期:3月22日 预计时间:~~
- 已完成–数据科学数据预处理,完成两部分,实验和实验报告纸质版 截止日期:3月22日 预计时间:20min
- 正在完成–vscode remote ssh 实验室服务登录、vscode github账户配置一步到位 预计时间:30min
- 已完成–服务器上面部署AI的接口,然后就是大语言模型的部署,这个可以了解一下,查看是否麻烦。 截止日期:3月20日
四、千问模型启动
CUDA_VISIBLE_DEVICES=1 python -m vllm.entrypoints.openai.api_server \
--model /root/models/Qwen3-30B-A3B-Instruct-2507 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--max-model-len 4096 \
--trust-remote-code
指令介绍如下:
当前显卡占用,可以发现,第一张显卡的占用还是挺少的,基本是空闲状态。
1、问题解决1–无法检测到模型
现在的问题是,我成功启动了,没有任何报错,可是在另一个终端商,使用curl也好,使用python也好进行API测试,始终没有任何反应:
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/models
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3",
"messages": [
{"role": "system", "content": "你是一个部署在 A100 服务器上的高性能 AI 助手。"},
{"role": "user", "content": "你好,请确认你的模型名称,并解释一下为什么 30B 模型需要占用 70GB 显存?"}
],
"temperature": 0.7
}'
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3",
"prompt": "Hello",
"max_tokens": 5
}'
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/health
因此需要查看哪里存在问题,Gemini的解释是,
原因 A:网络监听地址问题
你启动时如果没写 --host,默认可能是 localhost。 对策:尝试把 curl 里的 localhost 换成 127.0.0.1 或者机器的内网 IP。
原因 B:vLLM V1 版本的兼容性问题
从你之前的报错日志看,你似乎在使用 vLLM V1(这是 vLLM 最近推出的实验性架构)。V1 架构在某些 Python 3.13 环境下可能存在异步死锁。 对策:尝试在启动命令中强制指定 V0 架构(如果你的版本支持):
肯定不是原因1的问题,现在修改版本,重新启动尝试。重新启动依然无法查看到任何信息,也就是我无法检测当前是什么模型,可是通过nvidia-smi查看,也看不到任何的异常,显卡还是在运行的。
(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/health
curl: (52) Empty reply from server
(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/models
(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/completions -H "Content-Type: application/json" -d '{
"model": "qwen3",
"prompt": "Hello",
"max_tokens": 5
}'
(base) root@d58125c354a4:~/Documents/code/python#
按道理,这里是需要显示出模型的类别的,现在我的思路是,是不是因为我在容器当中的关系,这里开启的8000端口,是否是服务器的8000端口,导致无法访问(容器中)下面我将尝试看一下容器当中的通讯和模型的通讯是否可以打通。
第一步:检查网络监听与进程匹配度
第二步:检查环境变量冲突 (针对 API 阻塞)
# 1. 查看 8000 端口的具体绑定情况
netstat -tunlp | grep :8000
# 2. 确认 vLLM 相关进程的存活状态(查看父子进程关系)
ps -ef | grep vllm | grep -v grep
# 3. 检查容器内的本地回环是否正常
ping -c 3 127.0.0.1
# 1. 检查环境变量中是否有代理设置
env | grep -iE "proxy|http|https"
# 2. 检查防火墙规则(虽然在容器内较少见,但部分科研镜像有定制)
iptables -L -n | grep 8000
可以看到,我开启了代理,因此我终端的端口访问,自动会被映射到代理的服务器当中,而不是本地的自己服务器,下面我再次调试,便打通了。
(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/models
{"object":"list","data":[{"id":"qwen3","object":"model","created":1773819403,"owned_by":"vllm","root":"/root/models/Qwen3-30B-A3B-Instruct-2507","parent":null,"max_model_len":8192,"permission":[{"id":"modelperm-88b108f0e8521985","object":"model_permission","created":1773819403,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/completions -H "Content-Type: application/json"(base) root@d58125c354a4:~/Documents/code/python# localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "qwen3",
"messages": [
{"role": "system", "content": "你是一个部署在 A100 服务器上的高性能 AI 助手。"},
{"role": "user", "content": "你好,请确认你的模型名称,并解释一下为什么 30B 模型需要占用 70GB 显存?"}
],
"temperature": 0.7
}'
{"id":"chatcmpl-a5584f479594f272","object":"chat.completion","created":1773819428,"model":"qwen3","choices":[{"index":0,"message":{"role":"assistant","content":"你好!我是 Qwen3,是通义实验室推出的大规模语言模型。关于你提到的“30B 模型需要占用 70GB 显存”的问题,我来为你详细解释一下。\n\n### 一、模型名称确认\n我(Qwen3)是通义千问系列中的最新版本,属于超大规模语言模型。虽然我有多个版本(如 Qwen-Max、Qwen-Plus、Qwen-Turbo 等),但我的参数量级通常在 **70B** 左右(例如 Qwen-Max),而并非 30B。不过,你提到的“30B 模型”可能是其他厂商或开源模型(如 Llama-3-30B、Mixtral-8x22B 等)的参数规模,因此我们以通用逻辑来解释显存占用问题。\n\n---\n\n### 二、为什么 30B 模型需要约 70GB 显存?\n\n这是一个非常典型的问题。简单来说:**30B 模型的参数本身仅占约 60GB,但实际运行时显存远超这个数值,因此需要约 70GB 或更多**。以下是具体原因:\n\n#### 1. **参数存储(约 60GB)**\n- 模型参数以 **FP16(16位浮点)** 存储时,每个参数占 2 字节。\n- 300亿(30B)参数 × 2 字节 = **60 GB**。\n- 这是显存占用的“基础部分”。\n\n#### 2. **优化器状态(Optimizer States)——额外 60GB(训练阶段)**\n- 在**训练**阶段,优化器(如 Adam)需要为每个参数存储:\n - 一阶动量(momentum)\n - 二阶动量(variance)\n- 每个参数需要额外 4 字节 × 2 = 8 字节。\n- 30B × 8 字节 = **240 GB**(非常夸张!)\n- 但通过**混合精度训练 + 优化器状态分片**(如 ZeRO-3),可压缩到 60~80GB。\n\n> ⚠️ 所以:**训练 30B 模型需要 100GB+ 显存**,但你提到的“70GB”更可能是指**推理阶段**。\n\n#### 3. **推理阶段的显存占用(约 70GB)**\n在**推理**(inference)阶段,显存主要来自以下几部分:\n\n| 显存来源 | 占用估算 |\n|--------|--------|\n| 模型参数(FP16) | 30B × 2 = 60 GB |\n| 激活值(Activations) | 5~10 GB(取决于上下文长度) |\n| KV Cache(Key-Value Cache) | 5~15 GB(尤其在长文本生成时) |\n| 临时缓冲区 & 内存碎片 | 2~5 GB |\n\n✅ **合计:约 70~80 GB**\n\n> 🔥 关键点:**KV Cache 是推理显存膨胀的主要原因**。 \n> 例如,当生成 4096 个 token 的文本时,每层的 Key 和 Value 缓存会不断累积,导致显存占用显著上升。\n\n---\n\n### 三、如何降低显存占用?\n\n1. **使用 INT8 量化**(如 GGUF、GPTQ):\n - 参数从 FP16 → INT8(1 字节),显存降至约 30GB。\n - 推理速度更快,精度损失较小。\n\n2. **使用 PagedAttention / FlashAttention**:\n - 优化 KV Cache 管理,减少内存碎片。\n - 显存占用可降低 20%~30%。\n\n3. **模型并行 + 分片加载**:\n - 使用多 GPU(如 8×A100 80GB)分摊显存压力。\n\n---\n\n### 总结\n\n| 项目 | 显存占用 |\n|------|---------|\n| 30B 模型参数(FP16) | ~60 GB |\n| 推理显存(含 KV Cache、激活值) | ~70 GB |\n| 训练显存(含优化器状态) | ~100+ GB |\n\n👉 所以,**30B 模型在推理时占用约 70GB 显存是合理且常见的**,主要由参数 + KV Cache + 激活值共同导致。\n\n---\n\n如果你有具体的模型名称(如 Llama-3-30B、Mixtral-8x22B 等),我可以为你提供更精确的显存分析。欢迎继续提问!","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":null},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":57,"total_tokens":1124,"completion_tokens":1067,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}
下面我将把这个测试的python 通用规范模板写下来:
待定
2、局域网mac远程访问
现在是这样的,我ssh配置过,因此我在ssh端可以直接访问服务器,现在AI告诉我远程访问模型的非常好玩的方法,直接用ssh打通隧道,来到我的容器当中所映射的8000端口上。
A、背景
在 MacBook 上配置过 SSH 免密登录(可能是通过 ssh-copy-id 将公钥放到了容器的 ~/.ssh/authorized_keys 中)。 当你执行 ssh -L 8000:127.0.0.1:8000 ... 时:
- 身份验证:SSH 自动使用了你 MacBook 上的私钥完成握手,所以没跳出密码提示。
- 隧道建立:
-L 8000:127.0.0.1:8000告诉 SSH:“请在我的 MacBook 上监听 8000 端口。一旦有流量进入,就通过这个加密连接,转发到远程容器内部的127.0.0.1:8000。” - 结果:只要这个 SSH 窗口不关闭,你的 MacBook 就像是直接插在了容器的 8000 端口上
因此在打通之后,可以直接在MacBook端,使用vscode 编写python代码,使用远程启动的大模型了。
ssh -L 8000:127.0.0.1:8000 root@121.48.163.69 -p 45618
开一个终端,或者zellij,这里直接打通,然后就挂在这里不用管,这个指令已经完成了端口的映射了。在另一个端口发送数据,访问模型进行尝试:
curl http://127.0.0.1:8000/v1/models
(base) kipley@kipleys-MacBook-Air ~ % curl http://127.0.0.1:8000/v1/models
{"object":"list","data":[{"id":"qwen3","object":"model","created":1773820786,"owned_by":"vllm","root":"/root/models/Qwen3-30B-A3B-Instruct-2507","parent":null,"max_model_len":8192,"permission":[{"id":"modelperm-905e179a26f1dbea","object":"model_permission","created":1773820786,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}%
五、无视警告继续安装
笑死我了!!! 事情是这样的,我在伊朗最新样式官方视频下面的评论区,看到了一个b站视频的链接,出于好奇,我就点进去了。
点进去之后,这个B站的视频下面评论区就三条消息,其中两条是一个网址,激发了我的好奇心,于是我复制网址,来到浏览器打开。
一开始我反的选,就是说,我没满25岁,没有这个需求,他还很诚实的,说我不符合条件,然后我重新选了一次,我就进到了下面的页面,下面的页面有许多黄色的内容,一看就是专门为没有资源的中年大叔准备的,而且质量还行吧。
页面是一个下载软件的页面,向下滑是污言秽语之黄色图片,就暂作不提,于是我本来想退出的,可是好奇心害死猫,我看看这个软件是什么,于是我下载了apk文件。
我其实知道,这类软件是公安监视的,其实我们手机安装,他们后台是可以看到的,然后可能会打电话约谈做反诈宣传。
我下载安装,我其实没有完全安装,就是手机会扫描这个软件使用了什么权限,于是我当然会看一下,不看不知道,一看吓一跳,这个权限差点直接把我手机内容共享了。这要是同意,手机可能都不是我自己的了,甚至这个软件的权限,可能是诈骗,因为正规的YP软件,不需要你手机这么多权限的呀,敏感权限如下图所示:
| 1 | 2 | 3 |
|---|---|---|
| 简单翻译一下:读取我SD卡当中所有的文件,读取我的相册,读取我的通讯录,运行软件控制手机打电话且不经过我的允许,获得我的精确位置,录取音频,获得我的通话记录,允许我的手机拍照和视频,允许获取我自己的电话号码…… |
这里只是敏感权限,下面还有十几个相对不敏感权限,可是很多也是有问题的。
我非常懊恼,自己为什么没有一个空白的备用安卓手机用来做测试,可以仿制一个通讯录,甚至可以配置一下虚拟定位地址等,太可惜了哎,自己的手机我肯定不敢做测试的,真的要被爆通讯录的。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com